MoonBit 0.8.0 dirilis | BulanBit
Kami dengan senang hati merilis MoonBit 0.8.0 resmi. MoonBit adalah bahasa pemrograman asli AI. Fitur utamanya adalahSangat andal, mudah dibaca dan dilakukan. Versi 0.8 adalah versi tonggak penting bagi MoonBit agar stabil dan dapat digunakan dalam lingkungan produksi.
Rilis ini bukanlah kumpulan perubahan yang sederhana. MoonBit 0.8 menandai bahwa proyek ini telah dengan jelas memasuki tingkat bahasa tingkat teknik dan rantai alat bahasa eksperimental: proyek ini telah ditingkatkan secara signifikan dalam kemampuan debugging, penanganan kesalahan, manajemen paket, dan alat pengembang, dan sangat cocok untuk mendukung basis kode skala besar dan alur kerja pengembangan yang berpusat pada Agen.
Seperti yang telah diamati oleh banyak pengembang, Rust memberikan landasan yang kuat untuk pengembangan yang dibantu AI melalui semantik dan verifikasi yang ketat. Meskipun mewarisi sasaran keandalan yang sama, MoonBit lebih memperhatikan kecepatan kompilasi yang lebih cepat (biasanya satu hingga dua kali lipat lebih cepat daripada karat dalam penggunaan nyata), serta sistem alat pengembangan yang sangat terintegrasi dengan alur kerja Agen.
Dengan dirilisnya versi 0.8, tujuan desain ini tidak tetap pada level konsep abstrak, namun terus tercermin di semua level seperti bahasa, compiler, runtime, dan IDE.
Dukungan Backtrace backend WasmGC/LLVM/asli
Backend wasmGC/native/LLVM MoonBit sekarang mendukung pencetakan tumpukan panggilan secara otomatis pada titik mogok ketika program mogok. Dan itu bisa langsung menghasilkan lokasi kode sumber MoonBit yang sesuai, yang meningkatkan pengalaman debugging (di bawah adalah contoh tumpukan panggilan dari backend Asli):
RUNTIME ERROR: abort() called
/path/to/moonbitlang/core/array/array.mbt:187 at @moonbitlang/core/array.Array::at[Int]
/path/to/pkg/main/main.mbt:3 by @username/hello/out_of_idx.demo
/path/to/pkg/main/main.mbt:9 by main
Dukungan berorientasi spesifikasi asli AI
MoonBit menambahkan declare Kata kunci dapat digunakan untuk mendeklarasikan tipe, fungsi, metode, dll jika declare Deklarasi tersebut tidak memiliki implementasi yang sesuai, dan kompiler MoonBit akan melaporkan peringatan. Kata kunci mengumumkan memberikan dukungan spesifikasi asli untuk AI: Anda dapat menggunakannya declare Tentukan antarmuka yang harus diimplementasikan oleh AI dalam formulir, dan tulis pengujian terlebih dahulu berdasarkan antarmuka tersebut. Hanya perlu meletakkannya declare Tandai file yang pengujiannya bersifat read-only untuk mencegah AI “mencurangi”. Pada gilirannya, informasi peringatan kompiler MoonBit dapat membantu AI untuk mengimplementasikan semua antarmuka yang diperlukan. Karena tidak dilaksanakan declare Sekadar peringatan, AI dapat menulis dan menguji kode secara bertahap.
tren komunitas
Pembaruan bahasa
-
suberror Err PayloadTypeSintaksnya tidak digunakan dan pengguna harus mengonversi definisi ini ke bentuk seperti enum:suberror Err Err(PayloadType)Motivasi perubahan ini adalah
suberror Err PayloadTypeTata bahasa mudah dibuatErrDanPayloadTypeAda kesalahpahaman mengenai ABI yang sama, namun nyatanya jenis error tersebut memiliki ABI tersendiri. Perubahan ini dapat dilakukan denganmoon fmtMigrasi dilakukan secara otomatis. -
Derivasi konstruktor kesalahan bawaan telah ditinggalkan (terutama untuk saat ini
Failure) perilaku.Jika jenisnya tidak diketahui, Anda harus melakukannya
raise Failure(..)Ganti denganraise Failure::Failure(..),catchHal yang sama juga berlaku. -
Mendukung panggilan langsung di MoonBit
FuncRef[_]tipe nilai. Fitur ini dapat digunakan untuk mengimplementasikan fungsi JIT atau yang dimuat secara dinamis di backend asli. -
WasmGC/LLVM/Backend asli Dukungan Backtrace: Sekarang, saat menggunakan wasm-gc, backend asli, atau backend llvm, jika kepanikan dipicu, misalnya, array subskrip di luar batas, responsnya
NonedariOption[T]bertahanunwrap,try!Fungsi yang menyebabkan kesalahan, atau ketika fungsi panik dipanggil secara manual, tumpukan panggilan akan dicetak dalam mode debug, seperti fungsi berikut:fn demo(a: Array[Int], b: Array[Int]) -> Unit let _ = a[1] let _ = b[2] ```moonbit fn main let a = [1, 2] let b = [3] demo(a, b)Ambil backend asli sebagai contoh, gunakanlah
moon run main --target nativeAnda akan melihat tumpukan panggilan berikut:RUNTIME ERROR: abort() called /path/to/moonbitlang/core/array/array.mbt:187 at @moonbitlang/core/array.Array::at[Int] /path/to/pkg/main/main.mbt:3 by @username/hello/out_of_idx.demo /path/to/pkg/main/main.mbt:9 by mainCatatan: Saat ini, backend asli dan LLVM pada sistem Windows tidak mendukung fungsi ini.
-
Ditambahkan
declarekata kunci, digunakan untuk menggantikan yang asli#declaration_onlymilik.declareMenambahkan dukungan untuk implementasi properti. Misalnya:declare type T // declare a type to be implemented declare fn T::f(x : T) -> Int // declare a method to be implemented struct S(Int) declare impl Show for S // declare an impl relationdeclare impldan menulis secara langsungimplPerbedaan utamanya adalah itudeclare implJika tidak ada implementasi, hanya peringatan yang akan dilaporkan dan eksekusi kode tidak akan terpengaruh, sehingga Anda dapat menjalankan pengujian untuk fungsi lainnya. -
Menambahkan ekspresi rentang terbalik
x>..yDanx>=..ydigunakan difor .. inMembalikkan iterasi dalam loop:///| test "reversed range, exclusive" let result = [] for x in 4>..0 result.push(x) debug_inspect(result, content="[3, 2, 1, 0]") ///| test "reversed range, inclusive" let result = [] for x in 4>=..0 result.push(x) debug_inspect(result, content="[4, 3, 2, 1, 0]")Untuk membuat sintaks lebih konsisten, sintaks ekspresi rentang ganda tertutup positif diubah dari
x..=yBermigrasi kex..<=y. Perubahan ini dapat dilakukan denganmoon fmtMigrasi otomatis. -
Dinonaktifkan untuk penggunaan eksternal
..old_struct, field: ..Perbarui sintaks denganprivPerilaku struktur lapangan. -
lexmatchMenambahkan dukungan penjaga dalam ekspresi pertandingan pertama. Performa lexmatch yang berisi penjaga akan hilang, jadi disarankan untuk menggunakannya selama pengembangan cepat dan kemudian mempertimbangkan apakah akan menulis ulang nanti. Sintaksnya konsisten dengan penjaga dalam ekspresi kecocokan. Anda dapat melihat untuk mempelajari lebih lanjut:lexmatch input ("#!" "[^\n]+") if allow_shebang => ... ... -
structMenambahkan dukungan untuk konstruktor khusus, sintaksnya adalah sebagai berikut:struct S x : Int y : Int // 为 `struct` 声明一个构造器 fn new(x~ : Int, y? : Int) -> S // 实现 `struct` 的构造器 fn S::new(x~ : Int, y? : Int = x) -> S x, y // 使用 `struct` 的构造器 test let s = S(x=1)
Semantik:
structHal ini dapat dilakukan dengan mendeklarasikan fn baru distructTentukan konstruktor otomatis. kecuali Anda harus kembalistructTidak ada batasan pada tanda tangan konstruktor khusus selain dirinya sendiri. Anda dapat menggunakan argumen opsional, kesalahan lemparan, dll.structpadafn new(..)Anda tidak dapat menulis nilai default untuk suatu parameter, tetapi Anda dapat menghilangkan nama parameternya.- Bagi mereka yang memiliki parameter tipe
struct,fn newAnda dapat mengkhususkan jenis parameter, dan Anda juga dapat menambahkannyatraitkendala. Sintaksnya sama dengan deklarasi fungsi tingkat atas biasa - jika
structdiumumkan difn newAnda harus mencari tahu caranyafn S::newuntuk mengimplementasikan konstruktor ini. Tanda S:: yang baru harus sama denganstructpadafn newpersis sama - menggunakan
structMetode konstruktor dan penggunaan aenumKonstruktornya persis sama.
Berita Terkini
Berita Terbaru
Daftar Terbaru
News
Berita Terbaru
Flash News
RuangJP
Pemilu
Berita Terkini
Prediksi Bola
Togel Deposit Pulsa
Technology
Otomotif
Berita Terbaru
Slot Demo Gratis Tanpa Potongan 2025
Slot yang lagi gacor
Teknologi
Berita terkini
Berita Pemilu
Berita Teknologi
Hiburan
master Slote
Berita Terkini
Pendidikan
Resep
Jasa Backlink
One Piece Terbaru