Status dan kejujuran soal churn API

Menyusun gambaran jujur tentang lini masa versi Mojo dan perubahan API antar rilis yang masih berlangsung.

Daftar isi

Topik ini menyusun gambaran jujur tentang status Mojo sebagai bahasa muda, mulai dari lini masa versinya sampai churn API, yakni perubahan API yang terus-menerus antar rilis. Setelah topik ini dibaca, potongan kode Mojo yang ditemukan di internet dapat diuji kebenarannya berdasarkan versi, dan kebiasaan memeriksa versi sebelum menyalin kode terbentuk. Penilaian tersebut penting karena banyak tutorial era pra-1.0 menggunakan API yang sudah tidak berlaku pada Mojo 1.2.0.

Lini masa versi yang ringkas#

Mojo diumumkan oleh Modular pada 2023 dalam keadaan belum stabil. Sepanjang era pra-1.0, rilis keluar dalam ritme cepat dan API pustaka standar berubah antar rilis tanpa jaminan kestabilan. Penomoran versinya juga sempat berganti gaya sebelum akhirnya menetap pada penomoran yang sederhana.

Titik baliknya terjadi pada Agustus 2026 ketika versi 1.0 dirilis bersama pembukaan kode sumber dengan lisensi Apache 2.0 beserta pengecualian LLVM. Versi 1.2.0 menyusul pada 22 Oktober 2026 dan menjadi versi yang digunakan di seluruh jalur ini. Lini masa singkatnya berbunyi, diumumkan pada 2023, 1.0 pada Agustus 2026, lalu 1.2.0 pada 22 Oktober 2026.

Status muda ini bukan kelemahan yang disembunyikan, melainkan kondisi yang perlu diantisipasi. Rilis baru masih membawa perubahan API, sehingga kode yang ditulis pada satu versi dapat menuntut penyesuaian pada versi berikutnya. Kebiasaan yang sesuai adalah menulis kode untuk satu versi tertentu dan menyebut versi itu setiap kali mencari bantuan.

Perubahan besar yang sudah terjadi#

Perubahan yang paling menonjol menyasar tiga konstruksi inti, yaitu cara mendefinisikan fungsi, cara menamai konstanta compile-time, dan cara menyatakan konvensi argumen. Tabel berikut membandingkan bentuk lama dengan bentuk Mojo 1.2.0.

KonstruksiEra pra-1.0Mojo 1.2.0
Definisi fungsifn (dan def)def untuk semua fungsi
Konstanta compile-timealiascomptime
Konvensi argumenborrowed, inout, ownedbawaan tanpa kata kunci, mut, var

Kata kunci fn dihapus sejak 1.0 sehingga seluruh fungsi ditulis dengan def. Konstanta yang dulu dinyatakan dengan alias kini dinyatakan dengan comptime. Konvensi argumen borrowed, inout, dan owned dihapus, lalu digantikan bentuk bawaan yang meminjam secara immutable (tak dapat diubah), kata kunci mut untuk peminjaman yang dapat diubah, serta var untuk transfer kepemilikan. Perubahan ini membuat potongan kode pra-1.0 gagal dikompilasi pada 1.2.0, bukan sekadar menghasilkan peringatan.

mojo Gaya era pra-1.0 yang sudah tidak dikompilasi pada Mojo 1.2.0
# tidak-dijalankan
fn jumlah(a: Int, b: Int) -> Int:
    return a + b

alias LEBAR = 4
mojo Padanan gaya pada Mojo 1.2.0
# tidak-dijalankan
def jumlah(a: Int, b: Int) -> Int:
    return a + b

comptime LEBAR = 4

def ubah(mut n: Int):
    n = n + 1

Vokabulari 1.2.0 dalam satu program#

Program berikut menggunakan vokabulari Mojo 1.2.0 secara lengkap dalam bentuk yang kecil, yaitu konstanta comptime, fungsi def bertipe, variabel lokal var, dan perulangan for. Keempat konstruksi tersebut tidak memerlukan pernyataan import karena semuanya bagian dari bahasa atau pustaka bawaannya. Program sesingkat ini juga berguna sebagai berkas uji cepat sebelum potongan kode yang ditemukan di internet dipakai lebih lanjut. Program ini dieksekusi dengan Mojo 1.2.0 pada mesin penulisan jalur ini, dan keluarannya ditampilkan persis seperti yang dicetak.

mojo jumlahkan.mojo
comptime BATAS = 10

def jumlahkan(deret: Int) -> Int:
    var total = 0
    for i in range(deret):
        total = total + i
    return total

def main():
    print(jumlahkan(BATAS))
bash
# jalankan program jumlahkan
mojo run jumlahkan.mojo
text Keluaran
45

Baris comptime BATAS = 10 menamai nilai yang diketahui saat kompilasi, menggantikan peran alias era lama. Fungsi jumlahkan menerima parameter deret bertipe Int, menampung akumulasi pada variabel lokal var total, lalu melakukan perulangan dengan range(deret). Tipe total tidak dituliskan karena compiler menyimpulkan tipenya dari nilai awal 0. Fungsi main memanggil jumlahkan(BATAS) dan mencetak hasilnya, yaitu 45, jumlah deret nol sampai sembilan. Konstruksi inilah yang menjadi acuan penulisan kode pada seluruh jalur ini.

Cara tetap berorientasi saat API bergerak#

Kode Mojo yang berpindah versi memerlukan kebiasaan kerja yang tertib. Keputusan versi sebaiknya dibuat sebelum baris pertama ditulis, bukan setelah error muncul. Langkah berikut menyusun kebiasaan tersebut.

  1. Periksa versi terpasang dengan mojo --version sebelum menulis atau menyalin kode, karena pesan error dan perilaku API antar versi dapat berbeda.
  2. Gunakan manual yang versinya cocok dengan versi terpasang, yaitu manual 1.2.0 pada mojolang.org/docs/manual untuk pemasangan saat ini.
  3. Baca halaman releases sebelum menaikkan versi, karena perubahan antar rilis tercatat di sana.
  4. Perlakukan potongan kode dari internet sebagai hipotesis, dan uji dengan mojo run pada berkas kecil sebelum kode itu digunakan.

Kebiasaan keempat paling sering menyelamatkan waktu. Potongan kode yang tampak benar dapat berasal dari versi lama, dan pengetesan kecil menampakkannya dalam hitungan detik. Berkas uji yang gagal dikompilasi juga menampilkan pesan error yang biasanya langsung menyebut konstruksi mana yang sudah tidak berlaku. Dengan keempat kebiasaan itu, penyesuaian kode ketika versi berpindah menjadi pekerjaan singkat yang terencana, bukan pemecahan error yang dimulai dari nol.

Kesalahan umum#

Kesalahan pertama adalah menyalin kode era pra-1.0 apa adanya. Penyebabnya, kode itu menggunakan fn, alias, atau konvensi argumen lama yang sudah dihapus. Perbaikannya, sesuaikan kode ke bentuk 1.2.0 dengan mengganti fn menjadi def dan alias menjadi comptime, lalu uji hasilnya dengan mojo run. Pada alias, compiler 1.2.0 tidak lagi mengenalinya sebagai deklarasi konstanta, melainkan memperlakukannya sebagai ekspresi biasa sehingga memunculkan pesan expressions must not appear at file scope; move this into a function body.

Kesalahan kedua adalah mencari padanan satu-satu untuk setiap kata kunci lama. Kata kunci borrowed memang digantikan bentuk bawaan, tetapi bentuk bawaan bukan salinan, melainkan peminjaman yang tak dapat diubah. Menulis ulang kode dengan asumsi semantik lama menghasilkan program yang dikompilasi tetapi berperilaku berbeda, sehingga pemahaman konvensi argumen baru perlu dibangun dari aturannya, bukan dari penggantian nama.

Kesalahan ketiga adalah memperlakukan rilis baru sebagai peningkatan yang aman secara otomatis. Karena API masih berubah antar rilis, peningkatan versi dapat menuntut penyesuaian kode. Perbaikannya, baca halaman releases sebelum menaikkan versi dan tetapkan satu versi untuk satu proyek selama proyek itu masih dikerjakan.

Ringkasan#

  • Mojo diumumkan pada 2023, mencapai 1.0 pada Agustus 2026 dengan pembukaan kode sumber berlisensi Apache 2.0, dan mencapai 1.2.0 pada 22 Oktober 2026.
  • fn dihapus sejak 1.0, alias diganti comptime, dan konvensi argumen borrowed, inout, owned digantikan bentuk bawaan, mut, serta var.
  • API masih berubah antar rilis, sehingga versi terpasang diperiksa dengan mojo --version sebelum kode ditulis atau disalin.
  • Halaman releases dan manual sesuai versi menjadi sumber kebenaran untuk menjaga kode tetap sesuai versi yang terpasang.

Referensi#