Karena beragamnya, ada beberapa konsep umum yang dimiliki oleh semua bahasa pemrograman modern yang serius. Dua di antaranya adalah inti dari jawaban untuk pertanyaan Anda di atas.
Langkah apa yang terjadi antara saya menekan tombol Enter dan kode mesin yang dihasilkan dari kode python saya yang dieksekusi pada CPU saya?
Kode diuraikan, dianalisis, dan dimasukkan ke dalam juru bahasa. Ini semua tentang bidang yang sangat penting dari ilmu komputer yang dikenal sebagai teori kompiler . Compiler adalah program yang menerjemahkan kode dari satu bahasa (kode sumber Anda) ke bahasa lain (biasanya kode mesin, meskipun "transpiler" yang menerjemahkan dari satu bahasa tingkat tinggi ke bahasa lain memang ada). Ini adalah topik yang sangat besar yang dapat Anda habiskan bertahun-tahun untuk meneliti, tetapi inilah versi dasarnya:
Kompiler dimulai dengan parser , sebuah rutin yang membaca kode sumber Anda dan menerapkan aturan sintaksis bahasa untuk mengetahui apakah masuk akal sebagai kode Python (dalam kasus Anda) yang valid. Jika tidak, parser akan melempar kesalahan dan kompiler menebus, tetapi jika ya, parser mengeluarkan apa yang dikenal sebagai Pohon Sintaks Abstrak, atau AST. AST adalah struktur data pohon yang masing-masing node mengandung elemen sintaks. Misalnya, jika Anda mengatakan x = 5
, Anda bisa berakhir dengan BinaryExpression
simpul dengan operator
nilai =
, Left
nilai ReferenceExpression(x)
dan Right
nilai IntegerLiteralExpression(5)
. Seluruh program Anda dapat diwakili oleh pohon besar seperti ini.
Setelah parser menghasilkan AST, fase kedua adalah analisis semantik . Dalam bahasa Inggris biasa, ini berarti "mencari tahu apa arti AST ini." Itu memeriksa AST untuk menentukan apakah Anda melakukan sesuatu yang ilegal meskipun itu parse yang valid, (misalnya, mencoba memanggil fungsi 1-argumen dengan 3 argumen,) dan memunculkan kesalahan jika Anda melakukannya. Kalau tidak, ia menganalisis AST dan melakukan pengeditan untuk membuatnya lebih mudah untuk dipahami mesin.
Fase ketiga adalah pembuatan kode. Setelah AST dianalisis, disederhanakan, dan valid sepenuhnya, Anda memasukkannya ke dalam generator, yang berjalan di AST dan menghasilkan kode dalam bahasa output. Ini adalah produk jadi Anda.
Dengan Python, ia menggunakan interpreter daripada compiler. Seorang juru bahasa bekerja dengan cara yang persis sama dengan kompiler, dengan satu perbedaan: alih-alih pembuatan kode, ia memuat output dalam memori dan mengeksekusi langsung pada sistem Anda. (Perincian yang tepat tentang bagaimana hal ini terjadi dapat sangat bervariasi antara berbagai bahasa dan penerjemah yang berbeda.)
Dan bagaimana hubungannya dengan sistem runtime Python dan / atau library?
Semua kecuali bahasa yang paling sederhana hadir dengan serangkaian fungsi yang telah ditentukan sebelumnya yang penting bagi sebagian besar pengguna dan akan sulit bagi pengguna untuk mengimplementasikannya sendiri karena satu dan lain alasan. Kode mereka dapat memanggil ke fungsi-fungsi ini tanpa memerlukan pustaka pihak ketiga. (Misalnya, dalam Python yang Anda miliki print
, yang mengirimkan output ke stdout
. Semoga berhasil menerapkannya sendiri!) Serangkaian fungsi ini umumnya dikumpulkan di perpustakaan bersama yang dapat dipanggil oleh kode saat run-time, itulah sebabnya mengapa dikenal sebagai pustaka runtime bahasa, atau cukup "runtime" singkatnya.