2 poin oleh GN⁺ 2025-03-14 | 1 komentar | Bagikan ke WhatsApp
  • Belajar selama 5 tahun di sekolah komputer di Prancis dan bekerja selama 20 tahun sebagai pengembang lepas
  • Terutama mengerjakan proyek klien dengan Ruby on Rails
  • Saat mulai mempelajari Common Lisp, menulis protokol manajemen server yang menghasilkan parser ASN.1
    • Menghasilkan kode C dari Common Lisp untuk mengembangkan server SNMP
  • Setelah itu menulis berbagai proyek berbasis Common Lisp:
    • cl-unix-cybernetics – proyek dengan bintang terbanyak di GitHub
    • Mengembangkan cl-streams dan cffi-posix
    • cl-facts – triple store yang berfungsi sebagai basis data graf Common Lisp
      • Cepat, mendukung transaksi atomik dan transaksi yang bisa dinest
      • Kompatibel dengan unwind-protect
      • Bisa digunakan hanya dengan mempelajari 3 makro
      • Dipresentasikan di European Lisp Symposium (ELS)
  • Saat fokus pada pengembangan Common Lisp, ia kehilangan klien, tetapi tetap sangat yakin pada potensi Lisp

Batasan mesin virtual (VM) dan container

  • Para ahli menunjukkan berbagai masalah pada VM dan container:
    • VM membuang CPU dan bandwidth secara tidak perlu
    • Container berbasis cgroups di Linux memiliki kerentanan remote code execution (RCE) dan privilege escalation
    • Setiap tahun ditemukan kerentanan keamanan baru
  • Sambil lebih memilih OpenBSD, ia menghindari masalah pada alat DevOps seperti Terraform dan Ansible

Batasan Common Lisp dan masalah performa

  • Di Clojure dan lainnya, GC (garbage collector) menimbulkan masalah performa:
    • Ada kasus gagal saat mengembangkan game strategi yang memproses ribuan unit
    • GC pada JVM membawa masalah performa dan biaya

Keputusan beralih ke C

  • Menyadari keterbatasan performa dan portabilitas Common Lisp:
    • Linux, OpenBSD, GTK+, dan GNOME semuanya ditulis dalam C
    • Pada akhirnya beralih ke C untuk menyelesaikan masalah performa dan portabilitas

Pengembangan bahasa baru KC3

  • Mengembangkan pustaka utilitas libc3 → bahasa C3 → lalu berganti nama menjadi KC3
  • Fitur KC3:
    • Memiliki interpreter (ic3) dan compiler (c3c)
    • Membuat dan mengonversi balik struktur data dari buffer UTF-8
    • Defensive programming → meminimalkan bug sejak awal
    • Tidak memiliki masalah keamanan
    • Sistem tipe data berbasis tagged union enum

Hasil berbasis KC3

  • Mem-porting cl-facts ke C89:
    • Pengembangan selesai selama masa Covid-19
    • Mengimplementasikan penambahan triple, penghapusan, sistem kueri rekursif, transaksi, logging, persistensi, dan lainnya
  • Menulis parser dan generator untuk jenis algoritmik:
    • Mencakup struct, linked list, map, hash table, complex number, tuple, code block, dan lainnya
    • Sangat terinspirasi oleh José Valim (pencipta Elixir)
  • ikc3 – REPL yang menampilkan hasil evaluasi KC3
  • kc3_httpd – mengembangkan web server berbasis framework MVC
    • Halaman blog saat ini juga dilayani oleh kc3_httpd
  • Menulis situs web dokumentasi → menggunakan konverter Markdown ke HTML milik KC3

Kesimpulan

  • Beralih dari Common Lisp ke C berdasarkan pengalaman yang diperoleh
  • KC3 menunjukkan hasil yang sangat baik dalam performa, keamanan, dan portabilitas
  • Ke depan akan menyediakan makro tambahan dan contoh yang berkaitan dengan KC3

1 komentar

 
GN⁺ 2025-03-14
Opini Hacker News
  • Saya justru berpendapat sebaliknya. Setelah banyak menggunakan VB saat kecil, saya belajar Java, C, dan C++ di universitas, lalu terutama memakai C. Saya menjadi pengembang inti Xfce dan bekerja selama 5 tahun

    • Setelah itu saya beralih ke pengembangan backend dan menggunakan Java, Scala, dan Python. Bahasa-bahasa ini punya masalah lain, tetapi saya menyukai pustaka standar dan sistem manajemen dependensinya
    • 12 tahun kemudian saya kembali ke Xfce, dan C tetap sulit. Ada banyak masalah seperti kebocoran memori, dereferensi pointer NULL, dan data race
    • Saat menggunakan Rust, saya menjadi lebih produktif dibanding dengan C
  • Saya sangat memahami perasaan itu. Selama beberapa tahun saya merasakan dorongan kuat untuk membangun sesuatu dengan C murni

    • Bahasa utama saya adalah C++, tetapi memakai pustaka C lama benar-benar menyenangkan. Antarmukanya sederhana dan mendasar
    • Saat mengembangkan metode dalam C murni, saya suka karena bisa fokus 100% pada algoritme
    • C memaksa saya mengerjakan semuanya sendiri. Ia tidak menyembunyikan sihir dan kompleksitas
    • Orang-orang di sekitar saya ingin menggunakan fitur C++ modern, tetapi saya justru makin ingin menghapus fitur-fitur C++
  • Dulu sekali saya mulai pemrograman dengan C, dan sampai sekarang kadang ingin kembali ke masa itu

    • Namun ketika benar-benar mencoba menulis aplikasi kelas produksi dengan C, saya sadar mengapa saya berhenti
    • Terlalu banyak hal yang harus dilakukan sendiri tanpa bantuan dari komputer
    • Jika hari ini harus memilih bahasa tingkat rendah, saya rasa saya akan memilih Ada. Mirip C, tetapi dengan lebih banyak dukungan dari kompiler
  • Setelah membaca tulisan blog itu, saya bingung apa yang sebenarnya ingin disampaikan penulis

    • Saya bertanya-tanya apakah alasan program penulis tidak digunakan memang karena bahasanya
    • Mungkin ada masalah terkait konsumsi memori
    • Penulis tidak menyebutkan pelajaran yang didapat atau statistik pengguna
    • Tidak ada fitur baru yang ditambahkan, tampaknya hanya ditulis ulang sebagai latihan
  • Contoh kode kc3 diberikan

  • C adalah bahasa pertama saya, dan saya pernah membuat aplikasi konsol sederhana serta game kecil

    • Namun saya tidak ingin kembali lagi. Tool build dan manajemen dependensi sudah ketinggalan zaman
    • Zig adalah C baru saya. Ia menyertakan kompiler C dan dapat menggunakan header C tanpa wrapper
    • Saya memakai Go saat butuh bahasa yang sederhana, dan Rust saat butuh performa serta keamanan
  • Kadang saya ngoding dengan C sebagai hobi. Tapi terlalu banyak pekerjaan berulang yang membuatnya membosankan

    • Menulis kompiler dalam C terasa seperti berurusan dengan tagged union
    • Saya pernah berpikir untuk menulis generator agar pekerjaan berulang berkurang, tetapi belum melakukannya
    • Saat mengembangkan proyek dengan C, saya sempat mempertimbangkan penggunaan bahasa embedded untuk prototyping
  • C berhasil karena bersifat praktis

    • Memang tidak aman, tetapi Anda bisa melakukan apa yang Anda inginkan
  • Saya tidak paham apa pun

    • Saya bertanya-tanya apa itu killer app, masalah yang terkait dengan CL, dan apakah C satu-satunya pilihan
    • Saya juga ragu apakah benar-benar yakin tidak ada masalah keamanan dalam menjalankan kode KC3
  • Tulisan ini terasa seperti kisah peringatan tanpa akhir yang bahagia