Arrays

Literal array dan pengindeksan di AHA! — array bilangan bulat homogen dengan penyimpanan berbasis LLVM

Arrays

AHA! mendukung literal array dan pengindeksan pada tingkat pembangkitan kode. Array bersifat homogen — setiap elemen berbagi satu tipe — dan implementasi saat ini menyimpan elemen Int.

Literal Array

Tulis sebuah array dengan tanda kurung siku dan elemen yang dipisahkan koma:

let nums = [1, 2, 3];

Array kosong juga valid:

let empty = [];

Pengindeksan

Baca sebuah elemen dengan arr[index]. Indeks dimulai dari nol, sehingga elemen pertama adalah arr[0]:

let nums = [10, 20, 30];
print(nums[0]); // 10
print(nums[2]); // 30

Menggunakan Array dengan Perulangan

Karena perulangan for menelusuri rentang bilangan bulat, ia berpasangan secara alami dengan pengindeksan:

let data = [5, 15, 25, 35];
let sum = 0;
for i in 0..4 {
    sum = sum + data[i];
}
print(sum); // 80

Cara Kerja Array

Di balik layar, sebuah literal array mengalokasikan ruang stack (alloca) untuk tipe array LLVM, lalu menyimpan setiap elemen melalui getelementptr (GEP). Pengindeksan mengubah array kembali menjadi pointer dan memuat elemen pada offset yang dihitung.

AspekDetail
Tipe elemenInt (64-bit)
Tampilan tipe[Int]
PenyimpananLLVM array_type via alloca + GEP
Pengindeksanint_to_ptr + GEP + load

Catatan

  • Array bersifat homogen — sistem tipe melacak tipe elemen sebagai AhaType::Array(Int).
  • Pengindeksan mengembalikan sebuah Int, sehingga hasilnya menyatu dengan aritmetika dan builtin numerik secara langsung.
  • Literal array dan pengindeksan diimplementasikan di codegen (compile_array_literal, compile_index_expression).

Lihat Language Tour untuk keseluruhan konstruksi bahasa.