- Di tengah makin pentingnya WebAssembly dalam komputasi cloud dan edge, Moonbit bertujuan menjadi bahasa Wasm-first yang memudahkan pemanfaatan efisiensi, keamanan, dan ukuran kecil Wasm
- Rust dan C/C++ membebani dengan tingkat kesulitan belajar dan waktu kompilasi yang panjang, sementara Go memiliki keterbatasan berupa kode yang dihasilkan besar dan tidak efisien; Moonbit menargetkan celah ini
- Fokus desainnya adalah build dan eksekusi yang cepat, output Wasm yang kecil, serta kemudahan penggunaan, mencakup optimasi beberapa representasi perantara serta analisis semantik paralel per fungsi dan reanalisis inkremental
- Pada contoh Fibonacci, ditekankan inferensi tipe fungsi lokal, output Wasm terkecil, performa lebih cepat daripada Go dan mirip Rust, serta dukungan recursive closure dan exhaustive pattern match
- Saat ini menyediakan IDE online, alat CLI, dokumentasi, dan ekstensi VSCode, dengan target mencapai beta status pada akhir kuartal 2 2024 serta membuka kode sumber setelah mencapai kualitas beta
Tujuan bahasa yang mengutamakan WebAssembly
- WebAssembly adalah arsitektur set instruksi lintas platform, dan karena karakteristiknya yang efisien, aman, berukuran kecil, serta merupakan standar terbuka, perannya makin penting dalam komputasi cloud dan edge
- Pilihan yang ada dianggap belum sepenuhnya memanfaatkan potensi Wasm
- Bahasa Wasm level rendah seperti Rust dan C/C++ sulit dipelajari, dan waktu kompilasi yang panjang dapat memperlambat kecepatan pengembangan
- Bahasa level tinggi seperti Go dianggap menghasilkan kode yang tidak efisien dan besar, sehingga sulit memanfaatkan keunggulan Wasm berupa kecepatan dan ukuran kecil
- Moonbit mengarah pada bahasa Wasm-first yang cepat dibuild dan dijalankan, menghasilkan output Wasm kecil, serta mudah dipelajari seperti Go
Desain bahasa dan tim
- Moonbit dipimpin oleh Hongbo Zhang dan tim dengan pengalaman lebih dari 10 tahun dalam desain dan pengembangan bahasa
- Zhang telah berkontribusi pada OCaml, ReScript, dan Flow, serta menjabat sebagai chief architect untuk compiler cepat, standard library, dan build system pada toolchain ReScript
- Desain bahasanya dipengaruhi oleh Go dan Rust
- Mengadopsi kesederhanaan Go, terutama sistem paket
- Mencakup ekspresivitas Rust, pattern matching, type inference, generics, dan ad-hoc polymorphism mirip trait
- Sistem tipe yang fault tolerant dirancang dengan mempertimbangkan kecepatan, kemungkinan paralelisasi, dan pemeriksaan inkremental, dengan dukungan IDE sebagai tujuan utama
Build dan eksekusi cepat
- Moonbit bertujuan menjadi bahasa yang cepat di seluruh stack, mencakup performa pengembangan dan performa runtime
- Menggunakan representasi perantara (IR) multilevel untuk optimasi seluruh program
- Mengambil pendekatan meningkatkan layout memori untuk mengurangi cache miss
- Memberikan konteks yang lebih baik untuk analisis data flow dan control flow
- Dianggap memungkinkan optimasi efektif dengan memahami struktur program secara lebih menyeluruh daripada sebagian besar struktur link-time optimization yang ada
- Dapat menemukan dan menghapus redundansi tingkat tinggi yang tidak terlihat pada level rendah
- Untuk performa build cepat yang penting bagi fitur IDE, Moonbit memungkinkan analisis semantik paralel per fungsi
- Berbeda dari ReScript dan Rust, function-level parallel semantic analysis dimungkinkan
- Dengan granularitas yang sama, reanalisis inkremental dilakukan sehingga diklaim dapat menangani monorepo berskala besar dan memberikan waktu respons dalam hitungan milidetik
Output Wasm kecil
- Moonbit dirancang dengan mempertimbangkan dead code elimination yang efektif
- Fitur bahasa yang menghambat analisis ini dikecualikan, dan standard library juga disusun dalam struktur yang memudahkan penghapusan kode mati
- Melalui optimasi seluruh program, Moonbit berupaya mengurangi ukuran kode akhir secara signifikan
- Pengurangan ukuran kode dianggap berujung pada peningkatan keamanan dan berkurangnya kerentanan terhadap serangan
- Diklaim menjamin startup cepat dalam lingkungan komputasi serverless
Fitur dan alat untuk kemudahan penggunaan
- Moonbit menyediakan manajemen memori otomatis, yang membedakannya dari Rust
- Berbeda dari Go, Moonbit diklaim menghindari elemen berbahaya seperti pointer atau left value
- Menyediakan fitur aman untuk pemrograman berorientasi data
- algebraic data types
- ad-hoc polymorphisms
- pattern match
- Di luar bahasa, Moonbit juga bertujuan berperan sebagai platform, dan bahkan pada tahap awal sudah menyediakan kumpulan alat
- Alat build berkecepatan tinggi
- Package manager
- Compiler
- IDE
- Cloud IDE tanpa container yang dapat diakses dari mana saja hanya dengan browser
- Cloud IDE tersebut juga menyediakan fitur offline dan diklaim berbeda dari Cloud IDE yang ada
Perbedaan melalui contoh Fibonacci
- Contoh Fibonacci membandingkan implementasi fungsi
fibdalam tiga bahasa: MoonBit, Go, dan Rust - Berdasarkan benchmark, MoonBit menunjukkan perbedaan dalam type inference, ukuran kode, performa, dan kemudahan penggunaan
- Inferensi tipe lokal: MoonBit menginfer tipe fungsi lokal
aux - Ukuran Wasm kecil: MoonBit menghasilkan output Wasm paling kecil
- Performa: Lebih cepat daripada Go dan mirip Rust
- Kemudahan penggunaan: Mendukung recursive closure seperti Go, yang diklaim sangat sulit diimplementasikan di Rust
- Mendukung exhaustive pattern match seperti Rust, dan diklaim jauh lebih kuat daripada switch case milik Go
- Inferensi tipe lokal: MoonBit menginfer tipe fungsi lokal
Status saat ini dan roadmap
- Moonbit adalah target yang berubah cepat, tetapi saat ini menyediakan entry point yang dapat digunakan
- Pengembangan toolchain bahasa sebelumnya membutuhkan waktu bertahun-tahun hingga 10 tahun, tetapi diklaim telah disederhanakan berkat pengalaman yang terakumulasi dan tim khusus yang dibentuk sejak awal
- Diperkirakan mencapai beta status pada akhir kuartal 2 2024
- beta status berarti stabilitas relatif, bug yang lebih sedikit, dan FFI yang solid untuk berinteraksi dengan Wasm host
- Kode sumber direncanakan dibuka setelah mencapai kualitas beta
- Rencana strategis mencakup integrasi Wasm GC untuk Wasm 2.0 dan GC mandiri untuk Wasm 1.0, serta diklaim diselaraskan dengan Wasm proposals
Kanal komunitas
- Pertanyaan dapat diajukan di forum
- Dapat bergabung dengan Discord atau mengikuti Twitter account
1 komentar
Pendapat Hacker News
Saya lead proyek ini. Saat ini bisa langsung dicoba di IDE online https://try.moonbitlang.com, dan bisa dijalankan dengan F5
Dokumentasinya ada di https://github.com/moonbitlang/moonbit-docs, dan kompilernya akan dibuka ke publik setelah mencapai status beta. Perkiraan waktunya akhir kuartal 2 2024
Misalnya saya ingin mengecek apakah ada anotasi varians eksplisit untuk parameter tipe, constraint batas bawah/atas, higher-kinded types, apakah structural atau nominal subtyping yang lebih utama, serta apakah ada algebraic data types dan generalized algebraic data types
Referensi: https://v2.ocaml.org/manual/effects.html, https://docs.hhvm.com/hack/contexts-and-capabilities/introdu..., https://austral-lang.org/linear-types
fnbenar-benar diperlukan. Saya tidak tahu apa perbedaan mendasar antarafuncdanfnfuncdanfn, dan apakah tanda panah->untuk menunjukkan nilai balik dalam signature fungsi benar-benar diperlukanSintaks tipe baru adalah
struct User, tetapi untuk kasus ini saya rasatype User structseperti Go lebih baik. Dengan begitu, tipe fungsi untuk variabelfnjuga bisa dibuat sepertitype AssignUser func(name: String, id: Int) -> IntSaya juga penasaran apakah
:membantu lexer atau parser. Saya ingin bertanya apakah dalam signature fungsi bisa ditulisfunc(name String)alih-alihfunc(name: String), dan apakah deklarasi tipe bisa menjadimut elems List[int]alih-alihmut elems: List[Int]. Ini memang nitpick kecil, tapi secara keseluruhan saya menyukainyaSitusnya membandingkan dengan Rust dan Go, tetapi bagi saya perbandingan dengan AssemblyScript terasa lebih tepat. AssemblyScript juga native WASM, dan sama-sama ekosistemnya masih kecil
Namun berbeda dengan Moonbit, bahasanya familiar bagi orang yang pernah memakai TypeScript, jadi saya penasaran alasan untuk memakai Moonbit alih-alih AssemblyScript
AssemblyScript tidak punya pattern matching dan terutama tersusun dari statement. Moonbit punya algebraic data types, sedangkan saya tidak yakin AssemblyScript punya hal semacam itu. Mungkin ada lebih banyak perbedaan runtime juga, tetapi sulit menilainya hanya dari situs web
Pemakaian keyword
funcuntuk definisi fungsi top-level danfnuntuk definisi fungsi bersarang itu kurang bagus. Seharusnya diseragamkan ke salah satu, terlepas dari konteks tertentuApakah itu benar-benar perlu atau desain yang baik adalah persoalan lain, tetapi presedennya banyak
fnmemungkinkan nama dan tipe dihilangkan, dan keyword yang pendek menunjukkan bahwa definisi fungsi juga bisa menjadi lebih singkatSaya senang melihat ada bahasa garbage-collected modern yang menargetkan WASM. Pembanding terdekatnya mungkin Grain: https://grain-lang.org/
“Pengembangan keseluruhan toolchain bahasa dulu memakan waktu bertahun-tahun hingga 10 tahun, tetapi kini dipermudah berkat pengalaman yang telah terkumpul dan tim khusus yang unggul yang dibentuk sejak awal Moonbit. Moonbit diharapkan mencapai status beta pada akhir kuartal II 2024, yaitu tahap yang relatif stabil, minim bug, dan memiliki FFI yang solid untuk berinteraksi dengan host Wasm. Setelah mencapai kualitas beta, source code akan dibuka. Secara strategis, sesuai dengan proposal Wasm, kami merencanakan integrasi Wasm GC untuk Wasm 2.0 dan GC buatan sendiri untuk Wasm 1.0”
Jadi saat ini https://github.com/moonbitlang/ masih kosong
Online IDE juga bisa dicoba: https://try.moonbitlang.com
Melihat komentar di sini, Moonbit tampaknya memiliki garbage collection. Namun jika biner hasil Fibonacci hanya 253 byte, kemungkinan GC tidak disertakan
Saya penasaran apakah mereka memakai WASM native GC yang sedang diusulkan, atau build system-nya cukup pintar untuk menyimpulkan bahwa GC tidak diperlukan di sini lalu menghapusnya
Pada output contoh Fibonacci, yang terlihat hanya impor
print_i32, definisi memori dan fungsi, serta ekspor_start; tidak tampak seperti ada runtime GC yang ditempelkanMengingatkan pada Grain. Karena ini juga bahasa pemrograman yang mengutamakan Wasm, sepertinya bagus jika Grain ditambahkan sebagai pembanding
https://grain-lang.org/
Tautan About Team mengarah ke halaman edu.cn berbahasa Tionghoa. Kelihatannya seperti proyek universitas, tetapi saya tidak yakin. Halaman Join Us juga berbahasa Tionghoa, dan contoh di homepage tampaknya membutuhkan JavaScript dari baidu.com
Di Go, Fibonacci tidak diimplementasikan seperti itu
Tampaknya lebih mudah melempar beberapa angka daripada membandingkan implementasi yang idiomatis dan membahas trade-off secara cermat. Meski hanya teaser bahasa yang sederhana, agar tidak menyesatkan orang, sebaiknya ada catatan tentang TCO
switch, dan di Go hal itu bisa lambatMeski begitu, sebagai teaser untuk memperkenalkan Moonbit, ini cukup baik
Saya penasaran apakah proyek ini terkait dengan Meta. Pembuatnya, Hongbo Zhang, pernah mengerjakan proyek bahasa pemrograman open source seperti ReasonML dan Flow di Meta, dan menurut LinkedIn ia masih bekerja di Meta