- Proyek yang mengimplementasikan ulang tutorial ‘Let’s Build a Compiler’ karya Jack Crenshaw yang diterbitkan pada 1988~1995 dengan Python dan WebAssembly
- Versi aslinya menggunakan Pascal dan assembly Motorola 68000, tetapi dalam pengerjaan kali ini diubah menjadi kode yang dapat dijalankan di lingkungan modern
- Inti tutorial ini adalah mengimplementasikan sendiri recursive-descent parser dan menghasilkan kode assembly nyata sejak tahap awal
- Pendekatan Crenshaw menggunakan syntax-directed translation, tetapi menunjukkan keterbatasan pada tahap penanganan tipe
- Implementasi ulang kali ini bermakna karena memulihkan tutorial klasik tersebut ke bentuk yang bisa dijalankan dan dieksperimenkan langsung oleh pengembang modern
Latar belakang tutorial klasik
- ‘Let’s Build a Compiler’ karya Jack Crenshaw adalah panduan pengantar pembuatan compiler yang diterbitkan antara 1988~1995 dan masih sering dirujuk hingga sekarang
- Teks aslinya ditulis dalam Pascal dan menghasilkan kode assembly Motorola 68000
- Bahkan setelah 35 tahun, pada 2025 pun masih terus dibicarakan di Hacker News dan tempat lain
- Penulis artikel pertama kali menemukan tutorial ini pada 2003 dan sangat terkesan, lalu pada 2025 memindahkannya lagi ke Python dan WebAssembly
Implementasi ulang ke Python dan WebAssembly
- Tidak berhenti pada sekadar membaca, penulis menerjemahkan compiler dalam tutorial ke Python dan mengimplementasikannya agar menghasilkan WebAssembly (WASM)
- Hasilnya dipublikasikan di repositori GitHub(eliben/letsbuildacompiler)
- Berkas
TUTORIAL.md menjelaskan bagaimana setiap bagian dari versi asli dipetakan ke kode Python
- Pengguna dapat membaca tutorial aslinya sambil bereksperimen dengan kode yang benar-benar bisa dijalankan
Contoh bahasa KISS dan keluaran WASM
- Ditampilkan hasil kompilasi program contoh dalam bahasa KISS yang dirancang Crenshaw menggunakan compiler versi Python
- Contohnya mencakup
procedure, loop while, serta pass-by-value dan pass-by-reference
- Teks WASM yang dihasilkan mencakup logika penanganan parameter referensi (by-reference parameter), dengan hampir tidak ada optimisasi yang diterapkan
- Bagian di mana variabel global
X dikembalikan secara implisit dari fungsi main adalah mekanisme untuk memudahkan pengujian
- Kode WASM yang dihasilkan digunakan dalam pengujian untuk memverifikasi hasil yang diharapkan melalui eksekusi nyata
Kekuatan tutorial
- Tutorial Crenshaw membangun recursive-descent parser secara bertahap dan berfokus pada pembuatan kode yang benar-benar berjalan alih-alih teori yang rumit
- Pada masa itu
lex dan yacc dianggap standar, tetapi kesederhanaan dan kejelasan parser buatan tangan memberi pengaruh besar
- Selama 20 tahun berikutnya, penulis pun menjadi lebih menyukai recursive-descent parser manual
- Selain itu, ketika kebanyakan materi kuliah saat itu berfokus pada parsing, Crenshaw sudah membahas generasi kode assembly sejak tahap awal
Keterbatasan dan kemungkinan perbaikan
- Tutorial ini menggunakan pendekatan syntax-directed translation, yaitu menghasilkan kode langsung saat proses parsing
- Pendekatan ini berguna untuk belajar, tetapi memiliki keterbatasan karena informasi tipe tidak diketahui sebelumnya sehingga optimisasi menjadi sulit
- Khususnya setelah tipe diperkenalkan pada bagian 14 dan seterusnya, terlihat bahwa pendekatan yang lebih terstruktur dengan representasi menengah (IR) atau AST diperlukan
- Tidak dijelaskan secara eksplisit mengapa Crenshaw menghentikan tutorial setelah bagian 14, tetapi disebutkan bahwa kemungkinan ada kaitannya dengan keterbatasan ini
- Penulis menilai bahwa bagian 14 adalah titik balik untuk beralih ke pendekatan yang membuat AST lebih dulu, lalu melakukan pemeriksaan tipe dan generasi kode
Kesimpulan
- Tutorial aslinya tetap mempertahankan keterbacaan dan kepraktisan yang sangat baik sebagai pengantar pembuatan compiler
- Versi Python·WASM kali ini adalah implementasi pelengkap agar pengembang modern bisa belajar tanpa teknologi lama
- Siapa pun dapat bereksperimen lewat repositori GitHub, dan ini dinilai sebagai reinterpretasi modern yang memungkinkan orang merasakan langsung struktur compiler
Belum ada komentar.