1 poin oleh GN⁺ 2025-12-12 | Belum ada komentar. | Bagikan ke WhatsApp
  • 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.

Belum ada komentar.