5 poin oleh darjeeling 2026-02-05 | 1 komentar | Bagikan ke WhatsApp

Ringkasan:

  • Membahas proses penggantian total parser bahasa C pycparser, yang selama hampir 20 tahun berjalan di atas PLY (Python Lex-Yacc), menjadi parser Recursive Descent yang ditulis manual dengan memanfaatkan agen coding LLM (Codex).
  • Hasil yang dicapai mencakup penghapusan dependensi eksternal (PLY), penurunan tingkat kesulitan pemeliharaan, dan peningkatan performa sebesar 30%, yang membuktikan kegunaan praktis LLM dalam refaktorisasi kode legacy skala besar.
  • Menekankan pentingnya peninjauan berulang oleh pengembang manusia dan prompt engineering untuk mengatasi masalah kualitas kode yang dihasilkan LLM (seperti keterbacaan dan kompleksitas).

Ringkasan detail:

  1. Latar belakang dan motivasi
    pycparser adalah proyek open source utama dengan sekitar 20 juta unduhan per hari. Sebelumnya, proyek ini menggunakan library PLY untuk menangani tata bahasa C99, tetapi sejumlah masalah berikut terus menumpuk:
  • Masalah dependensi: library PLY telah dihentikan pemeliharaannya (Archived), sehingga menimbulkan risiko keamanan dan pemeliharaan.
  • Kompleksitas grammar: saat mendukung standar terbaru seperti C11, C23, dan ekstensi grammar, konflik reduce-reduce khas YACC menjadi semakin sering terjadi, sehingga perluasan menjadi sulit.
  • Perubahan filosofi: seiring waktu, penulis semakin yakin bahwa parser Recursive Descent yang ditulis langsung lebih unggul daripada parser generator dalam hal pemahaman dan pemeliharaan.
  1. Proses kolaborasi dengan LLM (Codex)
    Penulis memutuskan untuk menyerahkan pekerjaan ini kepada LLM, yang diperkirakan akan memakan waktu lebih dari seminggu jika dikerjakan sendiri. Test suite kuat milik pycparser, yang memiliki lebih dari 2.500 baris, berperan sebagai "guardrail" untuk memverifikasi hasil kerja LLM.
  • Porting awal: dengan prompt seperti "biarkan lexer tetap, ubah hanya parser menjadi Recursive Descent", Codex bekerja lebih dari satu jam dan menghasilkan prototipe yang lolos pengujian.
  • Perbaikan berulang: kode awal secara fungsional nyaris sempurna, tetapi kurang terbaca dan memiliki kualitas yang mengecewakan, misalnya penggunaan exception secara berlebihan untuk mengendalikan alur kontrol. Penulis secara aktif memanfaatkan Git branch dan merapikan kode melalui puluhan commit.
  1. Hasil dan pelajaran
  • Peningkatan performa: parser yang ditulis manual menunjukkan performa sekitar 30% lebih cepat dibandingkan versi berbasis YACC sebelumnya.
  • Kualitas kode dan pemeliharaan: LLM cenderung menulis kode yang malas atau rumit, tetapi ketika pengembang memberikan instruksi yang jelas (misalnya "ubah X menjadi Y", "tambahkan komentar"), LLM merespons dengan efektif.
  • Pentingnya static typing: dalam pekerjaan berikutnya, setelah menambahkan Type Annotation Python, akurasi usulan LLM menjadi lebih tinggi. Penulis memperkirakan agen coding di masa depan akan menunjukkan performa yang lebih kuat pada bahasa bertipe kuat seperti Rust atau TypeScript.
  1. Kesimpulan
    Melalui proyek ini, penulis menegaskan bahwa LLM bukan sekadar mainan, melainkan alat yang dapat meningkatkan produktivitas nyata hingga lebih dari 10 kali lipat. Pekerjaan yang biasanya memakan waktu sekitar 30~40 jam dapat diselesaikan hanya dalam 4~5 jam, dan LLM dinilai sangat bernilai sebagai katalis untuk membantu pengembang masuk ke dalam flow.

1 komentar

 
ng0301 2026-02-05

Dari awal saja sudah pemikiran level mastah kalau mengira pekerjaan itu bisa selesai dalam 30~40 jam...