108 poin oleh GN⁺ 2025-05-15 | 1 komentar | Bagikan ke WhatsApp
  • Memperkenalkan berbagai tulisan, makalah, dan video yang secara mendasar mengubah cara pandang terhadap bahasa pemrograman dan kompiler
  • Materi yang sangat memperluas pemahaman tentang implementasi GC, perancangan optimizer, alokasi register, dan mesin regular expression yang praktis
  • Z3, abstract domain, bentuk SSA, dan E-Graphs dijelaskan dengan mudah melalui contoh kode nyata sebagai algoritme dan struktur yang benar-benar dipakai di lapangan
  • Setiap materi menguraikan konsep yang rumit secara ringkas namun tetap dapat dikembangkan dan mudah dipahami

Perkenalan tulisan-tulisan yang membawa perubahan cara pandang tentang bahasa pemrograman dan kompiler

  • Sesekali saya menemukan makalah, posting blog, video, dan semacamnya yang benar-benar mengubah cara saya berpikir tentang topik terkait bahasa pemrograman dan kompiler
  • Beberapa tulisan memberi pengaruh yang sangat kuat, sampai-sampai saya bahkan tidak ingat lagi bagaimana saya memikirkannya sebelum membacanya.
  • Di bawah ini adalah pengenalan terhadap materi-materi seperti itu (tanpa urutan tertentu)

Terkait GC, optimizer, abstract domain, dan alokasi register

  • Andy Wingo, a simple semi-space collector, menjelaskan dengan sangat baik proses menerapkan konsep garbage collector Cheney/salin/pemadatan dari teori ke praktik
    • Implementasi inti GC di artikel tersebut sangat ringkas, dapat dikembangkan, dan bisa dipahami dalam setengah hari
  • Tulisan CF Bolz-Tereick, Implementing a Toy Optimizer, memicu perubahan cara pandang tentang metode instruction rewrite dalam optimizer
    • Alih-alih sekadar cari-ganti sederhana, tulisan ini menekankan penggunaan forwarding pointer dan memperkenalkan konsep union-find
    • Seluruh seri toy optimizer memuat hal-hal baru dan menarik di setiap artikelnya
  • Artikel A Knownbits Abstract Domain for the Toy Optimizer, Correctly sekaligus memperkenalkan abstract domain baru dan cara memanfaatkan Z3
    • Artikel ini menunjukkan bukan hanya bagaimana Z3 digunakan untuk berbagai pembuktian operasi numerik, tetapi juga contoh pemakaiannya sebagai mesin verifikasi kode Python
    • Juga memperkenalkan gagasan bahwa bila Z3 tidak dapat menemukan counterexample, maka ada jaminan kebenaran atas kode tersebut
  • Dalam Cranelift, Part 3: Correctness in Register Allocation, Chris Fallin menjelaskan pendekatan membuktikan langsung alokasi register yang benar untuk setiap input
    • Di lingkungan produksi, hasilnya adalah alokasi yang benar atau crash yang bermakna
    • Juga memperkenalkan pendekatan menelusuri ruang keadaan dan mendeteksi bug dengan teknik fuzzing

Terkait parsing, interpreter, JIT, dan struktur abstrak

  • Regular Expression Matching: the Virtual Machine Approach karya Russ Cox menyajikan implementasi mesin regular expression dalam sekitar 50 baris kode yang mudah dibaca
    • Dalam prosesnya, prinsip coroutine, fiber, scheduler, dan sebagainya juga dijelaskan dengan mudah
  • micrograd karya Andrej Karpathy adalah contoh implementasi ultra-kecil yang menjalankan neural network tanpa pustaka eksternal, membantu memahami struktur dan prinsip dasar machine learning
  • How I implement SSA form karya Fil Pizlo memperkenalkan cara baru untuk memperbaiki struktur union-find
    • Dalam transformasi SSA, pointer tambahan dikelola sebagai Identity tag di dalam objek
    • Selain itu, tulisan ini juga menawarkan bahan pemikiran lain seperti Phi/Upsilon form dan efek heap bergaya TBAA
  • Speculation in JavaScriptCore karya Fil Pizlo membahas secara rinci berbagai cara implementasi optimizer di JavaScriptCore
    • Setiap kali membaca ulang tulisan ini, saya selalu mendapatkan insight baru

Desain kompiler, parser, struktur IR, E-Graphs

Penyimpanan AST, analisis dinamis paralel skala besar, dan lain-lain

  • komentar Reddit ini dari Bob Nystrom dan Flattening ASTs karya Adrian Sampson
    • membahas cara menyimpan AST secara padat hampir seperti bytecode, dan
    • memunculkan diskusi besar bahwa jika node IR disimpan dengan cara seperti ini, analisis paralel lock-free skala besar juga dimungkinkan
    • komentar Cliff Click tentang kecepatan alokasi buffer juga memengaruhi cara berpikir ini

1 komentar

 
GN⁺ 2025-05-15
Opini Hacker News
  • Saya sangat menyukai tulisan ini; akhir-akhir ini saya banyak mendalami riset ilmu komputer, tetapi masih ada beberapa hal yang disebut di sini yang belum pernah saya temui. Saya ingin memperkenalkan beberapa paper yang saya sukai tetapi tidak ada di sini: “Open, Extensible Object Models” karya Ian Piumarta membahas sistem metaobjek berorientasi objek yang minimalis dan memberi kebebasan semaksimal mungkin kepada programmer; pada dasarnya hanya operasi pengiriman pesan yang didefinisikan, dan semua sisanya dapat diubah saat runtime. Rasanya seperti versi praktis dari “Art of the Metaobject Protocol”. “Scripting: Higher-Level Programming for the 21st Century” karya John Ousterhout membahas dikotomi antara bahasa pemrograman sistem dan bahasa skrip; kita selalu menginginkan bahasa multiparadigma sempurna yang bisa melakukan semuanya dengan cepat dan produktif, tetapi sering kali lebih baik jika bahasa sistem yang cepat, kompleks, dan terkompilasi dipadukan dengan frontend interpreter yang nyaman dan fleksibel. Bahkan, sering kali cukup dengan memakai C dan Tcl bersama-sama. Ini wajib dibaca bagi siapa pun yang membuat bahasa pemrograman. Project Oberon karya Niklaus Wirth adalah contoh implementasi seluruh sistem komputer, mulai dari UI tingkat tinggi hingga kernel, compiler, dan arsitektur CPU mirip RISC. Ia menyampaikan seruan kuat untuk “lean software” dan benar-benar mempraktikkannya; di zaman sekarang yang penuh dependency hell dan abstraksi berlebihan, itu terasa seperti keahlian yang telah hilang

    • Saya tidak setuju dengan dikotomi dan kesimpulan Ousterhout. Intinya, menurut dia bahasa itu harus menjadi salah satu dari bahasa sistem (C) atau bahasa skrip (Tcl, Python). Bahasa sistem bertipe kuat dan cocok untuk struktur data/algoritme, sedangkan bahasa skrip tidak bertipe dan dipakai untuk “merekatkan” komponen. Ia berargumen bahwa bahasa skrip memungkinkan pengembangan yang lebih ringkas dan lebih cepat karena “tidak punya tipe”, tetapi menurut saya itu bukan penjelasan yang realistis. Sebagai contoh, ia membandingkan kode Tcl dengan kode C++/MFC dan mengatakan Tcl lebih baik, padahal yang sebenarnya ia sukai adalah sintaksnya yang lebih baik. Klaim bahwa bahasa tanpa tipe membuat pengembangan lebih cepat itu tidak benar; hanya berbeda soal kapan Anda menghadapi batasannya. Lebih baik memeriksa semua type error sebelum eksekusi, dan analisis tipe statis sebenarnya mungkin dilakukan pada semua bahasa, hanya saja itu rumit dan sulit. Sebagai perancang PL, hanya memeriksa tipe saat runtime memang keputusan yang masuk akal untuk membuat bahasa dengan lebih mudah, tetapi itu tidak berarti pilihan tersebut lebih baik
  • Saya sangat menyukai tulisan ini; tulisan-tulisan tentang bahasa pemrograman telah mengubah cara saya memandang pemrograman itu sendiri. Saya sering teringat kutipan tentang “safety” dari TAPL(Types and Programming Languages): bahasa yang aman adalah bahasa yang mencegah programmer menembak kaki sendiri dan melindungi abstraksi yang mereka buat. Dengan kata lain, yang penting adalah kemampuan bahasa untuk menjamin integritas abstraksi yang disediakan bahasa itu sendiri maupun abstraksi tingkat lebih tinggi yang dibuat programmer. Misalnya, jika ada abstraksi array, maka ia hanya boleh berubah ketika diperbarui secara eksplisit, dan tidak boleh ikut rusak hanya karena struktur data lain disentuh secara keliru

  • Bicara soal kebiasaan pengembangan yang menarik… Aaron Hsu, yang terkenal karena APL, menulis kode dengan gaya kaligrafi memakai pena fountain untuk merapikan pikirannya. Saya melakukan hal serupa dengan menggambar semacam flowchart objek Python memakai bolpoin murahan untuk menyusun pikiran saya, semacam UML versi murah

    • Saya juga cenderung mencari pena fountain saat mengerjakan masalah yang paling sulit. Memakainya terasa seperti masuk ke ruang berpikir yang sepenuhnya berbeda. Karena ada batasan dalam mengedit, itu mendorong cara berpikir yang lebih konsisten dan linear, tetapi tetap membuka kreativitas karena saya bisa bebas berpindah antara bahasa Inggris, kode, matematika, diagram, dan sebagainya

    • Hubungan antara tulisan tangan dan peningkatan daya ingat memang telah terbukti. Mengetik catatan di komputer itu rasanya setara dengan meninggalkan sidik jari di gagang pintu. Saya berharap teknologi OCR menjadi begitu bagus sehingga kita bisa mencatat sepenuhnya dengan tulisan tangan dan tetap bisa menyimpan serta mencarinya dengan sempurna

  • Saya sangat merekomendasikan untuk menonton ceramah Rich Hickey, terutama ceramah-ceramah awalnya. Ceramah seperti itulah yang benar-benar mengubah cara saya memandang pemrograman itu sendiri

    • Bagi saya, ceramah Rich Hickey bersama “Programming Perl” karya Larry Wall adalah yang paling berpengaruh

    • Saya bahkan ingin bercanda agar orang melewatkan ceramah “Simple made easy” karena selama 10 tahun terakhir semua pembicara konferensi terus-menerus mengutipnya sampai terasa klise. Secara pribadi saya lebih suka “Hammock driven development”, meski itu kurang cocok untuk direkomendasikan di kantor

  • Sayang sekali Abdulaziz menjadi lebih diam setelah kembali ke Kuwait. Ia adalah intern Maxine VM pada 2009 dan orang yang sangat baik. Paper itu benar-benar permata

    • Saya juga merasa sayang, tetapi tampaknya belakangan ia membuka toko roti dan usahanya berjalan baik. Dalam arti itu, bisa dibilang ia sedang mewujudkan mimpinya
  • Baru-baru ini ada tulisan bagus tentang interpreter berbasis closure untuk mempercepat interpreter. Saya memakai teknik itu untuk membuat interpreter brainfuck sederhana, dan hasilnya cukup cepat. Mungkin saya tidak akan memakainya di tempat lain, tetapi sebagai eksperimen itu cukup bermanfaat

    • Saya penasaran dengan perbedaan antara array of closures dan array yang berisi fungsi pointer dan data secara selang-seling. Yang terakhir terasa tidak alami di kebanyakan bahasa dan lebih cocok untuk bahasa seperti C. Namun saya merasa jika fungsi statis dan data ditempatkan bersama dalam array, locality cache-nya mungkin akan lebih baik
  • Saya berharap ada tulisan seperti ini tentang bahasa tingkat lebih tinggi seperti JavaScript atau .NET. Penulis ini jelas sangat cerdas, tetapi ia bekerja di tingkat yang lebih rendah (atau lebih tinggi?) daripada kebanyakan pengguna

  • Tulisan-tulisan lain di blognya juga benar-benar luar biasa

  • Terkait micrograd: saya penasaran apakah ada dokumentasi yang lebih banyak selain source code di repositori Github

  • Saya mengatakan ini karena saya menyukai orang ini, tetapi tulisan-tulisan di sini sebenarnya bukan tentang PL (bahasa pemrograman) itu sendiri; hampir semuanya lebih tentang compiler (kecuali garbage collector). Tentu saya juga suka compiler, tetapi itu topik yang berbeda dari PL

    • Mungkin maksudnya bahasa pemrograman dalam arti implementasinya?