Apa itu Ada?

Lahirnya Ada di lingkungan Departemen Pertahanan Amerika Serikat serta karakter bahasanya yang menempatkan kebenaran program sebagai tujuan.

Daftar isi

Ada menempatkan kebenaran program sebagai tujuan desainnya, dan kompilator menjadi penegak utamanya. Topik ini membahas asal-usul Ada di lingkungan Departemen Pertahanan Amerika Serikat, karakter bahasanya, serta program pertama yang dikompilasi dan dijalankan dengan GNAT. Toolchain, yaitu rangkaian alat yang menyiapkan program sampai siap dijalankan, juga diperkenalkan sepanjang topik. Setelah topik ini selesai, program Halo pertama sudah berjalan dan peran setiap tahap pada proses build menjadi jelas.

Sejarah singkat dari Departemen Pertahanan#

Pada dekade 1970-an, Departemen Pertahanan Amerika Serikat menghadapi ledakan jumlah bahasa pemrograman yang digunakan proyek-proyeknya. Proyek yang berbeda menggunakan dialek, subset, atau superset bahasa yang tidak standar, sehingga biaya pelatihan dan pemeliharaan perangkat lunak menumpuk. Untuk menertibkan keadaan itu, departemen tersebut menerbitkan permintaan proposal (request for proposals) bagi sebuah bahasa pemrograman modern yang digunakan bersama.

Proposal pemenang disusun oleh tim yang dipimpin Jean Ichbiah dari CII Honeywell-Bull. Bahasa hasil rancangan tim itu kemudian dinamai Ada. Standar pertama diterbitkan pada tahun 1983, kemudian direvisi pada 1995, 2005, dan 2012 dengan tambahan fitur di setiap revisi. Revisi terbaru, Ada 2022, berstatus standar ISO/IEC 8652:2023.

Ranah penggunaan Ada turut membentuk karakternya. Ada hari ini banyak digunakan pada sistem embedded waktu nyata, yaitu sistem yang tertanam pada perangkat keras. Banyak di antaranya adalah sistem keselamatan kritis, misalnya pada kedirgantaraan, pertahanan, penerbangan sipil, serta kereta api. Pada ranah tersebut, cacat perangkat lunak bukan sekadar gangguan kecil, melainkan berpotensi menimbulkan konsekuensi serius. Tuntutan inilah yang membuat pemeriksaan dini menjadi ciri bahasanya.

Karakter bahasa: kebenaran program sebagai tujuan#

Filosofi Ada menempatkan keterbacaan di atas keringkasan. Kata kunci lebih diutamakan daripada simbol, dan tidak ada kata kunci yang berbentuk singkatan. Penyimpulan tipe (type inference) hampir tidak ada, sehingga hampir semua tipe perlu diberi nama secara eksplisit. Semantik bahasa didefinisikan dengan rapi, sedangkan undefined behavior, yaitu perilaku program yang tidak diatur oleh standar bahasa, dibatasi seminimal mungkin.

Karakteristik berikutnya adalah sistem tipe yang kuat. Tipe baru mudah didefinisikan, dan setiap tipe mencegah penggunaan data yang tidak sesuai dengan maksudnya. Karena banyak informasi program dinyatakan secara eksplisit kepada kompilator, kompilator dapat melakukan pemeriksaan ketat, yaitu menangkap sebagian besar kekeliruan pada waktu kompilasi dan memeriksa sisanya saat program berjalan. Kebenaran program dengan demikian dijaga sejak penulisan, dan bukan hanya dinilai pada pengujian di akhir.

Di samping bahasa inti, Ada memiliki subset bernama SPARK yang dapat dianalisis secara formal, yaitu kebenaran program dibuktikan dengan alat bantu matematis. Subset ini menuntut gaya penulisan yang lebih disiplin lagi dan berguna pada perangkat lunak yang keamanannya tidak dapat dikompromikan. SPARK dibahas tersendiri pada jalur ini.

Program pertama: Halo#

Program Ada tersusun atas unit-unit kompilasi, dan program terkecil cukup ditulis sebagai satu prosedur. Klausa with di awal berkas mengambil package yang dibutuhkan, kemudian deklarasi prosedur utama ditulis di bawahnya. Nama berkas sumber harus cocok dengan nama unitnya, sehingga prosedur bernama Halo disimpan dalam berkas halo.adb. Program berikut mencetak satu baris teks ke terminal.

ada halo.adb
with Ada.Text_IO;

procedure Halo is
begin
   Ada.Text_IO.Put_Line ("Halo dari Ada!");
end Halo;
text Keluaran
Halo dari Ada!

Struktur programnya dapat dibaca per bagian. Bagian antara is dan begin adalah area deklarasi, dan pada program sekecil ini area tersebut kosong. Pernyataan yang dijalankan berada di antara begin dan end, yaitu pemanggilan Ada.Text_IO.Put_Line yang mencetak satu baris teks beserta pergantian barisnya. Kata Halo setelah end mengulang nama prosedurnya sebagai tanda penutup.

Kompilasi dilakukan dengan satu perintah, yaitu gnatmake. Perintah ini mengurutkan seluruh tahap build secara otomatis, dari berkas sumber hingga program yang siap dijalankan. Urutan tahapnya digambarkan pada diagram berikut.

gnatmake halo.adbgcc -ckompilasi sumbergnatbindpengikatan unitgnatlinkpengaitan programmenghasilkan program halo yang siap dijalankan
Tiga tahap yang diurutkan gnatmake untuk membangun halo.adb

Bangun dan jalankan programnya dengan perintah berikut pada direktori yang berisi halo.adb.

bash
# mengompilasi dan menjalankan program halo
gnatmake halo.adb && ./halo
text Keluaran
gcc -c halo.adb
gnatbind -x halo.ali
gnatlink halo.ali
Halo dari Ada!

Empat baris keluaran tersebut memuat seluruh prosesnya. Tiga baris pertama menunjukkan tahap yang dijalankan gnatmake, yaitu kompilasi oleh gcc -c, pengikatan oleh gnatbind, dan pengaitan oleh gnatlink. Baris terakhir berasal dari program halo yang dijalankan setelah build selesai. Ketiga tahap tersebut meninggalkan jejak berkas di direktori kerja, yaitu halo.o sebagai hasil kompilasi, halo.ali sebagai informasi unit yang dibaca gnatbind, dan halo sebagai program akhir.

Kesalahan umum#

Kekeliruan berikut paling sering muncul saat topik ini dipraktikkan, dan masing-masing disertai penyebab serta perbaikannya.

Nama berkas tidak cocok dengan nama prosedur. Kompilator memeriksa kecocokan nama berkas sumber dengan nama unit, dan ketidakcocokan hanya memunculkan warning, yaitu peringatan yang tidak menghentikan build. Berkas salam.adb berikut berisi prosedur Halo, sehingga nama keduanya bertentangan.

ada salam.adb
procedure Halo is
begin
   null;
end Halo;
bash
# mengompilasi berkas dengan nama yang tidak cocok
gnatmake salam.adb
text Keluaran
gcc -c salam.adb
salam.adb:1:11: warning: file name does not match unit name, should be "halo.adb" [enabled by default]
gnatbind -x salam.ali
gnatlink salam.ali

Program lama yang masih dijalankan. Mengedit halo.adb lalu menjalankan ./halo tanpa build ulang membuat terminal mengeksekusi versi lama. Perbaikannya, jalankan gnatmake lagi sebelum menjalankan program. Apabila tidak ada berkas yang berubah, gnatmake hanya melaporkan bahwa program sudah up to date, sebagaimana berikut.

bash
# menjalankan gnatmake ulang tanpa perubahan sumber
gnatmake halo.adb
text Keluaran
gnatmake: "halo" up to date.

Ringkasan#

  • Ada lahir dari permintaan Departemen Pertahanan Amerika Serikat akan satu bahasa modern pada 1970-an, dengan proposal pemenang dari tim Jean Ichbiah, standar pertama pada 1983, dan revisi terbaru Ada 2022 yang berstatus ISO/IEC 8652:2023.
  • Filosofi Ada menekankan keterbacaan, sistem tipe yang kuat, dan semantik yang terdefinisi rapi, sehingga sebagian besar kekeliruan tertangkap oleh kompilator sejak waktu kompilasi.
  • gnatmake membangun halo.adb melalui tiga tahap, yaitu kompilasi gcc -c, pengikatan gnatbind, dan pengaitan gnatlink, lalu menghasilkan program halo.
  • Nama berkas sumber harus cocok dengan nama unit kompilasi, dan ketidakcocokan hanya memunculkan warning yang mudah terlewat.

Referensi#