Moonbit: Hızlı, yalın ve kullanıcı dostu bir WebAssembly dili
(moonbitlang.com)- WebAssembly bulut ve edge bilişimde giderek daha önemli hale gelirken, Moonbit Wasm’ın verimlilik, güvenlik ve küçük boyut avantajlarından daha kolay yararlanmayı hedefleyen Wasm-first bir dil olmayı amaçlıyor
- Moonbit, Rust ve C/C++’ın öğrenme zorluğu ile uzun derleme süreleri, Go’nun ise büyük ve verimsiz üretilen kod gibi sınırlamalarını hedef alıyor
- Tasarım odağı hızlı derleme ve çalışma, küçük Wasm çıktısı ve kolay kullanılabilirlik; buna çoklu ara temsil optimizasyonu, fonksiyon düzeyinde paralel semantik analiz ve artımlı yeniden analiz dahil
- Fibonacci örneğinde yerel fonksiyon tipi çıkarımı, en küçük Wasm çıktısı, Go’dan daha hızlı ve Rust’a benzer performans ile özyinelemeli closure ve exhaustive pattern match desteği vurgulanıyor
- Şu anda çevrimiçi IDE, CLI araçları, dokümantasyon ve VSCode uzantısı sunuluyor; 2024’ün 2. çeyreği sonuna kadar beta status hedefleniyor ve beta kalitesine ulaştıktan sonra kaynak kodun açılması planlanıyor
WebAssembly öncelikli bir dil hedefi
- WebAssembly, verimlilik, güvenlik, küçük boyut ve açık standart olma özellikleri nedeniyle bulut ve edge bilişimde önemi artan, platformlar arası bir komut kümesi mimarisidir
- Mevcut seçeneklerin Wasm’ın potansiyelinden yeterince yararlanamadığı düşünülüyor
- Rust ve C/C++ gibi düşük seviyeli Wasm dillerini öğrenmek zor ve uzun derleme süreleri geliştirme hızını yavaşlatabiliyor
- Go gibi yüksek seviyeli dillerde üretilen kodun verimsiz ve büyük olması, Wasm’ın hız ve küçük boyut avantajlarını tam kullanmayı zorlaştırıyor
- Moonbit, hızlı derlenip çalışan, küçük Wasm çıktıları üreten ve Go gibi öğrenmesi kolay bir Wasm-first dil olmayı hedefliyor
Dil tasarımı ve ekip
- Moonbit, Hongbo Zhang ve dil tasarımı ile geliştirme konusunda 10 yıldan fazla deneyime sahip bir ekip tarafından yürütülüyor
- Zhang; OCaml, ReScript ve Flow’a katkıda bulundu; ReScript araç zincirinde hızlı derleyici, standart kütüphane ve build sisteminde chief architect olarak görev yaptı
- Dil tasarımı hem Go hem de Rust’tan etkileniyor
- Go’nun sadeliği, özellikle paket sistemi benimsendi
- Rust’ın ifade gücü; pattern matching, type inference, generics ve trait benzeri ad-hoc polymorphism dahil edildi
- Hata toleranslı tip sistemi; hız, paralelleştirilebilirlik ve artımlı kontrol gözetilerek tasarlandı ve IDE desteği temel hedeflerden biri olarak konumlandırıldı
Hızlı derleme ve çalışma
- Moonbit, hem geliştirme performansını hem de çalışma zamanı performansını kapsayan, uçtan uca hızlı bir dil olmayı hedefliyor
- Tüm program optimizasyonu için çok seviyeli ara temsiller (IR) kullanılıyor
- Bellek yerleşimini iyileştirerek cache miss sayısını azaltmayı amaçlıyor
- Veri akışı ve kontrol akışı analizleri için daha iyi bağlam sağlıyor
- Mevcut link-time optimization yapılarının çoğundan daha kapsamlı bir program yapısı anlayışıyla daha etkili optimizasyon sağladığı düşünülüyor
- Düşük seviyede görünmeyen yüksek seviyeli tekrarlar bulunup kaldırılabiliyor
- IDE işlevleri için kritik olan hızlı build performansı adına fonksiyon düzeyinde paralel semantik analize izin veriliyor
- ReScript ve Rust’tan farklı olarak fonksiyon düzeyinde paralel semantic analysis mümkün
- Aynı ayrıntı düzeyinde artımlı yeniden analiz yaparak büyük monorepo’ları işleyebildiği ve milisaniye düzeyinde yanıt süreleri sunabildiği belirtiliyor
Küçük Wasm çıktısı
- Moonbit, etkili dead code elimination gözetilerek tasarlandı
- Bu analizi engelleyen dil özellikleri hariç tutuldu ve standart kütüphane de ölü kod temizlemeyi kolaylaştıracak şekilde yapılandırıldı
- Tüm program optimizasyonuyla nihai kod boyutunu önemli ölçüde azaltmayı hedefliyor
- Kod boyutundaki küçülmenin güvenliği artırdığı ve saldırı yüzeyini azalttığı düşünülüyor
- Serverless bilişim ortamlarında hızlı başlangıç sağladığı belirtiliyor
Kullanılabilirlik için özellikler ve araçlar
- Moonbit, Rust’tan farklı olarak otomatik bellek yönetimi sunuyor
- Go’dan farklı olarak pointer veya left value gibi riskli unsurlardan kaçındığını belirtiyor
- Veri odaklı programlama için güvenli özellikler sunuyor
- algebraic data types
- ad-hoc polymorphisms
- pattern match
- Dilin ötesinde bir platform olmayı da hedefliyor ve erken aşamada bile bir araç seti sunuyor
- yüksek hızlı build aracı
- paket yöneticisi
- derleyici
- IDE
- yalnızca tarayıcıyla her yerden erişilebilen, container gerektirmeyen Cloud IDE
- bu Cloud IDE’nin çevrimdışı özellikler de sunduğu ve mevcut Cloud IDE’lerden ayrıştığı belirtiliyor
Fibonacci örneği üzerinden farklar
- Fibonacci örneğinde MoonBit, Go ve Rust ile
fibfonksiyonu uygulanarak karşılaştırılıyor - Benchmark sonuçlarına göre MoonBit; tip çıkarımı, kod boyutu, performans ve kullanılabilirlikte fark gösteriyor
- Yerel tip çıkarımı: MoonBit, yerel
auxfonksiyonunun tipini çıkarıyor - Küçük Wasm boyutu: MoonBit en küçük Wasm çıktısını üretiyor
- Performans: Go’dan daha hızlı ve Rust’a benzer
- Kullanılabilirlik: Go gibi özyinelemeli closure’ları destekliyor; Rust’ta bunun uygulanmasının çok zor olduğu belirtiliyor
- Rust gibi exhaustive pattern match desteği sunuyor ve bunun Go’nun switch case yapısından çok daha güçlü olduğu ifade ediliyor
- Yerel tip çıkarımı: MoonBit, yerel
Mevcut durum ve yol haritası
- Moonbit hızla değişen bir hedef olsa da şu anda kullanılabilecek giriş noktaları sunuyor
- Dil araç zinciri geliştirmek geçmişte birkaç yıldan 10 yıla kadar sürebiliyordu; ancak birikmiş deneyim ve baştan oluşturulan özel ekip sayesinde geliştirmenin sadeleştirildiği belirtiliyor
- 2024’ün 2. çeyreği sonuna kadar beta status seviyesine ulaşılması bekleniyor
- beta status; görece kararlılık, az sayıda hata ve Wasm host ile etkileşim için sağlam bir FFI anlamına geliyor
- Kaynak kodun, beta kalitesine ulaşıldıktan sonra açılması planlanıyor
- Stratejik planda Wasm 2.0 için Wasm GC entegrasyonu ve Wasm 1.0 için kendi GC’si yer alıyor; bunun Wasm proposals ile uyumlu olduğu belirtiliyor
Topluluk kanalları
- Sorular forum üzerinden paylaşılabilir
- Discord’a katılabilir veya Twitter account’u takip edebilirsiniz
1 yorum
Hacker News yorumları
Bu projenin lideriyim. Şu anda çevrimiçi IDE https://try.moonbitlang.com üzerinden hemen deneyebilirsiniz; F5 ile çalıştırılabiliyor.
Dokümantasyon https://github.com/moonbitlang/moonbit-docs adresinde; derleyici beta aşamasına geldiğinde yayımlanacak. Tahmini zaman 2024 2. çeyrek sonu.
Örneğin tip parametrelerinde açık variance gösterimi, alt/üst sınır kısıtları, higher-kinded types, yapısal/nominal alt tiplemeden hangisinin daha merkezde olduğu, algebraic data types ve generalized algebraic data types olup olmadığına da bakmak isterim.
Referans: https://v2.ocaml.org/manual/effects.html, https://docs.hhvm.com/hack/contexts-and-capabilities/introdu..., https://austral-lang.org/linear-types
fnanahtar sözcüğünün gerçekten gerekli olup olmadığını merak ediyorum.funcilefnarasındaki temel farkın ne olduğunu bilmiyorum.funcilefnayrımına gerek var mı, fonksiyon imzasında dönüş değerini gösteren->okuna gerçekten ihtiyaç var mı merak ediyorum.Yeni tip sözdizimi
struct User, ama bu durumda Go'daki gibitype User structbence daha iyi olurdu. Böylecetype AssignUser func(name: String, id: Int) -> Intgibifndeğişkenleri için fonksiyon tipi de oluşturulabilir.:işaretinin lexer'a veya parser'a yardımcı olup olmadığını da merak ediyorum. Fonksiyon imzasındafunc(name: String)yerinefunc(name String)yazılamaz mı; tip bildirimleri demut elems: List[Int]yerinemut elems List[int]olamaz mı diye sormak isterim. Ufak tefek kusur arama gibi ama genel olarak hoşuma gitti.Site Rust ve Go ile karşılaştırıyor ama bana AssemblyScript ile karşılaştırmak daha doğru görünüyor. AssemblyScript de WASM-native ve ekosisteminin hâlâ küçük olması da benzer.
Ancak Moonbit'in aksine TypeScript kullanmış kişilere tanıdık gelen bir dil; bu yüzden AssemblyScript yerine Moonbit'i neden kullanmam gerektiğini merak ediyorum.
AssemblyScript'te pattern matching yok ve çoğunlukla statement'lardan oluşuyor. Moonbit'te algebraic data types var; AssemblyScript'te böyle bir şey var mı pek bilmiyorum. Runtime farkları da daha fazla olabilir ama yalnızca web sitesine bakarak değerlendirmek zor.
Üst seviye fonksiyon tanımları için
func, iç içe fonksiyon tanımları içinfnanahtar sözcüğünü kullanmak iyi değil. Belirli bir bağlamdan bağımsız olarak ikisinden birinde birleşmek gerekir.Bunun gerçekten gerekli ya da iyi bir tasarım olup olmadığı ayrı konu ama çok örneği var.
fn, ad ve tipin atlanabilmesini sağlıyor; kısa anahtar sözcük de fonksiyon tanımının daha kısa olabileceğini gösteriyor.WASM'i hedefleyen modern bir garbage-collected dil çıktığı için heyecan verici. En yakın karşılaştırma muhtemelen Grain olur: https://grain-lang.org/
“Tüm dil araç zincirini geliştirmek eskiden birkaç yıldan 10 yıla kadar sürerdi; ancak birikmiş deneyim ve Moonbit’in en başından beri oluşturduğu özel ve güçlü ekip sayesinde bu süreç sadeleştirildi. Moonbit’in 2024’ün 2. çeyreği sonuna kadar beta durumuna ulaşması bekleniyor; bu, nispeten kararlı, daha az hatalı ve Wasm host’larıyla etkileşime giren sağlam bir FFI’a sahip bir aşama anlamına geliyor. Beta kalitesine ulaştığında kaynak kodu açılacak. Stratejik olarak Wasm önerileriyle uyumlu biçimde, Wasm 2.0 için Wasm GC entegrasyonu ve Wasm 1.0 için kendi GC’miz planlanıyor” deniyor
Bu yüzden şu anda https://github.com/moonbitlang/ boş
Çevrim içi IDE de denenebiliyor: https://try.moonbitlang.com
Buradaki yorumlara bakılırsa Moonbit’te garbage collection var gibi görünüyor. Ama Fibonacci sonucundaki ikili dosya 253 baytsa, muhtemelen GC dahil değildir
Önerilen WASM yerel GC’yi mi kullanıyor, yoksa derleme sistemi burada gerekli olmadığını anlayıp GC’yi çıkaracak kadar akıllı mı, merak ediyorum
Fibonacci örneğinin çıktısında yalnızca
print_i32import’u, bellek ve fonksiyon tanımları ile_startexport’u görünüyor; GC runtime’ının eklenmiş olduğu bir biçim değilGrain akla geliyor. O da Wasm öncelikli bir programlama dili olduğu için karşılaştırmaya Grain’i eklemek iyi olur
https://grain-lang.org/
About Team bağlantısı Çince bir edu.cn sayfasına gidiyor. Üniversite projesi gibi görünüyor ama emin değilim. Join Us sayfası da Çince ve ana sayfadaki örnek baidu.com’dan JavaScript gerektiriyor gibi görünüyor
Go’da Fibonacci böyle uygulanmaz
Deyimsel uygulamaları karşılaştırıp ödünleşimleri ayrıntılı tartışmak yerine birkaç sayı ortaya atmak daha kolay olmuş gibi. Basit bir dil tanıtımı olsa bile insanları yanıltmamak için TCO hakkında bir not eklemek iyi olurdu
switchifadesi olabilir; Go’da bu yavaş olabiliyorYine de Moonbit’i tanıtan bir teaser olarak fena değil
Bu projenin Meta ile bağlantılı olup olmadığını merak ediyorum. Geliştiricisi Hongbo Zhang, Meta’da ReasonML ve Flow gibi açık kaynak programlama dili projelerinde çalışmış; LinkedIn’e göre hâlâ Meta’da çalışıyor