Peta pustaka standar

Memetakan modul collections, math, testing, dan kawan-kawan yang dikirim bersama Mojo.

Daftar isi

Pustaka standar Mojo adalah kumpulan modul resmi yang dikirim bersama compiler, dan hampir seluruh kebutuhan pemrograman harian terpenuhi tanpa pemasangan tambahan apa pun. Aksesnya terbagi dua lapis, yaitu prelude yang dimuat otomatis pada setiap program dan modul berawalan std. yang diimpor secara eksplisit. Topik ini memetakan kedua lapis tersebut, memperagakan pustaka yang paling sering dipakai pada berkas contoh yang dijalankan, lalu merangkumnya dalam satu tabel. Setelah itu, penulisan import untuk tipe koleksi, fungsi matematika, dan alat pengujian tidak perlu lagi ditebak.

Prelude: pustaka yang dimuat otomatis#

Prelude adalah kumpulan nama yang sudah tersedia di setiap program Mojo tanpa satu baris import pun. Tipe koleksi List, Dict, dan Set, tipe teks String, tipe vektor SIMD, bilangan Int dan Float64, serta fungsi print dan range termasuk di dalamnya. Nama-nama itu dimuat sebelum baris kode pertama dijalankan, sehingga pencarian namanya tidak melewati pernyataan import sama sekali. Berkas berikut memakai keempat kelompok tersebut sekaligus dan tidak mengimpor apa pun.

mojo prelude.mojo
def main() raises:
    var nilai: List[Float64] = [7.5, 8.0, 6.5, 9.0]
    var total = 0.0
    for x in nilai:
        total += x
    print(total)

    var kamus: Dict[String, Int] = {"januari": 31, "februari": 28}
    print(kamus["februari"])

    var teks = "peta pustaka"
    print(teks.count_codepoints())

    var v = SIMD[DType.float64, 4](1.0, 2.0, 3.0, 4.0)
    print(v.reduce_add())
bash
# seluruh tipe pada berkas ini tersedia tanpa import
mojo run prelude.mojo
text Keluaran
31.0
28
12
10.0

Keluaran 31.0 adalah total empat nilai yang dijumlahkan dengan perulangan for, sedangkan 28 dibaca langsung dari Dict melalui kuncinya. Angka 12 berasal dari metode count_codepoints pada String yang menghitung jumlah karakter, dan 10.0 adalah hasil reduce_add atas SIMD empat elemen. Karena semua kemampuan itu berada di prelude, program pendek umumnya tidak memerlukan import sama sekali.

Perhatikan bahwa main pada berkas ini ditulis dengan kata kunci raises. Penyebabnya adalah pembacaan Dict melalui kunci, yang dapat memunculkan error apabila kunci tersebut tidak ada, sehingga fungsi yang berisi operasi semacam itu harus menyatakannya. Dua tipe prelude lain yang belum muncul pada contoh adalah Set, yaitu kumpulan tanpa elemen ganda, dan Optional, yaitu pembungkus nilai yang boleh kosong, dan keduanya mengikuti aturan prelude yang sama.

Modul collections: Array dan Span#

Modul std.collections melengkapi prelude dengan tipe data berorientasi memori, yaitu Array berukuran tetap pada waktu kompilasi dan Span sebagai view, yakni pandangan atas data Array tanpa memilikinya. Keduanya diimpor dari submodul std.collections.array dan std.collections.span.

mojo koleksi-standar.mojo
from std.collections.array import Array
from std.collections.span import Span

def main():
    var a = Array[Float64, 4](fill=0.0)
    a[0] = 1.5
    a[3] = 4.5
    var s = Span(a)
    print(s[0], s[3], len(s))
bash
# Array dan Span diimpor dari std.collections
mojo run koleksi-standar.mojo
text Keluaran
1.5 4.5 4

Pernyataan Array[Float64, 4](fill=0.0) membuat empat elemen bernilai nol, dua di antaranya diisi nilai uji, dan Span(a) membungkus Array tersebut tanpa menyalin datanya. Keluaran menunjukkan pembacaan elemen melalui Span cocok dengan isi Array, sedangkan len(s) menghitung empat elemen yang sama. Untuk kebutuhan umum, List dari prelude sudah cukup, sedangkan Array dan Span dipilih ketika ukuran tetap dan akses beruntun pada memori menjadi kebutuhannya.

Ketiga tipe koleksi ini memang tidak saling menggantikan. List menumbuhkan ukurannya setiap kali append dipanggil, Array mengunci ukurannya pada waktu kompilasi melalui parameter kurung siku, dan Span tidak menyimpan data sama sekali karena hanya membungkus data milik orang lain. Pemilihannya dengan demikian ditentukan oleh pola penggunaannya, yaitu apakah ukurannya berubah, apakah sudah diketahui sejak kompilasi, dan apakah data sumbernya dimiliki sendiri.

Modul math dan aturan penulisan std.#

Modul yang tidak termasuk prelude ditulis lengkap dengan awalan std. pada pernyataan importnya. Berkas berikut mengimpor tiga fungsi dan satu konstanta dari std.math, yaitu sqrt, floor, ceil, dan pi.

mojo math-standar.mojo
from std.math import sqrt, floor, ceil, pi

def main():
    print(sqrt(144.0))
    print(floor(3.7))
    print(ceil(3.2))
    print(pi)
bash
# modul math diimpor dengan awalan std.
mojo run math-standar.mojo
text Keluaran
12.0
3.0
4.0
3.141592653589793

Keluaran menunjukkan akar kuadrat 144.0 bernilai 12.0, pembulatan ke bawah 3.7 menjadi 3.0, pembulatan ke atas 3.2 menjadi 4.0, dan konstanta pi dengan lima belas angka desimal. Aturan awalan std. berlaku seragam untuk semua modul eksplisit, sehingga import alat pengujian ditulis from std.testing import TestSuite dan bukan from testing import TestSuite. Menulis nama modul lengkap sejak awal menghindari perbaikan import yang berulang ketika proyek membesar.

Tabel berikut merangkum lapisan pustaka standar yang sering dipakai beserta bentuk importnya.

ModulIsi yang sering dipakaiBentuk import
preludeList, Dict, String, SIMD, print, rangetersedia otomatis tanpa import
std.collectionsArray, Spanfrom std.collections.array import Array
std.mathsqrt, floor, ceil, pifrom std.math import sqrt
std.testingTestSuite, assert_equal, assert_raisesfrom std.testing import TestSuite
std.memoryalloc, dealloc, Pointerfrom std.memory.alloc import alloc
std.pythonPython, jembatan numpyfrom std.python import Python

Dua lapisan terakhir pada tabel memiliki peran yang lebih khusus. Modul std.memory menyediakan alloc dan dealloc untuk mengatur memori secara manual beserta tipe Pointer, sedangkan std.python membuka jembatan ke interpreter Python melalui Python.import_module. Keduanya jarang digunakan sejak baris pertama program harian, tetapi letaknya perlu diketahui ketika kebutuhan itu muncul.

Peta lengkap modul pustaka standar dapat dibuka pada dokumentasi resmi di mojolang.org/docs/std. Setiap halaman modul memuat daftar struct, fungsi, dan konstantanya beserta contoh pemanggilan. Membuka halaman tersebut lebih cepat daripada mencoba-coba nama fungsi, karena daftarnya tersusun per tipe, dan nama modul yang harus ditulis pada import ikut tercantum di sana sehingga aturan awalan std. tidak perlu dihafal.

Ringkasan#

  • Tipe harian seperti List, Dict, String, SIMD, dan fungsi print berada di prelude dan tersedia tanpa import.
  • Modul lain diimpor dengan awalan std., misalnya from std.math import sqrt dan from std.collections.array import Array.
  • Tabel peta pada topik ini merangkum lokasi tipe dan alat yang sering dipakai, dari collections sampai testing.

Referensi#