Lanskap compiler

Peta pilihan kompilator Ada: GNAT di dalam GCC dari distribusi dan rilis tahunan dari AdaCore melalui Alire.

Daftar isi

Satu mesin dapat memuat lebih dari satu kompilator Ada, dan kompilator tersebut boleh berasal dari sumber yang berbeda. Topik ini memetakan dua sumber utama GNAT pada Linux, yaitu GNAT yang disertakan distribusi sebagai bagian dari GCC dan toolchain rilis dari AdaCore yang dipasang melalui Alire. Setelah topik ini selesai, setiap nomor versi kompilator yang muncul di terminal dapat ditelusuri sumbernya.

GNAT dari distribusi#

Distribusi GNU/Linux menyertakan GCC sebagai rangkaian kompilator dasarnya, dan proyek GCC merilis GNAT sebagai bagian dari koleksi tersebut. Distribusi memaketkannya sebagai paket gnat, sehingga pemasangannya selesai dalam satu perintah pengelola paket. Versi gnat dan gcc pada distribusi yang sama memiliki nomor versi yang sejajar karena keduanya dirilis bersama dalam satu siklus versi. Perintah berikut menampilkan versi gcc pada lingkungan penulisan jalur ini.

bash
# menampilkan versi gcc yang disertakan distribusi
/usr/bin/gcc --version | head -1
text Keluaran
gcc (Debian 14.2.0-19) 14.2.0

Keluaran gcc memuat identitas paket distribusinya, yaitu Debian 14.2.0-19, diikuti nomor versi 14.2.0. Paket gnat pada distribusi yang sama membawa GNAT dengan nomor versi yang sejajar. Pemasangan semacam ini praktis karena GNAT ikut menjadi bagian dari paket distribusi, tetapi versinya mengikuti siklus rilis distribusi yang bersangkutan. Paket gnat juga tidak selalu terpasang secara bawaan, dan lingkungan penulisan jalur ini termasuk yang memuat gcc tanpa paket gnat.

Toolchain Alire dari AdaCore#

Sumber kedua adalah toolchain yang diindeks Alire dan disiapkan AdaCore untuk komunitas. Alire mengindeks rilis biner GNAT dan gprbuild, dan kompilator native untuk platform tempat program dijalankan bernama gnat_native. Perintah alr toolchain tanpa argumen menampilkan toolchain yang terpasang beserta pilihan utamanya.

bash
# menampilkan toolchain yang dikenali alr
alr toolchain
text Keluaran
CRATE         VERSION  STATUS    NOTES                                                                   
gprbuild      22.0.0   Available Detected at (...)/alire/toolchains/gprbuild_22.0.1_24dfc1b5/bin/gprbuild
gprbuild      22.0.1   Default                                                                           
gprbuild      2025.0.0 Available Provided by system package: gprbuild                                    
gnat_native   14.2.1   Default                                                                           
gnat_external 14.2.0   Available Detected at (...)e/alire/toolchains/gnat_native_14.2.1_06bb3def/bin/gnat

Tabel tersebut memuat lima entri. Dua entri berstatus Default adalah pilihan utama Alire saat ini, yaitu gprbuild 22.0.1 dan gnat_native 14.2.1. Tiga entri berstatus Available adalah versi lain yang dikenali Alire pada mesin yang sama, yaitu versi gprbuild yang pernah diunduh pada folder toolchains milik Alire, gprbuild yang disediakan paket distribusi, serta gnat yang berada di PATH dengan nomor versi 14.2.0.

Kompilator pilihan Alire tersimpan pada folder toolchains di bawah folder konfigurasinya, terpisah dari paket distribusi. Versinya dapat diperiksa langsung dengan memanggil berkas gnat di dalam folder tersebut, sebagaimana blok berikut. Pemanggilan langsung seperti ini berguna untuk memastikan versi yang tersimpan tanpa mengubah PATH.

bash
# memanggil gnat_native milik alire langsung dari folder toolchains
$HOME/.local/share/alire/toolchains/gnat_native_*/bin/gnat --version | head -1
text Keluaran
GNAT 14.2.0

Keluaran GNAT 14.2.0 menegaskan bahwa sumber kompilator pada penyiapan jalur ini adalah gnat_native yang dikelola Alire. Terminal yang memanggil gnat pada penyiapan ini juga menunjuk folder toolchains tersebut karena PATH-nya memuat folder bin toolchain. Pada mesin yang memasang paket gnat dari distribusi, gnat di terminal menunjuk GNAT milik distribusi. Diagram berikut merangkum dua jalur dari kode Ada menuju program yang dapat dijalankan.

kode Ada (.adb, .ads)GNAT dalam GCCpaket distribusi, dipanggil dari PATHgnat_nativerilis AdaCore via Alire, folder toolchainsprogram yang dapat dijalankan
Dua jalur memperoleh kompilator GNAT pada satu mesin

Memilih di antara keduanya#

Kedua sumber kompilator memenuhi standar bahasa yang sama, sehingga pemilihannya lebih banyak ditentukan oleh cara memperoleh dan memperbaruinya. Tabel berikut merangkum perbedaannya.

AspekGNAT dari distribusiToolchain dari Alire
Pemasanganpaket distribusi GNU/Linuxalr toolchain –select
Penyimpananikut paket distribusifolder toolchains milik Alire
Pembaruanmengikuti rilis distribusirilis baru yang diindeks Alire
Versi pada lingkungan jalur iniGCC 14.2.0 (Debian 14.2.0-19)gnat_native 14.2.1 (GNAT 14.2.0)
Pemanggilanlangsung dari terminal melalui PATHdiatur alr saat membangun proyek

Cara kerja Alire saat memilih kompilator juga perlu dipahami. Apabila pilihan utama sudah ditetapkan melalui alr toolchain –select, alr menggunakan pilihan tersebut ketika membangun proyeknya. Apabila belum ada pilihan, Alire mengandalkan kompilator yang sudah ada di lingkungan pengguna.

Dengan demikian, perintah gnat di terminal dan build proyek Alire dapat mengarah ke kompilator yang berbeda pada mesin yang sama. Pada lingkungan penulisan jalur ini keduanya menunjuk toolchain yang sama, yaitu gnat_native 14.2.1, karena hanya toolchain Alire yang terpasang. Peta pada diagram di atas menjadi acuan cepat untuk menelusuri sumber versi mana pun yang muncul.

Kesalahan umum#

Kekeliruan berikut muncul ketika dua sumber kompilator itu digunakan tanpa peta yang jelas, dan masing-masing disertai perbaikannya.

Menganggap gnat di terminal sama dengan kompilator Alire. Keduanya bernama gnat, tetapi sumbernya boleh berbeda pada satu mesin, misalnya GNAT dari distribusi untuk terminal dan gnat_native untuk build Alire. Pada lingkungan jalur ini keduanya menunjuk toolchain Alire karena hanya toolchain tersebut yang terpasang. Perbaikannya, periksa alr toolchain sebelum menarik kesimpulan tentang versi yang digunakan alr.

Mencampur dua jalur build untuk kode yang sama. Mengompilasi berkas yang sama dengan gnatmake di terminal dan membangun proyek Alire yang memuatnya berarti menggunakan dua kompilator yang berbeda. Perbedaan itu sah, tetapi mempersulit penelusuran ketika keluaran keduanya tidak sama. Pilih satu jalur untuk satu proyek, dan gunakan tabel pada bagian sebelumnya sebagai acuannya.

Menganggap versi distribusi sama dengan versi indeks Alire. Distribusi membekukan versi paketnya per rilis, sedangkan indeks Alire memuat rilis toolchain yang diperbarui tersendiri. Lingkungan jalur ini hanya memuat toolchain Alire, sehingga seluruh keluaran gnat pada jalur ini berasal dari gnat_native 14.2.1. Sebelum menggunakan fitur bahasa terbaru, periksa terlebih dahulu versi kompilator yang akan dipanggil dengan gnat –version atau alr toolchain.

Ringkasan#

  • GNAT dirilis sebagai bagian dari GCC, sehingga distribusi GNU/Linux memaketkannya sebagai paket gnat dengan nomor versi yang sejajar dengan gcc.
  • Alire mengelola toolchain dari AdaCore pada folder toolchains miliknya, dengan gnat_native 14.2.1 dan gprbuild 22.0.1 sebagai pilihan Default pada lingkungan ini.
  • alr toolchain adalah perintah utama untuk membedakan entri Default pilihan Alire dari entri Available yang terdeteksi di PATH.
  • Alire menggunakan pilihan utamanya saat membangun proyek, sehingga kompilator terminal dan kompilator Alire boleh berbeda pada mesin yang sama.

Referensi#