Teknik Membuat Interpreter
(craftinginterpreters.com)- Crafting Interpreters adalah buku yang disusun agar pembaca yang ingin mencoba membuat bahasa sendiri dapat mengikuti implementasi lengkap bahasa scripting dari awal hingga akhir
- Membahas dalam satu alur, mulai dari konsep desain bahasa seperti parsing dan semantik hingga implementasi eksekusi seperti representasi bytecode dan garbage collection
- Pembaca memulai dari
main()dan mengimplementasikan sendiri bahasa dengan tipe dinamis, lexical scope, first-class function, closure, class, dan inheritance - Mengajak pembaca menulis sendiri seluruh kode yang bersih dan cepat, berskala beberapa ribu baris, dengan fokus pada memahami cara kerja internal daripada hasil akhirnya
- Tersedia dalam format cetak, eBook, PDF, dan web; di web, semua bab, tulisan pelengkap, dan ilustrasi dapat dibaca gratis
Cakupan implementasi buku
- Crafting Interpreters ditujukan bagi pembaca yang ingin membuat bahasa pemrograman sendiri, atau ingin mengetahui bagaimana bahasa dirancang dan diimplementasikan
- Buku ini membahas bersama topik-topik inti yang diperlukan untuk mengimplementasikan bahasa scripting berfitur lengkap
- Parsing
- Semantik
- Representasi bytecode
- Garbage collection
- Implementasi dimulai dari
main(), lalu pada akhirnya diperluas menjadi bahasa dengan fitur berikut- Sintaks yang kaya
- Tipe dinamis
- Lexical scope
- First-class function
- Closure
- Class
- Inheritance
Cara membaca dan hasil akhir
- Alih-alih hanya melihat kode contoh, pembaca akan menulis sendiri setiap baris sambil mengikuti struktur internal pemroses bahasa
- Kode akhir berukuran beberapa ribu baris, dan disusun dengan tujuan menjadi implementasi yang bersih dan cepat
- Buku ini dirancang agar pembaca memahami konsep tingkat tinggi dan implementasi tingkat rendah bersama-sama dalam proses menyelesaikan satu bahasa, bukan menjelaskannya secara terpisah
Format yang tersedia
-
Edisi cetak
- Edisi cetak setebal 640 halaman, dengan ilustrasi gambar tangan beresolusi tinggi dan tipografi yang ditata sendiri oleh penulis
- Amazon.com
- Barnes and Noble
- Download Sample PDF
-
eBook
- Menyediakan CSS yang sesuai untuk pembaca e-book dan ukuran layar, penyorotan sintaks penuh warna, serta hyperlink aktif
- Kindle Amazon.com
- Apple Books
- Play Books Google
- Nook B&N
- EPUB Smashwords
-
PDF
- Disediakan dalam bentuk yang mudah dibawa sambil tetap mempertahankan tata letak manual edisi cetak dan ilustrasi yang tajam
- Buy from Payhip
- Download Free Sample
-
Web
- Disediakan dengan desain responsif yang mendukung perangkat dari desktop hingga ponsel, dan semua bab, tulisan pelengkap, serta ilustrasi dapat dibaca gratis
- Read Now
1 komentar
Komentar Hacker News
Saya penulisnya. Melihat tanggapan positif terhadap buku saya benar-benar menghangatkan hati. Saya mencurahkan banyak waktu dan kasih sayang, dan rasanya sangat memuaskan melihatnya memberikan dampak yang saya harapkan
Berkat materi ini, rasa percaya diri saya meningkat besar, dan sampai sekarang saya masih mengingat proyek itu sebagai salah satu pekerjaan yang paling saya sukai
Saya juga penasaran apakah Anda terpikir menulis buku lanjutan seperti compiler atau JIT untuk Lox. Selain itu, lexical analygator benar-benar terbaik; ia beberapa kali muncul dalam presentasi internal perusahaan kami beserta atribusinya, dan dulu bahkan sempat ada fan art di whiteboard
Kadang saya merasa ada penulis yang seolah harus berpura-pura bahwa bidang ini seluruhnya ilmu hitam, meski mungkin saja saya memang kurang mampu memahami GoF design patterns
Saat membuat Crumb(https://github.com/liam-ilan/crumb), saya membaca Crafting Interpreters, dan bagian tentang scope serta variabel lokal khususnya sangat esensial
Keseimbangannya antara implementasi teknis dan wawasan konseptual sangat baik, sehingga sangat membantu bahkan ketika saya mencoba keluar dari jalur yang ditetapkan buku. Tulisan teknis seperti ini adalah materi berkualitas tinggi yang layak dijadikan acuan
Dokumentasinya bagus dan proyeknya keren
Bagian yang paling saya sukai dari buku ini adalah ia menuntun kita menulis dua interpreter yang berbeda untuk bahasa yang sama
Berkat itu, kita bisa memahami bagian-bagian yang lebih rumit dan halus dalam proses membuat bahasa pemrograman. Di paruh pertama buku, kita lebih dulu berkenalan dan terbiasa dengan ide-ide besar, lalu ketika bertemu lagi di interpreter kedua, kita benar-benar bisa menyerap bagian-bagian menariknya. Buku yang benar-benar luar biasa
Karena juga membahas materi compiler lain, meski saya belum menonton semuanya, video Immo Landwerth yang membuat compiler dengan C# sambil menghasilkan IL, debug symbols, dan lain-lain juga bagus
Materinya kira-kira dari 5 tahun lalu, jadi bukan sintaks C# terbaru dan tampaknya dari era sekitar .NET Core 3, tetapi untuk sebagian besar pekerjaan seharusnya tidak ada masalah besar. Hanya saja, mungkin akan muncul cukup banyak peringatan terkait nullable reference types
https://www.youtube.com/playlist?list=PLRAdsfhKI4OWNOSfS7EUu...
Saya merasa kebanyakan programmer suatu saat perlu mengikuti buku ini sampai selesai. Setelah melakukannya, saya jadi jauh lebih memahami apa yang sebenarnya terjadi di dalam compiler atau tooling bahasa
Di antara panduan teknis yang pernah saya ikuti, ini termasuk yang paling baik penulisannya, dan sangat membantu menjadikan konsep-konsepnya sebagai pemahaman saya sendiri. Konsep-konsep itu berguna bukan hanya untuk compiler, tetapi juga di banyak tempat lain
Keunggulan sampingan buku ini, tetapi mungkin sama pentingnya, adalah ia mengajarkan kejelasan
Teks, kode, struktur, dan pengaturan temponya semuanya jelas dan tepat sasaran. Kata “Crafting” benar-benar pas, karena rasanya seperti buku yang ditulis seorang pengrajin untuk sesama pengrajin
Menurut saya buku ini seharusnya menjadi langkah kedua atau ketiga dalam perjalanan mempelajari compiler bahasa pemrograman
Langkah pertama adalah, dalam keadaan sama sekali tidak tahu tentang interpreter atau desain bahasa, mencoba sendiri menulis interpreter untuk bahasa sederhana buatan sendiri. Langkah kedua adalah menulis ulang itu sambil mengurangi kesalahan
Tanpa melakukan ini, sulit untuk benar-benar mengapresiasi nuansa halus topik ini, dan kita cenderung melewatkan konsep-konsep yang tampaknya tidak penting
Tidak apa-apa jika kita tidak menciptakan ulang semua teknik dari nol sendiri. Berdiri di atas bahu raksasa adalah hal yang wajar
Kalau saya tidak membaca sesuatu seperti CI terlebih dahulu, saya bahkan tidak akan mencoba menulis interpreter sendiri, dan tidak akan mencapai langkah ketiga
Tidak ada rekursi; semuanya dilakukan dengan push dan pop manual di stack. Masalahnya, karena saya tidak memahami parsing dengan benar, sebagian besar bahasa saya implementasikan dengan string.split dan string.replace, dan seperti yang bisa diduga, muncul konsep-konsep yang tidak bisa di-nest. Sayang sekali saya tidak menyimpan source code-nya
Dalam beberapa hari saja saya menemui terlalu banyak bug, lalu mulai mengambil pendekatan yang lebih akademis dan membaca buku. Meski begitu, itu langkah pertama yang hebat, karena tanpa percobaan seperti itu, saya mungkin bahkan tidak akan tahu bahwa ini adalah topik yang cukup untuk satu buku penuh
Saya sangat menghormati orang-orang dengan dedikasi seperti itu dan semua orang yang menjaga infrastruktur pengembangan, tetapi saya merasa lega bahwa fase “ingin membuat bahasa sendiri” saya berakhir hanya sebagai minat sesaat
Beban kerjanya benar-benar luar biasa
Saya penasaran apakah ada sumber bagus untuk membuat bahasa bertipe statis yang memiliki hal-hal seperti polimorfisme parametrik dan inferensi tipe dasar
Dalam Crafting Interpreters, saya merasa bisa membuat bahasa kecil yang mandiri dan mencakup hampir semua konsep yang ingin saya ajarkan, seperti cakupan variabel, fungsi, closure, kelas dan dispatch dinamis, alur kontrol, dan sebagainya
Sebaliknya, dalam sistem tipe ada terlalu banyak percabangan di ruang desain dan tidak ada jalur “terbaik” yang jelas. Apakah ada subtyping, apakah generics dihapus atau direifikasi, apakah kode generik dispesialisasi pada waktu kompilasi, apakah inferensi tipe bersifat lokal atau Hindley-Milner—semua pilihan itu merupakan percabangan
Apa pun pilihan yang diambil, kita akan melewatkan bagian penting dari cabang yang tidak dipilih, dan bisa mengecewakan pembaca yang mengharapkan jalur lain. Mungkin buku pengantar menyeluruh yang lebih luas seperti Types and Programming Languages lebih cocok, tetapi dengan begitu kita kehilangan keseruan membangun satu hal yang konsisten
Ada juga edisi C dan Java dari buku yang sama, tetapi menurut saya kualitasnya lebih rendah. Sebaiknya digunakan bersama edisi ML
Saya melihat implementasi di https://github.com/wh5a/Algorithm-W-Step-By-Step/blob/master... sangat bergaya lama, lalu memodernkannya dan merapikannya hingga menjadi https://gist.github.com/kccqzy/fa8a8ae12a198b41c6339e8a5c459.... Setelah itu saya sengaja “merusak” beberapa bagiannya untuk melihat bagaimana algoritmanya menjadi rusak
Saya sangat merekomendasikan mencoba, dengan cara yang dapat dijangkau, salah satu pekerjaan ilmu komputer yang sebelumnya saya kira hanya bisa dilakukan oleh penyihir. Setelah berhasil menyelesaikan satu atau dua, Anda akan sadar bahwa meski sulit, pada umumnya ini adalah pekerjaan yang bisa terus didorong maju sedikit demi sedikit, dan rasa percaya diri akan tumbuh besar. Siapa pun yang ingin menempuh jalan ini boleh menghubungi zellyn@(most things)
Saya baru saja menyelesaikan bagian 2 dan ini benar-benar buku yang bagus. Mengerjakan sendiri satu atau dua tugas yang disarankan di setiap bab sangat membantu untuk memahami isinya