- Lahir di tengah kekacauan perangkat lunak Departemen Pertahanan AS pada 1970-an, Ada adalah bahasa yang berpusat pada pengetikan statis yang kuat dan pemisahan spesifikasi-implementasi
- Melalui struktur package dan penyembunyian representasi`, Ada mewujudkan enkapsulasi penuh dan kemudian memengaruhi sistem modul bahasa modern seperti Java, C#, dan Go
- Tipe dengan kendala semantik, generic, konkurensi (task), dan design by contract adalah konsep yang diajukan Ada puluhan tahun lebih awal, lalu diwarisi oleh Haskell, Rust, Swift, dan lainnya
- SPARK Ada menghapus bahkan race condition data dan kesalahan logika melalui verifikasi formal, dan digunakan di bidang berkeandalan tinggi seperti penerbangan, perkeretaapian, dan sistem pertahanan
- Ada bukan bahasa yang populer di arus utama, tetapi menjadi fondasi yang mengajukan prinsip-prinsip dasar desain bahasa pemrograman modern sebagai “bahasa yang diam-diam bekerja dengan benar”
Latar kelahiran Ada dan filosofi desainnya
- Pada awal 1970-an, Departemen Pertahanan AS (DoD) menyelidiki situasi di mana lebih dari 450 bahasa dan dialek bercampur dalam sistem persenjataan, logistik, dan komunikasi
- Tiap sistem memiliki masalah seperti tidak bisa saling beroperasi, tidak dapat dipelihara, dan penulis asli yang sudah tidak ada
- Akibatnya timbul krisis pengadaan perangkat lunak
- DoD tidak mengadopsi bahasa yang sudah ada seperti COBOL, Fortran, atau PL/1, melainkan menjalani proses perumusan kebutuhan selama lima tahun
- Dokumennya berkembang dari Strawman → Woodenman → Tinman → Ironman → Steelman
- Steelman (1978) menuntut pemisahan antarmuka yang eksplisit, pengetikan statis yang kuat, konkurensi bawaan, penanganan eksepsi yang konsisten, kemandirian dari mesin, keterbacaan, dan kemudahan verifikasi
- Dalam kompetisi antara empat tim pada 1979 (Green, Red, Blue, Yellow), tim Green yang dipimpin Jean Ichbiah terpilih, dan bahasanya diberi nama Ada
- Nama itu diberikan untuk menghormati Ada Lovelace dan melambangkan tujuan bahasa tersebut
Struktur package dan enkapsulasi
- Struktur inti Ada adalah package, dengan specification dan body yang dipisahkan secara fisik
- Specification adalah kontrak yang dipublikasikan ke luar, sedangkan body adalah implementasi, dan kompiler memaksa hubungan keduanya
- Kode klien tidak dapat mengakses elemen yang tidak ada dalam specification
- Struktur ini adalah cikal bakal sistem modul, yang kemudian ditiru sebagian oleh bahasa-bahasa lain
- Java, Python, JavaScript, C, Go, dan Rust semuanya belum mewujudkan pemisahan struktural yang sepenuhnya lengkap seperti Ada
- Tipe private hanya mengekspos nama, sementara representasi internalnya sepenuhnya opak
- Klien tidak dapat mengetahui struktur internal tipe tersebut dan hanya bisa memakai operasi yang diizinkan
- Ini adalah penyembunyian representasi (representational invisibility) yang lebih kuat daripada kontrol akses
private di Java
- Java dan C# berkembang secara bertahap selama puluhan tahun menuju tingkat enkapsulasi ala Ada
Sistem tipe dan kendala semantik
- Ada mendefinisikan perbedaan antara type dan subtype dalam makna matematis
- Contoh:
type Age is range 0 .. 150 membuat tipe terpisah dengan kendala rentang
- Pengiriman antar tipe yang salah dideteksi sebagai kesalahan waktu kompilasi
- Pada 1983, sistem tipe Ada jauh lebih ekspresif dibanding C, Fortran, dan Pascal
- Tipe dengan kendala semantik mencegah kesalahan domain
- Discriminated record adalah struktur yang memiliki field berbeda bergantung pada nilainya
- Ini setara dengan sum type atau algebraic data type (ADT) dalam bahasa modern
- Haskell, Rust, Swift, Kotlin, dan TypeScript memperkenalkan konsep yang sama beberapa dekade kemudian
Generic dan polimorfisme
- Generic di Ada adalah unit yang dapat menerima type, value, subprogram, dan package sebagai parameter
- Ini mewujudkan polimorfisme statis (parametric polymorphism) yang memeriksa tipe saat kompilasi
- C++ (1990), Java (2004), C# (2005), dan Go (2022) memperkenalkan kemampuan serupa beberapa dekade setelah Ada
- Java dengan type erasure kehilangan informasi tipe saat runtime
- Ada mendukung pelestarian tipe saat runtime hingga parameterisasi package
- Generic Ada menawarkan daya ekspresi setingkat higher-kinded polymorphism
- Mirip dengan type class di Haskell, trait di Rust, dan concepts di C++20
Model konkurensi dan keamanan
- Sejak 1983, Ada sudah memiliki konkurensi tingkat bahasa (task) bawaan
- Melalui deklarasi
task dan model komunikasi rendezvous, Ada mewujudkan pengiriman pesan tanpa state bersama
- Channel di Go berasal dari keluarga konsep CSP (Communicating Sequential Processes) yang sama
- Ada 95 memperkenalkan protected object
- Ini melindungi akses data dan membedakannya menjadi
procedure, function, dan entry
- Menyediakan kondisi barrier otomatis dan sinkronisasi tanpa lock
- SPARK Ada memakai verifikasi formal untuk membuktikan secara matematis tidak adanya race condition data, eksepsi, kesalahan rentang, maupun pelanggaran prakondisi dan pascakondisi
- Sementara borrow checker di Rust hanya menjamin keamanan memori, SPARK juga membuktikan konsistensi logis
Design by contract dan keamanan null
- Ada 2012 mengintegrasikan contract ke dalam bahasa
- Dapat menyatakan precondition, postcondition, dan type invariant
- Toolchain SPARK memanfaatkannya untuk pembuktian statis
- Konsep Design by Contract dari Eiffel (1986) diformalkan pada tingkat bahasa
- C++, Java, Python, dan Rust masih terbatas pada implementasi parsial atau tingkat library
- Ada 2005 memperkenalkan tipe
not null untuk mendukung pengecualian null pada waktu kompilasi
- Secara default, kegagalan aman dijamin lewat eksepsi runtime (
Constraint_Error)
- Pendekatannya mirip nullable reference di C# 8.0
Struktur penanganan eksepsi
- Ada 83 adalah yang pertama memperkenalkan structured exception handling
- Eksepsi dideklarasikan sebelum digunakan, ditangani per cakupan, dan memiliki aturan propagasi yang jelas
- Checked exception di Java adalah bentuk yang lebih berkembang dibanding Ada, karena pemanggil harus menyatakan eksepsi secara eksplisit
- Ada mengizinkan propagasi eksepsi dengan lebih bebas
- Rust menghapus eksepsi dan mengadopsi penanganan kesalahan berbasis tipe
Result
- Kontribusi Ada adalah membuat propagasi eksepsi terstruktur dan dapat diprediksi
Annex dan struktur standardisasi
- Standar Ada memiliki struktur ekstensi opsional bernama Annex
- Annex C hingga H mendefinisikan fitur untuk sistem, real-time, terdistribusi, numerik, dan bidang berkeandalan tinggi
- Kompiler harus menerima sertifikasi independen untuk tiap Annex
- Kesesuaian standar diverifikasi melalui tes ACATS milik ACAA
- Struktur standar Ada dapat dimanfaatkan langsung untuk sertifikasi perangkat lunak penerbangan DO-178C
- C/C++ juga bisa memperoleh sertifikasi yang sama, tetapi Ada secara struktural lebih cocok
Pengaruh Ada dan ketimpangan persepsi
- Ada kurang diperhatikan di budaya Silicon Valley karena merupakan bahasa yang dipimpin pemerintah
- Ini berlawanan dengan budaya yang menyukai sintaks ringkas berbasis C
- Kisah sukses Ada di penerbangan, perkeretaapian, dan sistem pertahanan kurang terlihat justru karena tidak gagal
- Sistem yang sangat andal tidak menghasilkan banyak perdebatan atau insiden
- Arah perkembangan bahasa modern sedang berkumpul pada prinsip-prinsip yang telah diajukan Ada
- Seperti pemisahan spesifikasi-implementasi, verifikasi tipe statis, konkurensi tingkat bahasa, dan keamanan berbasis kontrak
- Ada masih dioperasikan dalam sistem berkeandalan tinggi seperti pesawat, kereta api, dan wahana antariksa,
dan tetap menjadi “bahasa yang diam-diam bekerja dengan benar”
1 komentar
Komentar Hacker News
Saya suka Ada. Tapi saat membahas penanganan tipe, cukup mengejutkan karena keluarga bahasa ML (ML, SML, CML, Caml, OCaml, dll.) sama sekali tidak disebut
Bahasa-bahasa ini mendukung tipe struktural di tingkat kompiler. Masalah Ada adalah bahasanya sendiri terlalu besar dan sintaksnya rumit, seperti PL/I, PHP, dan Perl. Tulisan itu menganggapnya sebagai kelebihan, tetapi menurut saya ekstensi standar yang dipisahkan sebagai Annex justru lebih baik. Jika bahasa intinya dibuat kecil dan berpusat pada Annex, mungkin akan dipakai lebih luas
Salah satu alasan Ada diabaikan adalah karena harga kompiler mencapai puluhan ribu dolar. Di masa ketika belum ada kompiler gratis atau open source, bahasa lain bisa dipakai tanpa biaya. Itu faktor yang sangat menentukan
Saat membaca tulisannya, saya merasa baik Ada maupun artikelnya sama-sama menarik, tetapi beberapa kesalahan faktual cukup mencolok. Misalnya dikatakan bahwa hanya Ada yang sepenuhnya memisahkan implementasi dan spesifikasi, padahal JavaScript juga bisa mendefinisikan elemen private di modul ES6. Penjelasan tentang visibilitas
privatedi Java juga keliru. Kesalahan seperti ini menurunkan kredibilitas tulisan ituprivate, pihak luar tidak bisa mengakses field internalnya. Sebaliknya, di JavaScript siapa pun bebas menambah atau menghapus properti pada objek. Jadi tingkat perlindungan saat compile time di Ada tidak bisa dibandingkan dengan JSsetAccessible(true), bahkan isi internal String pun bisa diubahSecara keseluruhan artikelnya bagus, tetapi kalimat yang terus diulang seperti “bahasa X mendapatkan fitur ini lebih belakangan daripada Ada” terasa membosankan. Akan jauh lebih meyakinkan kalau ada contoh kode
Akun Twitter ini dibuat pada April 2026, dan penulisnya tidak dicantumkan. Dalam waktu singkat produktivitasnya luar biasa tinggi, jadi menarik juga bahwa identitasnya tidak ditampilkan
Klaim “semua bahasa menambahkan sum type dalam 20 tahun terakhir, tetapi Ada sudah memilikinya sejak awal” memang benar, tetapi asal-usulnya bukan dari Ada. Bahasa Hope atau NPL sudah lebih dulu
UNION, yang kemudian berkembang di ALGOL 68, Hope, Miranda, dan lainnya.uniondi C berbeda dari konsep iniSaya sangat menyukai tulisannya sampai berharap itu bukan ditulis AI, tetapi kecepatan posting di Twitter terlalu tinggi sehingga terasa mencurigakan
Angkatan Udara AS awalnya ingin memakai Ada, tetapi karena pengembangannya terlambat mereka akhirnya memakai JOVIAL. Saya mengerjakan proyek pertama saya dengan JOVIAL pada 1981, dan saat itu Ada masih pada tahap spesifikasi
Di halaman utama situs ada kalimat “ini bukan posisi, ini usulan”, dan ada yang menjadikannya dasar untuk mengklaim bahwa situs itu ditulis AI
Dalam tulisan itu disebut bahwa “sistem modul JavaScript tidak bisa menyembunyikan representasi internal tipe seperti Ada”, padahal di modul JS, jika tidak di-export, hal itu bisa disembunyikan dengan cukup baik. Jadi saya ragu apakah Ada benar-benar punya keunggulan khusus di sini