MoonBit 0.8.0 dirilis | BulanBit
6 mins read

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

  1. suberror Err PayloadType Sintaksnya tidak digunakan dan pengguna harus mengonversi definisi ini ke bentuk seperti enum:

    suberror Err 
      Err(PayloadType)
    

    Motivasi perubahan ini adalah suberror Err PayloadType Tata bahasa mudah dibuat Err Dan PayloadType Ada kesalahpahaman mengenai ABI yang sama, namun nyatanya jenis error tersebut memiliki ABI tersendiri. Perubahan ini dapat dilakukan dengan moon fmt Migrasi dilakukan secara otomatis.

  2. Derivasi konstruktor kesalahan bawaan telah ditinggalkan (terutama untuk saat ini Failure) perilaku.

    Jika jenisnya tidak diketahui, Anda harus melakukannya raise Failure(..) Ganti dengan raise Failure::Failure(..),catch Hal yang sama juga berlaku.

  3. Mendukung panggilan langsung di MoonBit FuncRef[_] tipe nilai. Fitur ini dapat digunakan untuk mengimplementasikan fungsi JIT atau yang dimuat secara dinamis di backend asli.

  4. 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, responsnyaNonedariOption[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, gunakanlahmoon 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 main

    Catatan: Saat ini, backend asli dan LLVM pada sistem Windows tidak mendukung fungsi ini.

  5. Ditambahkan declare kata kunci, digunakan untuk menggantikan yang asli #declaration_only milik.declare Menambahkan 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 relation

    declare impl dan menulis secara langsung impl Perbedaan utamanya adalah itu declare impl Jika tidak ada implementasi, hanya peringatan yang akan dilaporkan dan eksekusi kode tidak akan terpengaruh, sehingga Anda dapat menjalankan pengujian untuk fungsi lainnya.

  6. Menambahkan ekspresi rentang terbalik x>..y Dan x>=..ydigunakan di for .. in Membalikkan 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..=y Bermigrasi ke x..<=y. Perubahan ini dapat dilakukan dengan moon fmt Migrasi otomatis.

  7. Dinonaktifkan untuk penggunaan eksternal ..old_struct, field: .. Perbarui sintaks dengan priv Perilaku struktur lapangan.

  8. lexmatch Menambahkan 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 => ...
      ...
    
  9. struct Menambahkan 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:

  • struct Hal ini dapat dilakukan dengan mendeklarasikan fn baru di struct Tentukan konstruktor otomatis. kecuali Anda harus kembali struct Tidak ada batasan pada tanda tangan konstruktor khusus selain dirinya sendiri. Anda dapat menggunakan argumen opsional, kesalahan lemparan, dll.struct pada fn new(..) Anda tidak dapat menulis nilai default untuk suatu parameter, tetapi Anda dapat menghilangkan nama parameternya.
  • Bagi mereka yang memiliki parameter tipe struct,fn new Anda dapat mengkhususkan jenis parameter, dan Anda juga dapat menambahkannya trait kendala. Sintaksnya sama dengan deklarasi fungsi tingkat atas biasa
  • jika struct diumumkan di fn newAnda harus mencari tahu caranya fn S::new untuk mengimplementasikan konstruktor ini. Tanda S:: yang baru harus sama dengan struct pada fn new persis sama
  • menggunakan struct Metode konstruktor dan penggunaan a enum Konstruktornya 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