- Bahasa scripting dan mesin eksekusi yang dapat dengan mudah ditanamkan ke aplikasi Rust
- Dirancang agar dapat menambahkan logika dinamis melalui skrip eksternal, atau membuat DSL kustom
- Memiliki kompatibilitas tinggi dengan Rust, serta menawarkan arsitektur yang mempertimbangkan performa, keamanan, dan skalabilitas
- Berjalan di semua platform yang didukung Rust dengan Rust 1.66.0+ (WASM,
no-std)
- Sintaks berupa bahasa dynamic typing yang mirip JavaScript + Rust
- Performa: memerlukan 0,14 detik untuk menjalankan 1 juta iterasi pada Linux VM single-core 2.6GHz
- Integrasi Rust yang native: mendukung fungsi, tipe, getter/setter, metode, dan indexer milik Rust
- Nilai Rust dapat diteruskan ke skrip sebagai variabel/konstanta (menggunakan
Scope)
- Mendukung tipe data utama: boolean, integer, floating-point,
Decimal, string, karakter Unicode, array, array byte, object map
- Fungsi yang didefinisikan dalam skrip Rhai dapat dipanggil dari Rust
- Dependensi minimal (hanya menggunakan sedikit library seperti smallvec, thin-vec, dll.)
- Mesin yang re-entrant: dapat mendukung
Send + Sync melalui sync
- Menyediakan fitur kompilasi dan optimisasi AST
- Mendukung sistem plugin dan perluasan API berbasis makro
- Mendukung overloading fungsi/operator, function pointer, currying, closure, dan sebagian pola OOP
- Menyediakan sistem modul, sehingga basis kode dapat disusun secara dinamis
- Mendukung serialisasi/deserialisasi
serde (opsional)
- Menyediakan antarmuka debugging
Keamanan dan keselamatan
- Jaminan Don’t Panic: jika terjadi panic, itu dianggap bug, dan sistem host tetap aman
- Eksekusi sandbox: tidak dapat mengubah lingkungan eksternal kecuali diizinkan secara eksplisit
- Perlindungan terhadap serangan berbahaya: mencegah stack overflow, data berlebihan, dan eksekusi tak berujung
- Dapat melacak progres eksekusi dan menghentikannya secara manual
- Telah lulus pemeriksaan Miri
Untuk mereka yang ingin membuat bahasa kustom
- Rhai dapat digunakan sebagai DSL
- Fitur bahasa tertentu seperti loop dapat dinonaktifkan
- Keyword/operator dapat dinonaktifkan dan dibatasi
- Operator kustom dan perluasan sintaks yang ditentukan pengguna dapat ditambahkan
Materi tambahan
Lisensi
- Bisa memilih Apache 2.0 atau MIT
- Kode yang dikontribusikan pada dasarnya menerapkan dual license
3 komentar
Kalau Anda sedang mencari bahasa skrip, ada cukup banyak daftar di are we game yet.
https://arewegameyet.rs/ecosystem/scripting/
Tidak ada di daftar itu, tetapi baru-baru ini saat saya bertanya ke GPT, saya juga menemukan bahasa skrip bernama koto. Saya sempat melihat sekilas lalu berhenti, tetapi ini juga terlihat bagus.
https://koto.dev/
Saat mencari-cari, saya juga menemukan yang namanya roto. Saya belum sampai menelusuri ini seperti apa, tetapi tempat yang membuatnya entah kenapa terasa familiar.
https://github.com/NLnetLabs/roto
Ada contoh pengukuran waktu di wasm playground, tapi tidak cepat ya?
Karena ini adalah bahasa untuk tujuan scripting, wajar jika tidak cepat.