- Rust uygulamalarına kolayca gömülebilen bir betik dili ve yürütme motoru
- Harici betikler aracılığıyla dinamik mantık eklemek veya özel DSL'ler oluşturmak için tasarlanmıştır
- Rust ile yüksek uyumluluk sunar ve performans, güvenlik ve genişletilebilirliğin tamamını gözeten bir mimari sağlar
- Rust 1.66.0+ ve üzerindeki tüm Rust destekli platformlarda (WASM,
no-std) çalışır
- Söz dizimi, JavaScript + Rust'a benzeyen dinamik tipli bir dildir
- Performans: tek çekirdekli 2.6GHz Linux VM üzerinde 1 milyon yineleme 0.14 saniyede tamamlanır
- Doğal Rust entegrasyonu: Rust fonksiyonlarını, tiplerini, getter/setter'larını, metotlarını ve indeksleyicilerini destekler
- Rust değerleri, betiklere değişken/sabit olarak aktarılabilir (
Scope kullanılarak)
- Başlıca veri tipleri desteği: boolean, tamsayı, kayan noktalı sayı,
Decimal, dize, Unicode karakteri, dizi, bayt dizisi, nesne haritası
- Rhai betiklerinde tanımlanan fonksiyonlar Rust'tan çağrılabilir
- Bağımlılıklar minimum düzeydedir (yalnızca
smallvec, thin-vec gibi az sayıda kütüphane kullanılır)
- Re-entrant bir motor:
sync ile Send + Sync olabilir
- AST derleme ve optimizasyon özellikleri sunar
- Eklenti sistemi ve makro tabanlı API genişletme desteği vardır
- Fonksiyon/operatör aşırı yükleme, fonksiyon işaretçileri, currying, closure'lar ve bazı OOP kalıplarını destekler
- Modül sistemi sunar; kod tabanı dinamik olarak yapılandırılabilir
serde serileştirme/deserileştirme desteği vardır (isteğe bağlı)
- Hata ayıklama arayüzü sunar
Güvenlik ve emniyet
- Don’t Panic garantisi: panic oluşursa bu bir hata kabul edilir, host sistem güvende kalır
- Sandbox çalıştırma: açıkça izin verilmedikçe dış ortam değiştirilemez
- Kötü niyetli saldırılara karşı koruma: stack overflow, aşırı veri ve sonsuz çalışma engellenir
- Çalışma ilerleyişi izlenebilir ve manuel olarak durdurulabilir
- Miri denetiminden başarıyla geçti
Özel dil oluşturmak isteyenler için
- Rhai, DSL olarak kullanılabilir
- Döngüler gibi belirli dil özellikleri devre dışı bırakılabilir
- Anahtar kelimeler/operatörler devre dışı bırakılabilir ve sınırlandırılabilir
- Kullanıcı tanımlı operatörler ve söz dizimi genişletmeleri eklenebilir
Ek kaynaklar
Lisans
- Apache 2.0 veya MIT lisanslarından biri seçilebilir
- Katkı yapılan kodlar varsayılan olarak çift lisansla sunulur
3 yorum
Bir betik dili arıyorsanız, are we game yet üzerinde epey bir liste var.
https://arewegameyet.rs/ecosystem/scripting/
O listede yok ama yakın zamanda GPT'ye sorarken
kotoadlı bir betik dili de keşfettim; kısa bir göz attım ama buna da iyi gibi göründü.https://koto.dev/
Araştırırken
rotodiye bir şey daha buldum; bunun tam olarak ne olduğuna kadar bakmadım ama geliştiren yer bir şekilde tanıdık geldi.https://github.com/NLnetLabs/roto
wasm playground zaman ölçümü örnekleri var ama hızlı değil mi?
Betik amaçlı bir dil olduğu için hızlı olmaması muhtemelen normaldir.