3 poin oleh GN⁺ 2023-12-11 | 1 komentar | Bagikan ke WhatsApp
  • Write Your Own Retro Compiler adalah buku setebal 339 halaman yang membahas kompiler self-hosting yang berjalan di CP/M berbasis Z80 dan menghasilkan kode untuk lingkungan yang sama, lengkap dengan seluruh source code
  • T3X/0 yang menjadi target implementasi adalah bahasa sederhana yang berakar pada Pascal dan BCPL, dan buku ini menyertakan manual lengkap sepanjang 20 halaman
  • Diperlukan pengetahuan tentang bahasa prosedural seperti C atau Pascal serta bahasa assembly, dan akan lebih mudah diikuti bila memiliki pengetahuan dasar Z80 assembly dan CP/M
  • Buku ini menjelaskan analisis leksikal, parsing, pembuatan kode, optimisasi sederhana, antarmuka BDOS, dan runtime library dengan diagram, tabel, dan contoh
  • Semua kode disediakan dalam domain publik, dan tersedia juga tautan pembelian buku cetak·PDF, daftar isi, halaman contoh, serta unduhan source

Cakupan dan sasaran buku

  • Write Your Own Retro Compiler adalah buku setebal 339 halaman, terbitan Lulu Press tahun 2023, dengan 91 gambar dan format 6" x 9"
  • Topik utamanya adalah kompiler self-hosting yang berjalan di CP/M pada prosesor Z80 dan menghasilkan kode untuk lingkungan yang sama
  • Disusun agar tetap bisa diikuti meskipun belum punya pengalaman membuat kompiler
  • Bahasa implementasi T3X/0 adalah bahasa sederhana yang berakar pada Pascal dan BCPL
  • Buku ini menyertakan manual lengkap T3X/0 sepanjang 20 halaman

Pengetahuan yang dibutuhkan

  • Setidaknya harus memahami satu bahasa pemrograman prosedural
    • Contohnya C dan Pascal
  • Juga perlu memahami setidaknya satu bahasa assembly, idealnya assembly untuk CPU Z80
  • Pengetahuan dasar tentang sistem operasi CP/M juga diperlukan
  • Untuk pembaca yang belajar mandiri, disertakan pengantar singkat tentang bahasa assembly Z80

Komponen kompiler

  • Cara kerja internal kompiler dijelaskan melalui banyak diagram, tabel, dan contoh
  • Topik yang dibahas meliputi
    • analisis leksikal
    • parsing
    • pembuatan kode
    • optimisasi sederhana
    • Antarmuka BDOS

      • runtime library

Tautan dan kode yang disediakan

1 komentar

 
GN⁺ 2023-12-11
Komentar Hacker News
  • Saya baru menerbitkan buku compiler terbaru. Ini lebih mirip versi perluasan dari “Write Your Own Compiler”, dan kali ini membahas pembuatan kode CP/M untuk Z80 alih-alih ELF pada sistem modern, sehingga banyak bagian menjadi jauh lebih sederhana
    Anda bisa melihat tingkat kompleksitas seperti apa yang diperlukan untuk membuat compiler yang dapat mengompilasi dirinya sendiri dalam waktu kurang dari 10 menit pada sistem Z80 4MHz. Kodenya gratis, tetapi bukunya berbayar

    • Saya selalu menantikan apa yang dibuat Nils. Semoga ia juga bisa menjadikan pekerjaan seperti ini bisnis yang menguntungkan, dan suatu hari nanti saya ingin membeli semuanya lalu mengikutinya sendiri
      Selain itu, saya juga ingin melihat buku tanpa basa-basi tentang Forth dan interpretasi ala Nils
  • Baru-baru ini saya membuat compiler C multi-pass dan assembler untuk CPU x86 lama seperti ini dengan TypeScript
    https://github.com/Mati365/ts-c-compiler

    • Compiler dalam buku ini ditujukan untuk Z80 yang sedikit lebih tua, bahkan tidak punya instruksi perkalian atau pembagian. Meski begitu, compiler ini juga bisa menghasilkan kode untuk 8086 dan 386
  • Saya punya buku fisik Practical Compiler Construction edisi ke-2 dan cukup menyukainya. Untuk yang tertarik, saya merekomendasikan buku-buku Nils

  • Buku ini terlihat menarik. Namun saya masih menunggu penerus The Dragon Book yang benar-benar layak
    Saya berharap ada buku yang membahas CPU modern dan, kalau bisa, optimisasi GPU juga, serta cara merancang dan menulis mesin virtual modern dengan garbage collector konkuren yang cepat. Dalam beberapa hal, itu mungkin bahkan lebih sulit daripada menulis compiler

    • Building an Optimizing Compiler karya Bob Morgan adalah buku yang sepenuhnya berfokus pada optimisasi compiler modern dan diterbitkan pada 1997
      Buku itu membahas pembangunan control flow graph, berbagai optimisasi yang bisa dilakukan di atasnya, analisis alias, static single assignment form, optimisasi berbasis dominator CFG, instruction scheduling, alokasi register, hingga pembuatan object code. Tidak seperti kebanyakan buku compiler, buku itu tidak membahas analisis leksikal, parsing, NFA/DFA, dan semacamnya
      Bagi yang ingin membuat optimizing compiler yang memerlukan analisis tingkat lanjut, Static Program Analysis juga tampaknya berguna: https://cs.au.dk/~amoeller/spa/
      Untuk garbage collection ada Garbage Collection handbook: https://gchandbook.org/
    • Saya ingat tidak terlalu menyukai The Dragon Book saat masih mahasiswa. Saya sudah tidak begitu ingat alasannya, tetapi mungkin karena saya merasa strukturnya kurang baik; beberapa topik dibahas terlalu rinci sementara topik lain kurang dijelaskan
      Jika sudah punya dasar pengetahuan tertentu, kuliah ini mungkin cocok: https://www.cs.cmu.edu/~janh/courses/411/18/schedule.html
      Saya terutama menyukai cara kuliah itu memperkenalkan bentuk SSA
      Topik yang lebih lanjut ada di sini: https://www.cs.cmu.edu/~15745/handouts.html
    • Saya juga sudah lama mengharapkan buku seperti itu. Sekarang semuanya menjadi terlalu kompleks karena unsur seperti microcode/firmware modern, dan banyak hal terasa seperti sihir
      Saat sesuatu terasa seperti “sihir”, saya menganggapnya sebagai tanda bahwa seseorang dengan cerdik mengakali sesuatu yang sebelumnya dianggap sebagai batas. Belakangan saya membaca tentang fake bass, yaitu cara membuat speaker kecil tampak menghasilkan bass yang lebih besar daripada yang sebenarnya bisa dihasilkan; menarik bagaimana harmonik digunakan untuk menipu otak agar seolah mendengar nada yang lebih rendah dari kenyataannya
  • Terlihat menarik, tetapi ada kekurangan bahwa pembaca harus lebih dulu mengetahui atau mempelajari bahasa pemrograman baru, T3X
    Saya juga penasaran apakah mungkin menulis dan mengembangkan compiler dari awal pada sistem CP/M retro yang koneksi ke dunia luarnya hanya keyboard dan layar

    • Saya banyak memikirkan bagian ini sebelum menulis buku. Pada akhirnya saya memilih T3X karena compilernya jauh lebih kecil daripada compiler subset C terkecil, dan secara pribadi saya menganggap T3X lebih mudah dipelajari dan dipahami
      SubC berisi 3815 baris, sedangkan T3X/0 berisi 2330 baris
      Tentu saja, Anda juga bisa memulai di CP/M tanpa alat eksternal, tetapi itu berarti Anda harus menulis compiler bootstrap dalam bahasa assembly. Itu memakan banyak waktu, tetapi sepenuhnya mungkin. Hanya saja saya ragu apakah itu akan menarik sebagai bahan bacaan
    • Saya tidak melihatnya sebagai kekurangan. Bagi orang yang ingin menulis compiler, bahasa pemrograman baru kemungkinan bukan hambatan besar, dan toy language yang sederhana dan rapi bisa lebih baik untuk tujuan edukasi
      Penggunaan sintaks bergaya ALGOL, bukan sintaks bergaya C, memang agak mengejutkan, tetapi itu mungkin hanya bias saya. Memetakan DO dan END di kepala menjadi { dan } bukan beban besar
  • Tutorial compiler yang melampaui tahap analisis leksikal dan parsing? Rasanya hampir yang pertama
    Bercanda, tetapi memang banyak materi berhenti di sana. Saya berencana membeli ini

  • Akan menarik juga kalau ada buku tentang menulis sistem operasi sendiri yang mirip CP/M

    • Itu adalah Operating Systems Design and Implementation karya Andrew Tanenbaum
      Memang buku itu menunjukkan cara membuat sistem operasi microkernel bergaya Unix, tetapi Anda cukup melewati semuanya kecuali bab sistem berkas. Lalu jangan ikuti saran struktur data tree, gunakan hanya tabel datar, dan tidak usah terlalu peduli pada implementasi ukuran berkas yang akurat. Maka jadilah CP/M
      Secara pribadi saya lebih suka edisi ke-2. Menurut saya edisi ke-3 menjadi rumit tanpa perlu karena kode demo Minix dibuat agar berjalan di PC akhir 1990-an, bukan PC 1980-an
  • Saya tidak bermaksud negatif; ini sekadar pengamatan yang mungkin membantu
    Saya membaca bab gratisnya, dan beberapa bagian tampak bisa sulit bagi orang yang belum banyak memiliki pengetahuan tentang topik ini. Di bawah tiap judul, konsep dijelaskan dari awal, seperti “tata bahasa suatu bahasa adalah...”, tetapi hanya beberapa kalimat kemudian topik lanjutan seperti instruksi assembly muncul tanpa penjelasan
    Jika pembaca berada pada tingkat harus mempelajari arti tata bahasa, kalimat-kalimat berikutnya mungkin sulit dipahami. Jadi jika konsistensinya sedikit ditingkatkan, kualitas buku ini akan menjadi lebih baik

    • Seperti yang saya tulis dalam deskripsi buku, pengetahuan sebelumnya tentang konstruksi compiler tidak diperlukan, tetapi saya menganggap pembaca harus akrab dengan setidaknya satu bahasa prosedural dan satu bahasa assembly
      Karena itu, saya pikir tidak masalah mengasumsikan pembaca sudah mengetahui hal-hal seperti instruksi assembly
      Lampiran buku juga berisi pengantar singkat tentang assembly Z80, tetapi itu pun mengasumsikan pembaca sudah memahami dasar-dasar bahasa assembly
      Setiap buku harus memulai dari suatu titik. Sulit menulis buku konstruksi compiler dengan asumsi pembaca sama sekali tidak punya pengetahuan pemrograman komputer. Namun bukan berarti tidak ada curse of knowledge, jadi saya pasti akan mengingat poin ini
  • Terlepas dari isi bukunya sendiri, saya juga suka desain web yang retro dan minimalis yang sangat pas
    Ini sangat membangkitkan nostalgia. Saya teringat kenangan indah saat menaruh buku setebal 6 inci berjudul seperti “HTML 3.2 UNLEASHED!!!!” di atas meja dan membuat situs sendiri

    • Masa-masa yang menyenangkan
      Namun kesenangannya berakhir saat Anda harus menerapkan perubahan global ke sekitar 1500 halaman statis. Rasa sakitnya belum cukup besar untuk membuat CMS sendiri, tetapi meskipun saya membuatnya, desainnya akan tetap saya pertahankan
  • https://web.archive.org/web/20231210141834/http://t3x.org/t3...