3 poin oleh GN⁺ 2025-11-04 | Belum ada komentar. | Bagikan ke WhatsApp
  • Catatan yang menganalisis kode C interpreter bahasa K sepanjang 50 baris buatan Arthur Whitney sambil menafsirkan gaya pemrogramannya yang unik
  • Kode tersebut memuat banyak struktur eksperimental yang berbeda dari kode C pada umumnya, seperti sintaks padat berbasis makro, ekstensi C nonstandar, dan penggunaan argumen implisit
  • Penulis menafsirkan sendiri makna tiap makro dan fungsi sambil menelusuri filosofi bahasa keluarga APL serta kelebihan dan kekurangan kepadatan kode
  • Sebagai kelebihan, penulis menyoroti panjang yang singkat dan daya susun yang tinggi, sementara kekurangannya adalah sintaks nonstandar dan menurunnya keterbacaan
  • Pada akhirnya, kode ini dinilai sebagai contoh yang menunjukkan pentingnya cara berpikir menulis kode setelah sepenuhnya memahami masalah, bukan sekadar “cara menulis dengan singkat”

Arthur Whitney dan kodenya

  • Arthur Whitney adalah ilmuwan komputer yang merancang bahasa A, K, Q serta basis data kdb, Shakti
    • kdb adalah basis data deret waktu berkecepatan sangat tinggi yang digunakan di sektor finansial, sedangkan Shakti adalah versi yang lebih cepat dan dirancang untuk menangani dataset berskala 1 triliun baris
  • Bahasa-bahasanya adalah bahasa berbasis array yang sangat dipengaruhi APL, dengan penekanan pada keringkasan dan daya ekspresi matematis
  • Fokus tulisan ini bukan pada aplikasi finansialnya, melainkan pada analisis gaya unik kode C yang ditulis Whitney

Struktur interpreter K 50 baris

  • Repositori publik ksimple memuat interpreter C sekitar 50 baris yang ditulis Whitney hanya dalam beberapa hari
  • Inti kodenya terdiri dari dua berkas, a.h dan a.c, dengan ciri khas pemendekan definisi fungsi melalui makro dan struktur yang memperlakukan pointer seperti integer
  • Melalui sintaks typedef char*s,c;, s didefinisikan sebagai pointer string dan c sebagai tipe karakter
  • s Q=(s)128; adalah contoh pointer yang digunakan seperti integer, dan di seluruh kode Q dipakai sebagai nilai khusus yang menandakan status error
  • Banyak dipakai sintaks ekstensi GCC seperti statement expression berbentuk ({e;}) dan operator ?:

Makna makro dan fungsi utama

  • #define _(e...) ({e;}) : makro yang membungkus beberapa pernyataan menjadi satu ekspresi
  • #define i(n,e) : bentuk ringkas perulangan, menuliskan loop for dalam satu baris
  • #define Q(e) dan sejenisnya adalah makro penanganan error, sedangkan Qr, Qd, Qz masing-masing mengembalikan error rank, domain, dan not-yet-implemented
  • Makro _s, _i, f, F menyederhanakan deklarasi fungsi dan secara implisit memakai argumen x, a
  • ax, ix, nx dan lainnya adalah makro untuk pemeriksaan tipe data dan pengindeksan, dengan ax menentukan apakah “x adalah atom”
  • f(w,write(1,ax?&x:x,ax?1:strlen(x));x) adalah fungsi output: jika atom maka dicetak sebagai karakter, jika vektor maka sebagai string

Cara kerja interpreter

  • Fungsi m(x) melakukan alokasi memori dan pembuatan pointer yang memuat informasi panjang, dengan panjang maksimum vektor 255 byte
  • Makro g(a,v) menyatukan penanganan operasi atom/vektor, dan fungsi seperti not, sub, At, _A didefinisikan berdasarkan makro ini
  • Makro G(f,o) melakukan pembuatan otomatis fungsi operator biner, mendukung operasi seperti <, ==, +, *, &, |
  • cat, rev, cnt, Tak adalah fungsi manipulasi vektor, dan rev membuat indeks terbalik dengan memakai fungsi ind
  • Fungsi e() adalah evaluator rekursif yang membaca string dari kanan ke kiri untuk menangani variabel satu karakter, angka, dan operator
  • main() berbentuk loop REPL yang menerima input, mengevaluasinya dengan e(), lalu mencetak hasilnya

Penilaian terhadap gaya kode

  • Kelebihan
    • Himpunan operasi primitif yang ringkas dan tersusun dari makro yang dapat dikombinasikan
    • Karena panjang kode yang pendek, seluruh logika bisa dilihat sekaligus tanpa perlu scroll
    • Ekspresi berkepadatan tinggi memampatkan struktur logis kode
  • Kekurangan
    • Penanganan tipe yang tidak bermakna secara semantik karena char* diperlakukan seperti integer
    • Keterbacaan menurun akibat penggunaan langsung kode ASCII, operator ternary yang rumit, dan sintaks nonstandar
    • Argumen implisit dan nama variabel yang pendek membuat niat kode sulit dipahami
  • Unsur netral
    • Sintaks khusus GCC (?:, statement expression) menarik, tetapi mengurangi portabilitas
    • Penggunaan argumen implisit berguna pada kode kecil, tetapi bisa menimbulkan kebingungan pada kode besar
    • Nama yang pendek efisien setelah terbiasa, tetapi lemah dalam menyampaikan makna

Kesimpulan dan pelajaran

  • Kode ini bukan sekadar soal “cara menulis dengan singkat”, melainkan menunjukkan cara berpikir menulis kode setelah masalah dipahami sepenuhnya
  • Kode Whitney adalah bentuk pemindahan model matematis yang sudah selesai ke dalam kode, yaitu “hasil mengekspresikan pikiran ke dalam kode”
  • Penulis merefleksikan kebiasaannya selama ini yang cenderung menyelesaikan masalah di dalam kode,
    dan ke depan menekankan pentingnya pemodelan konseptual dan penataan pikiran sebelum menulis kode
  • Pada akhirnya, eksperimen ini dirangkum sebagai pengalaman untuk melatih kemampuan membaca kode dan menelusuri keseimbangan antara kepadatan kode dan kejernihan berpikir

Ide eksperimen lanjutan

  • Usulan latihan memperluas interpreter:
    • Dukungan vektor floating-point
    • Penanganan elemen lebih dari 255 buah
    • Angka dan nama variabel multikarakter
    • Literal array dan pengabaian spasi
    • Penambahan manajemen memori dan fitur penanda error
    • Menyelesaikan fungsi yang belum diimplementasikan
  • Perluasan semacam ini dapat menjadi eksperimen untuk mengembangkan gaya kode ala Whitney menjadi bahasa yang benar-benar dapat dipakai sambil tetap mempertahankan ciri khasnya

Belum ada komentar.

Belum ada komentar.