3 poin oleh GN⁺ 2024-07-13 | 1 komentar | Bagikan ke WhatsApp
  • 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

1 komentar

 
GN⁺ 2024-07-13
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

    • Saya seorang software engineer yang belajar sendiri, bahkan baru mulai pemrograman pada usia 21 tahun, dan di pekerjaan pertama saya diberi tugas membuat bahasa kueri sederhana beserta interpreter-nya. Saya sama sekali tidak tahu apa itu interpreter, tetapi pada 2017 saya menemukan buku ini secara online, lalu dalam 3–4 hari bisa membuat prototipe yang berjalan, dan 1–2 minggu kemudian bahkan bisa membuat produk sungguhan
      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
    • Terima kasih sudah menulis buku ini. Saya sekarang hampir menyelesaikan bagian 1, dan karena sekadar ingin mencoba, saya mengikutinya dengan Haskell. Di setiap bab, saya menyadari bahwa “trik cerdas” yang saya pikirkan ternyata tidak begitu cerdas ketika berhadapan dengan kebutuhan di bagian berikutnya
      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
    • Game Programming Patterns juga luar biasa. Kedua buku itu terasa memiliki gaya penulisan yang jujur dan lugas
      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
    • Saya belum menyelesaikan seluruh bukunya, tetapi saya benar-benar berterima kasih karena buku ini dibuka gratis secara online. Saya membeli versi cetak, PDF, dan Kindle, dan saya juga menyarankan orang lain mendukung penulis dengan cara yang sama
    • Buku ini dan Writing An Interpreter In Go adalah buku-buku yang benar-benar ingin saya baca kalau punya lebih banyak waktu. Saya punya cukup banyak ide untuk membuat bahasa typesetting dasar
  • 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

    • Anda menyebut diri “calon engineer”, tetapi melihat Anda membuat Crumb, saya punya kabar baik
    • Anda sudah boleh disebut engineer. Tidak perlu merendah, dan seseorang tidak harus menyelesaikan gelar ilmu komputer untuk menjadi engineer
      Dokumentasinya bagus dan proyeknya keren
    • Terlihat keren. Saya penasaran bagaimana Anda memutuskan tipe data apa saja yang akan dimasukkan
  • 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

    • Saya penasaran berguna di mana selain compiler. Misalnya mungkin di tempat seperti parsing format data
  • 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

    • Bagi saya, buku ini membuat topik seperti ini tidak lagi tampak mistis, dan justru memungkinkan saya memulai langkah kedua dan ketiga
      Tidak apa-apa jika kita tidak menciptakan ulang semua teknik dari nol sendiri. Berdiri di atas bahu raksasa adalah hal yang wajar
    • Saya tidak tahu harus mulai dari mana, dan menganggap proyek seperti ini sebagai semacam sihir di luar kemampuan saya. Namun setelah membaca Crafting Interpreters, saya sadar bahwa pikiran saya hanya butuh sedikit dorongan
      Kalau saya tidak membaca sesuatu seperti CI terlebih dahulu, saya bahkan tidak akan mencoba menulis interpreter sendiri, dan tidak akan mencapai langkah ketiga
    • Saya ingat ketika baru mulai belajar Java, saya ingin membuat bahasa sendiri. Tanpa mencari referensi, saya mengimplementasikan algoritma prioritas operator, dengan cara menyusuri daftar token dan setiap kali mencari subekspresi dengan prioritas tertinggi
      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
    • Saya juga melakukan persis seperti itu. Sebagai langkah pertama, saya membuat bahasa mirip TeX dan mengimplementasikan definisi serta substitusi makro
      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

    • Tidak harus selalu menjadi beban kerja yang luar biasa. Lisp-in-Lisp dalam buku SICP asli atau interpreter kalkulus lambda yang ditulis dengan Haskell bahkan muat dalam satu layar
  • Saya penasaran apakah ada sumber bagus untuk membuat bahasa bertipe statis yang memiliki hal-hal seperti polimorfisme parametrik dan inferensi tipe dasar

    • Saya sudah beberapa kali diminta menulis buku seperti itu, tetapi alasan besar saya belum menulisnya adalah karena topiknya terlalu terbuka
      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 Modern Compiler Implementation in ML karya A. W. Appel
      Ada juga edisi C dan Java dari buku yang sama, tetapi menurut saya kualitasnya lebih rendah. Sebaiknya digunakan bersama edisi ML
    • Inti dari polimorfisme parametrik dan inferensi tipe pada akhirnya adalah implementasi Algorithm W. Cari implementasi mainan di internet lalu coba utak-atik sendiri
      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
    • Sedikit lebih teoretis, tetapi mengikuti kuliah compiler di Coursera secara perlahan menjadi titik balik besar bagi saya. Beberapa video harus saya tonton ulang berkali-kali
      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