Topik ini membahas pemasangan Modular SDK pada Linux, pemeriksaan hasil pemasangan, eksekusi program Mojo pertama, serta penggunaan REPL dan mojo run sebagai dua alat kerja harian. Setelah langkah-langkahnya dijalankan, Mojo 1.2.0 siap dipanggil dari terminal, antarmuka teks untuk menjalankan perintah, program pertama tereksekusi dengan keluaran nyata, dan perbedaan kerja kedua alat tersebut sudah jelas. Seluruh perintah pada topik ini dijalankan pada Linux, platform utama yang didukung Mojo.
Dua jalur pemasangan resmi#
Modular SDK dipasang mengikuti panduan resmi di halaman install mojolang.org dengan dua jalur, yaitu manajer paket Python uv dan manajer lingkungan conda pixi. Kedua jalur membuat folder proyek, menambahkan paket mojo, lalu menyediakan perintah mojo di dalam lingkungan proyek tersebut. Pilih salah satu dan gunakan secara konsisten dalam satu proyek, karena perintah mojo hasil kedua jalur itu sama sehingga langkah-langkah pada topik ini berlaku untuk keduanya.
Jalur uv membuat proyek Python standar, kemudian paket mojo ditambahkan ke lingkungannya. Perintahnya berurutan seperti berikut.
# tidak-dijalankan
# jalur uv, satu paket mojo untuk satu proyek
uv init halo
cd halo
uv add mojoJalur pixi membuat lingkungan conda dengan kanal paket resmi Modular, lalu paket mojo ditambahkan ke lingkungan tersebut. Argumen -c menyatakan kanal sumber paket. Kanal resmi Modular ditulis lebih dahulu, disusul conda-forge.
# tidak-dijalankan
# jalur pixi dengan kanal resmi Modular
pixi init halo -c https://conda.modular.com/max/ -c conda-forge
cd halo
pixi add mojoPada mesin penulisan jalur ini, Mojo 1.2.0 sudah terpasang melalui pixi secara global, sehingga binernya berada di ~/.pixi/bin tanpa folder proyek. Direktori tersebut perlu masuk ke PATH sebelum perintah mojo dapat dipanggil. Pola inilah yang digunakan pada seluruh contoh eksekusi topik ini.
Memeriksa pemasangan#
Pemeriksaan pemasangan cukup dengan menampilkan versi mojo, tanpa menulis program terlebih dahulu. Perintah mojo --version mencetak nomor versi beserta sidik jari build, yaitu kode singkat yang mengidentifikasi kompilasi spesifik yang terpasang. Perintah mojo sendiri adalah program tunggal dengan subperintah, misalnya mojo run, mojo repl, dan mojo build, sehingga versi yang dicetak berlaku untuk seluruh subperintah tersebut.
# tambahkan direktori biner pixi ke PATH
export PATH="$HOME/.pixi/bin:$PATH"
# tampilkan versi mojo yang terpasang
mojo --versionMojo 1.2.0 (2016d0cd)Baris export PATH menambahkan direktori ~/.pixi/bin ke variabel lingkungan PATH, daftar direktori yang dipindai shell ketika mencari program, sehingga perintah mojo dapat dipanggil dari folder mana pun. Efek baris tersebut hanya berlaku pada sesi terminal yang menjalankannya, sehingga sesi baru perlu mengulang baris itu sebelum perintah mojo kembali ditemukan. Keluaran Mojo 1.2.0 (2016d0cd) menyebut nomor versi 1.2.0 dan sidik jari build 2016d0cd. Kedua bagian itu berguna saat mencari bantuan karena perilaku API antar versi dapat berbeda. Seluruh keluaran pada jalur ini berasal dari versi tersebut, sehingga keluaran yang berbeda di mesin lain menandakan perbedaan versi, bukan kesalahan pengetikan perintah.
Program pertama dengan mojo run#
Program Mojo pertama disimpan sebagai berkas dengan akhiran .mojo lalu dieksekusi dengan mojo run. Berkas halo.mojo berikut memuat fungsi main yang mencetak dua baris, yaitu satu teks dan satu hasil penjumlahan.
def main():
print("Halo, Mojo!")
print(2 + 3)# jalankan program pertama
mojo run halo.mojoHalo, Mojo!
5Setiap berkas Mojo yang dieksekusi wajib memuat def main() karena Mojo 1.2.0 tidak mendukung pernyataan di tingkat berkas. Fungsi print menampilkan nilai ke terminal dan menambahkan baris baru setiap pemanggilannya. Baris print(2 + 3) mencetak 5 karena operasinya dihitung saat program berjalan, bukan ditempel sebagai teks.
Pemanggilan mojo run pertama pada satu berkas memerlukan waktu sekitar satu sampai lima detik karena kode dikompilasi lebih dahulu. Waktu itu adalah harga satu kali kompilasi, dan keluaran program muncul setelah kompilasinya selesai. Program yang sudah dieksekusi dapat dijalankan ulang dengan perintah yang sama setiap kali berkasnya disunting.
REPL untuk eksperimen cepat#
REPL (Read-Eval-Print Loop) adalah lingkungan interaktif yang membaca satu baris kode, mengevaluasinya, lalu mencetak hasilnya. REPL dijalankan dengan perintah mojo repl. Pada contoh berikut, dua baris uji dikirim ke REPL melalui printf agar eksperimennya dapat direkam dan diulang persis, sedangkan penggunaan interaktif menampilkan prompt per baris.
# kirim dua baris uji ke REPL
printf 'print(2+3)\nvar y = 7\n' | mojo repl5
(Int) y = 7Baris pertama keluaran, yaitu 5, adalah hasil evaluasi print(2+3). Baris kedua, yaitu (Int) y = 7, adalah gema deklarasi variabel y dengan tipe Int dan nilai 7, khas REPL yang menampilkan hasil setiap deklarasi. Pada sesi interaktif, prompt menunggu masukan per baris sehingga percobaan sintaks berlangsung cepat tanpa menyimpan berkas.
REPL dan eksekusi berkas berbeda dalam satu hal yang menentukan. Sesi REPL menerima pernyataan di tingkat atas tanpa fungsi main, sedangkan berkas Mojo yang dijalankan menuntut def main(). Kode yang berjalan di REPL belum tentu bisa disimpan apa adanya sebagai berkas, sehingga hasil eksperimen yang ingin dipertahankan perlu dipindahkan ke dalam fungsi main.
Kesalahan umum#
Kesalahan pertama adalah command not found saat memanggil mojo. Penyebabnya, direktori biner Mojo belum berada di PATH, misalnya karena sesi terminal baru dibuka tanpa aktivasi. Perbaikannya, tambahkan ~/.pixi/bin ke PATH seperti contoh pada topik ini, atau aktifkan lingkungan proyek yang digunakan saat pemasangan, lalu verifikasi ulang dengan mojo --version.
Kesalahan kedua adalah memanggil fungsi yang dapat memunculkan error tanpa menandai fungsinya. Pada Mojo 1.2.0, def secara bawaan tidak dapat memunculkan error, sehingga pemanggilan operasi seperti pengindeksan Dict gagal dikompilasi dengan pesan cannot call function that may raise in a context that cannot raise. Perbaikannya, tandai fungsinya dengan raises, misalnya def main() raises:, atau tangkap errornya dengan blok try.
Kesalahan ketiga adalah mengubah isi sesi REPL langsung menjadi berkas. Pernyataan di tingkat atas yang diterima REPL, misalnya var y = 7, tidak didukung pada berkas yang dieksekusi. Perbaikannya, pindahkan pernyataan tersebut ke dalam fungsi main sebelum disimpan sebagai berkas .mojo.
Ringkasan#
- Modular SDK dipasang dengan uv atau pixi mengikuti panduan resmi di halaman install, dan versi terpasang diperiksa dengan
mojo --version. - Keluaran
Mojo 1.2.0 (2016d0cd)menyebut nomor versi dan sidik jari build yang mengidentifikasi kompilasi terpasang. - Program Mojo wajib memuat
def main(), disimpan sebagai berkas.mojo, lalu dieksekusi denganmojo runsetelah kompilasi singkat. - REPL mengevaluasi baris demi baris dan menggemakan deklarasi, sedangkan eksekusi berkas menuntut fungsi
main().
Referensi#
- Install Mojo — Modular — Panduan pemasangan resmi dengan uv dan pixi yang diikuti pada topik ini.
- Mojo Manual — Modular
— Manual resmi versi 1.2.0 berisi perilaku perintah
mojodan sintaks inti.