Software Sebagai Produk vs Software Sebagai Jasa

8 Maret 2009

Sejak pertama mengetahui keberadaan bahasa Nusa (dulu Batak), saya selalu rutin mencari tahu kabar perkembangannya. Maklum, model distribusi kompiler untuknya saat ini tidak lazim saya temui, yaitu melalui milis privat di Yahoo! Groups namun dengan pengumuman publik. Saya coba registrasi (ini sebelum memulai pengembangan bahasa saya sendiri, saat ini Jeruk), namun tidak ditanggapi. Tak apalah, malah jadi disibukkan urusan sendiri saja.

Akhir Februari lalu, saat penasaran lagi dengan Nusa, saya temui artikel menarik di situs Pak Bernaridho, pencipta bahasa ini. Mungkin beliau terkadang melakukan narcissism-search —seperti saya juga :P — karena di sana beliau merespon kritik pedas seorang blogger dari Kalimantan Selatan yang, meski judulnya salah alamat, diarahkan pada pandangan beliau tentang software bebas. Sepintas lalu artikel Pak Bernaridho memang terkesan menghina software bebas, namun berkat tanggapan ini segala isu yang keruh bagi saya menjadi jelas, bahkan akhirnya mempengaruhi perspektif saya sendiri. Maka sebelum saya lancarkan tanggapan saya secara penuh, saya ucapkan terima kasih baik pada Pak Syamsuddin Ideris yang berani memulai proses dialektik ini maupun Pak Bernaridho Hutabarat yang bersedia merespon dengan kepala dingin.

Para pengembang software profesional tentu telah familiar dengan inti catatan; saya hanya mempertegas saja konsep yang jarang ditekankan dalam artikel lain. Now, on with the show!

Baca entri selengkapnya »


The Quick and The Dead-Slow: Dua cara merakit scanner menggunakan regex

21 Januari 2009

Biasanya kalau baru membaca kode sumber sebuah program pemroses bahasa, saya memulai dari struktur data internal yang dimodifikasi pertama kali, kemudian mencari komponen penganalisa leksikal. Waktu saya membaca kode sumber interpreter bahasa pemrograman BAIK (asli Indonesia!), ada satu hal yang menarik perhatian saya: program ini menggunakan pustaka ekspresi regular generik sebagai komponen lexer-nya. Seperti kita ketahui, pustaka ekspresi regular itu pisau Swiss Army-nya pemrosesan teks. Dari sekadar mencari teks, membaca tabel CSV, validasi input, sampai analisa sintaksis untuk bahasa pemrograman dapat dilakukan olehnya. Segera terlintas di benak saya, bahwa ini bukan solusi optimal, sampai saya pikirkan lagi bahwa mungkin keputusan penggunaan pustaka generik tersebut oleh Pak Haris Hasanudin memiliki dasar yang rasional. Kenapa tidak?

Jadinya kali ini saya hanya akan menggunakan cerita tentang implementasi scanner BAIK sebagai konteks untuk sebuah dongeng, tentang ekspresi regular dan dua cara umum dalam memanfaatkannya untuk memproses bahasa pemrograman. Seperti sebelumnya, akan saya sertakan program-program pendek yang mengilustrasikan kedua pendekatan tersebut, yaitu sebuah pustaka ekspresi regular…

> ((build-regexp-matcher "ba+c?b") "baaaaaaaaab")
#t
> ((build-regexp-matcher "ba+c?b") "bacb")
#t

… dan sebuah pembangkit scanner untuk bahasa C.

> (generate-regexp-matcher-c-code "ba+c?b")
int match( char* cstr ) {
   char* c = cstr;
   if( c && *c == 'b' ) {
      ++c;
      if( c && *c == 'a' ) {
         ++c;
         while( c && *c == 'a' ) ++c;
         if( c && *c == 'c' ) ++c;
         if( c && *c == 'b' ) {
            ++c;
            return 1;
         }
      }
   }
   return 0;
}
>

Meski program ini sederhana dan ringkas (agar saya tidak dikira sedang bersaing panjang-panjangan blog dengan Steve Yegge), namun ia memadai untuk tujuan saya dan masih membuka kesempatan bagi yang berminat untuk mengembangkannya.

Baca entri selengkapnya »