Kritik Nusa/Nusaptel 2.0

Nusaptel 2.0 sudah dirilis beberapa waktu yang lalu. Rilis ini sempat diliput koran seperti Jawa Pos dan beberapa situs web lain. Nusaptel ini juga akan dipakai di universitas Ma Chung. Anda bisa mendownload Nusaptel ini dari situs universitas Ma Chung.

Mungkin sebagian dari Anda masih mengingat kritik saya terhadap bahasa Nusa yang saya tulis 2 tahun yang lalu. Secara singkat kesimpulan waktu itu adalah: bahasa ini belum layak disebut selesai dari design bahasanya, masih memiliki banyak design flaw, dan implementasi compilernya juga masih jauh dari selesai. Sekarang, 2 tahun kemudian dan dengan library hasil lelang dari depkominfo, bahasa ini masih tetap belum selesai, dan implementasi compilernya masih mengandung hampir semua kesalahan dasar yang saya sebutkan dalam kritik saya.

Sekarang syntax nusa sudah disertakan. Syntax yang diberikan dalam syntax yang dipakai oleh ProGrammar. Anda tidak akan menemukan syntax ini di bagian dokumentasi atau di folder Documents. Syntax ini diberikan di folder “binary/doc”.

Dalam file yang Anda download, Anda bisa melihat juga bahwa sekarang dokumentasi nusa/nusaptel sudah ditulis. Dokumentasi ini sangat dasar, dan tidak membahas banyak konsep sederhana dalam pemrograman imperatif. Beberapa hal yang tidak dibahas:

  1. tipe record/structure. Jadi akan sangat sulit sekali untuk membuat berbagai struktur data.
  2. tipe pointer
  3. pass by reference (membuat prosedur “swap” saja tidak bisa dilakukan”

Dengan aneka keterbatasan itu, apa yang bisa diajarkan menggunakan nusa ini untuk belajar pemrograman? Jika dianalogikan dengan belajar mobil, jika kita diberi mobil mainan yang hanya bisa maju dan mundur saja, kapan kita bisa mengemudi di jalan raya?

Compiler nusa masih memiliki bug yang saya laporkan pertama kali 2 tahun yang lalu. Program sederhana seperti ini tetap tidak bisa di-link:

Program Hello; 

void main()
{
    integer int;
}

Berikut ini hasil output compiler/linker:

yohanes@mycomputer:~/nusa2/home/nusa/binary$ ./Compile Hello.nusa 
set NUSA environment variable
*******************************************
Nusaptel Compiler 2.0 , 2009
Copyright (C) Republic of Indonesia
Departemen Komunikasi dan Informatika
*******************************************
Compiled Module 'Hello.nusa'
Output written to interm/Hello.interm

yohanes@mycomputer:~/nusa2/home/nusa/binary$ ./Link Hello
set NUSA environment variable
*******************************************
Nusaptel Linker 2.0 , 2009
Copyright (C) Republic of Indonesia
Departemen Komunikasi dan Informatika
*******************************************
Linking interm/Hello.interm
interm/~Hello.c: In function ‘Hello$main$op’:
interm/~Hello.c:10: error: two or more data types in declaration specifiers
interm/~Hello.c:10: error: expected identifier or ‘(’ before ‘=’ token
gcc: interm/~Hello.o: No such file or directory
Runnable-code written to 'run/Hello.run'

yohanes@mycomputer:~/nusa2/home/nusa/binary$ ls -l run/Hello.run
ls: cannot access run/Hello.run: No such file or directory

Penjelasannya sangat sederhana: int adalah keyword dalam C tapi tidak dalam nusa. Ketika melink, program diterjemahkan ke C, hasilnya di C adalah “int int” yang tidak valid (Anda bisa membaca lebih lengkapnya, termasuk saran saya untuk memperbaikinya di kritik nusa yang saya tulis 2 tahun yang lalu).

Saya masih sedikit berpikir positif: mungkin aspek paradigma fungsional Nusa masih bisa dipakai untuk mengajarkan beberapa algoritma. Tapi ternyata masih ada kesalahan lain lagi. Kesalahan dalam penanganan symbol table sudah diperbaiki, tapi belum sepenuhnya. Contoh di kritik saya sudah diperbaiki, tapi contoh ini tetap salah:

program z;

integer bar(integer y);

integer foo(integer x) {
   if (x < = 0) return x;
   return bar(x);
}

integer bar(integer y) {
   return foo(y - 1);
}

void main()
{
        writeline(foo(10));
}

Berikut ini hasil output compiler/linker:

yohanes@mycomputer:~/nusa2/home/nusa/binary$ ./Compile z.nusa 
set NUSA environment variable
*******************************************
Nusaptel Compiler 2.0 , 2009
Copyright (C) Republic of Indonesia
Departemen Komunikasi dan Informatika
*******************************************
Compiled Module 'z.nusa'
Output written to interm/z.interm

yohanes@mycomputer:~/nusa2/home/nusa/binary$ ./Link z
set NUSA environment variable
*******************************************
Nusaptel Linker 2.0 , 2009
Copyright (C) Republic of Indonesia
Departemen Komunikasi dan Informatika
*******************************************
Linking interm/z.interm
interm/~z.c:14: error: conflicting types for ‘z$foo$int32$op’
interm/~z.c:11: error: previous implicit declaration of ‘z$foo$int32$op’ was here
gcc: interm/~z.o: No such file or directory
Runnable-code written to 'run/z.run'

Perhatikan bahwa meskipun tertulis Runnable-code written to ‘run/z.run’ namun file z.run tidak terbentuk.

Ini merupakan program yang sangat sederhana untuk menguji yang namanya “Indirect Recursion”. Jika bahasa tidak mendukung hal tersebut, Anda tidak bisa mengimplementasikan recursive descent parser.

GUI Nusa, Klik untuk melihat gambar lebih besar

Tambahan lain dalam rilis nusa saat ini adalah editor grafik. Saya tidak akan bilang bahwa editor grafik ini layak disebut sebagai IDE.

  1. Syntax highligthing sangat primitif, misalnya keyword dalam comment tetap dihighlight.
  2. hanya bisa mengcompile link, dan run (itu harus dilakukan terpisah, mengklik beberapa tombol). Jadi setiap kali memodifikasi program Anda harus mengklik “Compile”, lalu mengklik “Link”, lalu mengklik “Run”.
  3. tidak bisa mendebug atau melakukan fungsi-fungsi lain dalam sebuah IDE (project management, version management, dsb).
  4. jika compiler menunjukkan ada kesalahan di baris tertentu, editor ini tidak bisa langsung pergi ke baris tersebut.
  5. fungsi help tidak bekerja, bahkan fungsi about tidak bekerja

Menambahkan sebuah plugin ke Gedit/Vim/Emacs untuk melakukan hal yang sama (dan bahkan lebih dari yang dilakukan editor ini) hanya akan butuh waktu sehari dua hari saja.

Kalau membaca dokumen lelang tahun lalu, sepertinya proyek ini masih tidak memenuhi spec lelang. Spec produk hasil lelang adalah:

  1. Desain GUI (Graphical User Interface)
  2. Compiler-Linker dengan GUI dan Help.
  3. Spesifikasi konversi nilai numerik ke nilai string
  4. Spesifikasi konversi nilai string ke nilai numerik
  5. Spesifikasi pemrograman File Input.
  6. Spesifikasi pemrograman File Output.

Dari daftar itu, nomor 1 dan 2 boleh dibilang setengah jadi, karena help-nya tidak ada. Lalu untuk yang lain, saya tidak tahu mana hasil spesifikasi “konversi string/numerik” dan spesifikasi “file i/o”. Error message pun masih berbahasa inggris.

Mana source code hasil lelang ini? sayapun tidak tahu di mana. Mungkin ada yang mau datang ke Depkominfo untuk menanyakannya, karena depkominfo hanya mau menjawab orang yang datang langsung. Di dokumen lelang tercantum:

Lampiran Berita Acara Aanwijzing
No. 02/NUSAPTEL.O2/SIPLK.3/04/2009
Pekerjaan Pengadaan Puslaka Pemrograman Bahasa NUSAPTEL

  • Jangka waktu penyelesaian pekerjaan salama 45 hari kerja
  • Tenaga ahli: ditawarkan oleh peserta rekanan
  • Alternatif: peserta rekanan diperbolehkan memberikan penawaran alternatif selama tidak mengurangi spesifikasi yang tertera di TOR
  • Bahasa yang digunakan dalam error message: bahasa Indonesia
  • Source code: menurut RPP (Rancangan Peraturan Pemerintah tentang Sistem Elektronik) (source code terbuka)
  • Pustaka Bahasa Pemrograman NUSAPTEL untuk diaplikasikan di Linux
  • Penentuan TKDN sesuai dengan ketentuan perundangan yang berlaku