Mengapa Anda harus menggunakan bahasa Ada untuk memprogram sistem Anda



Bahasa pemrograman Ada lahir pada pertengahan 1970-an ketika Departemen Pertahanan AS dan Departemen Pertahanan Inggris memutuskan untuk mengganti ratusan bahasa pemrograman khusus untuk sistem komputasi tertanam, yang semakin banyak digunakan dalam proyek-proyek militer. Bahasa Ada dikembangkan sedemikian rupa sehingga merupakan satu-satunya bahasa yang mampu bekerja pada semua sistem tertanam ini, dan pada saat yang sama memastikan keandalan dan kinerja pada tingkat yang tidak lebih buruk daripada yang khusus.

Setelah pembaruan dari 1995, bahasa diadaptasi untuk sistem tujuan umum, menambahkan pemrograman berorientasi objek, tanpa kehilangan nilai-nilai utama - keandalan, kemudahan dukungan dan efisiensi. Saat ini, perangkat lunak yang ditulis dalam Ada membentuk tidak hanya peralatan militer, tetapi juga proyek komersial di bidang avionik dan sistem kontrol lalu lintas udara. Kode Ada mengontrol rudal seperti Arian 4 dan 5, banyak satelit, dan banyak sistem lain di mana gangguan kecil dapat memiliki konsekuensi serius.

Mungkin Ada cocok untuk digunakan dalam proyek tertanam Anda berikutnya.

Perencanaan Kualitas Militer


Untuk memilih bahasa pemrograman baru, Kementerian Pertahanan menyusun “ Kelompok Kerja Bahasa Tingkat Tinggi (HOLWG)], yang terdiri dari pakar militer dan ilmiah yang tugasnya menyusun daftar pertanyaan dan memilih bahasa kandidat. Akibatnya, apa yang disebut " Permintaan Stillman ":

Poin utama dari permintaan adalah:

  • Alur kerja tujuan umum yang fleksibel yang beradaptasi dengan kebutuhan aplikasi komputasi tertanam.
  • Keandalan Bahasa harus memfasilitasi desain dan pengembangan program yang andal.
  • Kemudahan dukungan. Kode harus dapat dibaca, dan solusi perangkat lunak jelas.
  • Kemudahan menghasilkan kode yang efisien. Seharusnya dimungkinkan untuk dengan mudah mengidentifikasi desain yang tidak efisien.
  • Tidak ada kerumitan yang tidak perlu. Struktur semantik harus konsisten dan meminimalkan jumlah konsep.
  • Bebas dari mobil. Bahasa tidak boleh dikaitkan dengan detail OS atau perangkat keras.
  • Definisi penuh. Semua bagian bahasa harus didefinisikan secara penuh dan eksplisit.

Laporan menyimpulkan dengan pendapat bahwa garis pertahanan pertama terhadap masalah perangkat lunak adalah untuk mencegah programmer membuat kesalahan. Dengan menghilangkan kemungkinan membuat kesalahan kecil, misalnya, melalui konversi tipe implisit atau konstruksi berbahaya lainnya, kami secara otomatis membuat kode lebih aman dan membuatnya lebih mudah untuk dipelihara.

Kelompok ini menyimpulkan bahwa walaupun di antara bahasa-bahasa yang ada pada waktu itu, tidak ada yang cocok untuk kebutuhan Kementerian Pertahanan, cukup realistis untuk membuat bahasa baru yang sesuai dengan semua masalah ini. Empat desainer menyelesaikannya. Proses seleksi menengah memilih dua metode kerja yang paling cocok, dan sebagai hasilnya, hanya satu bahasa yang memenangkan kompetisi dan menerima nama " Ada ".



Perlindungan bawaan bawaan


Sistem tipe di Neraka tidak hanya ketat - kadang-kadang disebut super-ketat karena tidak memungkinkan konversi tipe implisit. Ambil, misalnya, cuplikan kode C ini:

typedef uint32_t myInt; myInt foo = 42; uint32_t bar = foo; 

Ini adalah kode yang valid; itu akan menyusun, memulai dan menghasilkan hasil yang jelas menunjukkan jawaban atas pertanyaan utama kehidupan, alam semesta dan semua itu. Di Neraka, ini tidak akan berhasil:

 type MyInt is Integer; foo: MyInt; bar: Integer; foo := 42; bar := foo; 

Compiler akan melempar kesalahan, karena Integer dan MyInt bukan hal yang sama. Keuntungan utama dari pendekatan ini adalah jika programmer kemudian mengubah definisi tipe, ribuan konversi tipe implisit di seluruh basis kode tidak akan meledakkan program. Sebagai gantinya, tipe harus dilemparkan secara eksplisit - ini mempromosikan kode yang baik, mencegah kebingungan tipe yang "cukup mirip."

Setiap programmer yang terjebak dalam rawa-rawa dari campuran definisi standar tipe C, Linux dan Win32 dapat menghargai kurangnya kebutuhan untuk menggeledah halaman dokumentasi yang tak terhitung jumlahnya dan kode yang diformat dengan buruk untuk memahami mana typedef atau makro berisi definisi nyata dari sesuatu yang hanya yang mencegah kompilasi atau merangkak keluar saat debugging.



Ada menambahkan lapisan perlindungan tambahan dalam pemeriksaan pada tahap kompilasi dan peluncuran. Di Ada, programmer harus secara eksplisit menentukan pernyataan penutupan untuk blok dan batas-batas di mana nilai variabel harus cocok. Ada tidak mendefinisikan tipe standar seperti int atau float, tetapi mengharuskan programmer untuk membuat tipe dengan rentang tertentu dari awal. Ini juga berlaku untuk string - dengan pengecualian string tidak terbatas, semua string memiliki panjang yang tetap.

Pada tahap operasi, Anda dapat memeriksa kesalahan seperti akses yang salah ke memori, buffer overflows, melebihi batas yang ditetapkan, kesalahan ± 1, akses ke array. Mereka kemudian dapat diproses dengan aman, alih-alih menjatuhkan seluruh aplikasi.

Ada mengimplementasikan model tipe referensi alih-alih pointer level rendah. Setiap tipe referensi diproses oleh kumpulan memori, baik secara default, atau oleh programmer tertentu, jika perlu, untuk bekerja dengan implementasi memori NUMA yang lebih eksotis. Seorang programmer tidak pernah harus mengakses memori secara langsung, ia harus menggunakan memory pool handler.

Akhirnya, kompiler atau program saat runtime memutuskan bagaimana cara mengirimkan data ke atau dari fungsi. Dan meskipun perlu untuk menunjukkan arah transmisi dari masing-masing parameter ('dalam', 'keluar', atau 'dalam ke luar'), keputusan akhir tentang apakah data ditransmisikan melalui register, tumpukan atau dengan referensi dibuat oleh kompiler atau program pada saat run time, tetapi bukan seorang programmer. Ini mencegah masalah stack overflow.

Profil Ravenscar dan dialek SPARK adalah himpunan bagian dari Ada, dengan yang terakhir berfokus pada kontrak. Seiring waktu, fitur dari himpunan bagian ini telah ditransfer ke spesifikasi bahasa utama.

Ada pemrograman hari ini


ANSI menetapkan spesifikasi Ada 83 pada tahun 1983. Kemudian Intel 80286 baru saja dirilis, dan Motorola 68000 baru berusia empat tahun. Itu adalah fajar komputer rumah, serta transisi yang canggung dari tahun 1970-an ke tahun 80-an, ketika popularitas mikrokontroler mulai tumbuh. Bayangkan mikrokontroler Intel 8051 dan EPROM 4kb yang menakjubkan dan RAM 128B.



Mikrokontroler yang populer saat ini berkali-kali lebih kuat daripada yang ada pada tahun 1983. Anda dapat menggunakan ARM, AVR, RISC-V, dll. (atau Lego Mindstorms NXT kit) dan mulai mengembangkannya menggunakan alat berbasis C. Hal yang sama tidak mengherankan bahwa kompiler GNAT Ada yang populer didasarkan pada GCC. Juga sedang dikembangkan dalam proyek DragonEgg adalah alat yang didasarkan pada LLVM.

Ada dua versi Ada Tools berbasis GCC. Opsi AdaCore didukung secara komersial, tetapi memiliki karakteristiknya sendiri. Opsi Free Software Foundation secara alami gratis, dan fungsinya sebanding dengan AdaCore.

Untuk permulaan yang mudah, gunakan baik GNAT Programming Studio IDE (GPS), yang dibundel dengan AdaCore ( salinan di Github ), atau tulis kode dalam editor teks dan kompilasi secara manual, atau gunakan Makefiles. Toolkit di sini sedikit lebih rumit daripada C atau C ++, namun pengembangannya difasilitasi oleh utilitas gnatmake, yang mencakup semua alat, dan bekerja kira-kira seperti GCC.



Contoh proyek kecil namun tidak sepele di Ada ditulis oleh hamba Anda yang sederhana sebagai pengurai argumen baris perintah. Di sana Anda akan menemukan Makefile yang terletak di folder ada / project, di mana folder ditentukan di mana Anda dapat menemukan file spesifikasi paket (.ads) dan paket itu sendiri (.adb).

File-file ini kira-kira sesuai dengan file dengan header dan kode dari C dan C ++, namun, mereka juga memiliki perbedaan penting. Tidak seperti C, Ada tidak memiliki preprosesor, dan ia tidak menggabungkan kode dan header untuk membuat file yang dikompilasi. Sebagai gantinya, ada tautan ke nama paket yang ditentukan dalam spesifikasi. Nama file .ads juga tidak harus cocok dengan nama paket. Ini memberikan fleksibilitas besar dan mencegah masalah umum dalam C dengan ketergantungan siklik atau kebutuhan untuk menghubungkan header dalam urutan tertentu.

Ke mana harus pergi selanjutnya


Setelah mengunduh GNAT toolkit, memulai GPS atau Vim / Emacs, dan untuk sesaat melihat kursor yang berkedip di halaman kosong, Anda bisa memikirkan harus mulai dari mana. Untungnya, kami baru - baru ini membahas proyek berbasis Ada menggunakan inti PicoRV32 RISC-V. Ia menggunakan ICE40LP8K CPLD yang populer, yang didukung oleh FPGA open source seperti Yosys.



Dalam hal dokumentasi, ada artikel pengantar untuk pemula yang ditujukan untuk pengembang Java dan C ++, referensi AdaCore , referensi WikiBooks , dan, tentu saja, dokumentasi Programming in Ada 2012 . Ini mungkin adalah referensi paling komprehensif, dengan pengecualian 945 halaman Ada 2012 Language Reference Manual (LRM).

Bahasa Ada, meskipun agak jarang bagi pecinta pemrograman, adalah bahasa yang sepenuhnya terbuka dengan alat pengembangan yang dapat diandalkan dengan dukungan komersial, dan digunakan untuk membuat perangkat lunak untuk segala sesuatu mulai dari rudal balistik antarbenua dan F-15 hingga firmware perangkat medis. Meskipun ini adalah bahasa yang agak rumit, jika Anda melampaui batas dasar, bahasa itu harus dimasukkan dalam daftar bahasa yang pernah Anda gunakan dalam proyek Anda - bahkan untuk membuat resume Anda terlihat lebih keren.

Source: https://habr.com/ru/post/id469671/


All Articles