Saya memiliki beberapa masalah dalam memahami konsep runtime library
, terutama yang Python. Jadi saya telah menulis beberapa program python hello world dan bermaksud untuk mengeksekusinya, jadi saya menulis python ./hello_world.py
.
Apa langkah-langkah yang terjadi antara saya menekan tombol Enter dan kode mesin yang dihasilkan dari kode python saya dieksekusi pada CPU saya? Dan bagaimana hubungannya dengan sistem runtime Python dan / atau library?
Jawaban:
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.
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 denganBinaryExpression
simpul denganoperator
nilai=
,Left
nilaiReferenceExpression(x)
danRight
nilaiIntegerLiteralExpression(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.)
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 kestdout
. 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.sumber
Implementasi standar Python adalah mesin virtual kode byte. Ini berarti bahwa kode mesin (opcodes dari set opcode prosesor Anda) tidak dihasilkan dari program Anda. Opcode hanya dipilih dari opcode yang sudah dikompilasi ke dalam mesin virtual sementara VM mengartikan kode byte.
Bagaimana program Anda diubah menjadi kode byte di tempat pertama adalah pertanyaan yang sedikit berbeda, tetapi jawaban singkatnya adalah "melalui kompilasi, sama seperti terjemahan bahasa ke bawah lainnya".
sumber