Perintah python3 yang kita ketik di terminal sebenarnya menjalankan sebuah program. Program itulah — bukan bahasanya — yang membaca file .py kita dan menjalankannya. Perbedaan antara bahasa dan program pelaksana sering membingungkan pemula, padahal pemahaman tersebut menjelaskan banyak istilah yang akan kita temui: CPython, PyPy, runtime, garbage collector. Pada Chapter ini kita bedah keduanya.
Bahasa versus Interpreter #
Bahasa Python adalah spesifikasi: aturan sintaks dan perilaku yang ditulis dalam dokumen resmi. Interpreter adalah program yang menerapkan spesifikasi tersebut. Karena spesifikasinya terbuka, ada beberapa program berbeda yang mengimplementasikannya:
| Interpreter | Ciri khas | Di mana dipakai |
|---|---|---|
| CPython | Implementasi resmi dan referensi | Distribusi python.org, Linux, macOS |
| PyPy | Memakai JIT compiler untuk eksekusi lebih cepat | Project yang butuh kecepatan eksekusi Python murni |
| MicroPython | Ringkas, untuk microcontroller | Perangkat keras kecil seperti ESP32 |
| IronPython | Berjalan di platform .NET | Integrasi ekosistem .NET |
| Jython | Berjalan di atas JVM | Integrasi ekosistem Java |
Implementasi yang kita unduh dari python.org adalah CPython — dinamai demikian karena ditulis dalam bahasa C. CPython adalah referensi resmi: ketika orang berkata “Python”, hampir selalu yang dimaksud CPython, dan seluruh materi course ini diuji dengannya. Kita bisa membuktikan sendiri identitas interpreter yang sedang berjalan:
import sys
print(sys.implementation.name)Output yang Dihasilkan:
cpythonAttribute sys.implementation menyimpan identitas implementasi. Nilai cpython menegaskan bahwa program python3 yang menjalankan kode kita adalah CPython, bukan PyPy atau implementasi lain.
Apa Itu Runtime #
Istilah runtime merujuk pada lingkungan yang menyediakan layanan bagi kode kita selama program berjalan. Lebih dari sekadar membaca bytecode (materi Chapter Bagaimana Python Bekerja), runtime CPython bertanggung jawab atas:
- Memory management. Runtime mengalokasikan memori untuk setiap object yang kita buat dan mengambilnya kembali ketika object tidak lagi terpakai — pekerjaan garbage collector.
- Pemeriksaan tipe saat eksekusi. Python bertipe dinamis; runtime-lah yang memeriksa operasi mana yang sah setiap saat program berjalan.
- Penyediaan built-in. Function
print(),len(), tipeintdanstr, serta seluruh exception bawaan tinggal di dalam runtime.
Bayangkan runtime sebagai panggung lengkap dengan tata cahaya dan kru di balik layar; kode .py kita hanyalah naskah. Naskah tidak melakukan apa-apa tanpa panggung.
Dynamic Typing Sedang Bekerja #
Layanan runtime yang paling mudah kita amati adalah pemeriksaan tipe dinamis. Mari kita lihat interpreter bekerja pada kode berikut:
import sys
print(sys.implementation.name)
print(type(42))
print(type("Budi"))
umur = 17
umur = "tujuh belas"
print(type(umur))Output yang Dihasilkan:
cpython
<class 'int'>
<class 'str'>
<class 'str'>Mari kita telaah baris-barisnya:
- Baris 3 (
print(sys.implementation.name)): runtime melaporkan identitas implementasinya:cpython. - Baris 4 (
print(type(42))): functiontype()mengembalikan tipe dari object argumennya. Bilangan42bertipeint. - Baris 5 (
print(type("Budi"))): string"Budi"bertipestr. Perhatikan: variable tidak pernah kita deklarasikan bertipe apa pun; tipe melekat pada object-nya. - Baris 7-8 (
umur = 17,umur = "tujuh belas"): variableumurmula-mula menunjuk objectint, lalu dipindahkan untuk menunjuk objectstr. Tidak ada yang protes — variable Python hanyalah nama yang bisa dipasangkan ke object mana pun. - Baris 9 (
print(type(umur))): runtime mengonfirmasi bahwa kiniumurbertipestr.
Konsekuensi pentingnya: kesalahan tipe baru ketahuan pada saat baris bermasalah dieksekusi. Jika suatu saat kita menulis umur + 1 setelah baris 8, program baru gagal di titik itu dengan TypeError — bukan sebelum program berjalan. Bahasa bertipe statis seperti Java menolak kondisi tersebut sejak kompilasi. Python sendiri menyediakan jalan tengah berupa type hints — anotasi tipe yang dapat diperiksa tool khusus tanpa mengubah perilaku runtime — yang akan dibahas pada section Type Hints dan Static Analysis.
Satu Bahasa, Banyak Panggung #
CPython, PyPy, MicroPython, dan kawan-kawannya menjalankan bahasa yang sama di panggung berbeda — dari server raksasa sampai chip sekecil koin. Sepanjang course ini kita memakai CPython dari python.org, dan setiap kali menulis python3 di terminal, yang kita panggil adalah CPython beserta seluruh layanan runtimenya. Selanjutnya kita benar-benar memasangnya ke mesin kita sendiri: langkah-langkah lengkapnya ada di Chapter Menginstal Python.