MoonBit 周報 Vol.41:替換 Array 實現、鍵值對增加模式匹配支持

MoonBit更新

  • 【Breaking Change】Array重命名為FixedArray@vec.Vec重命名為Array
// Before
fn init {let array : @vec.Vec[Int] = [1, 2, 3]
}
// After
fn main {let array : Array[Int] = [1, 2, 3]
}
  • 【語法】鍵值對(如Map HashMap等)增加模式匹配支持
    • 類型需實現op_get方法,其鍵為原生類型(Int Char String Bool等),值為Option[T]
    • 匹配時,鍵需為字面量
    • { "key": pat } 中,模式 pat 類型是 Option[T]None表示 "key"不存在,Some(p)表示 "key"存在,且 p 會被用于匹配這個鍵的值
    • 匹配鍵值對的模式都是開放的:未被匹配的鍵即使存在也會被忽略掉
    • 鍵值對模式會生成優化過的代碼,每個鍵至多被查詢一次
fn main {let map = @map.Map::[ ("a", 1) ]match map {// 當 `map` 包含 "b" 時匹配,// 并把 "b" 在 `map` 中的值綁定到 `y`{ "b": Some(y) } => println(y)// 當 `map` 不包含 "b" 而包含 "a" 時匹配,// 并把 "a" 的值綁定到 `k`{ "b": None, "a": Some(k) } => println(k)// 編譯器提示 { "b": None, "a": None } 的情況未被匹配到}// 輸出:1
}
  • 【語法】允許在已知類型信息的情況下省略newtype構造器
type A Intpub fn op_add(self : A, other : A) -> A {self.0 + other.0 // 省略構造器
}fn main {A::A(0) + 1 |> ignore // 省略 1 的構造器let _c : A = 0 + 1 + 2
}

構建系統更新

  • 配置文件選項統一為kebab-case(近期仍對snake_case保持兼容)
{"is-main": true,"test-import": []
}
  • 【Wasm,Wasm-GC】后端支持在moon.pkg.json中指定導出內存名稱(默認為moonbit.memory)與編譯選項(如-no-block-params以兼容binaryen工具鏈)
{ "link": {"wasm": {"export-memory-name": "custom_memory_name","flags": ["-no-block-params"]},
}
  • moon check 增加 --deny-warn 選項,在有 warning 時視為失敗,返回非0值
  • moon fmt 增加 --check選項,用于檢查當前代碼是否已被格式化

標準庫更新

  • 增加實驗性庫moonbitlang/x,用于開發與測試API不穩定的包。moonbitlang/x中的包穩定后,我們會根據社區的意見,選取重要的包合入moonbitlang/core
    • num time uuid json5 均已移動至moonbitlang/x
  • Bytes API 變更,從Int遷移到了Byte類型:
fn Bytes::op_get(self : Bytes, index : Int) -> Byte
fn Bytes::op_set(self : Bytes, index : Int, value : Byte) -> Unit
fn Bytes::length(self : Bytes) -> Int
fn Bytes::make(len : Int, ~init : Byte = b'\x00') -> Bytes

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/14418.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/14418.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/14418.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

正則表達式(知識總結篇)

本篇文章主要是針對初學者,對正則表達式的理解、作用和應用 正則表達式🌟 一、🍉正則表達式的概述二、🍉正則表達式的語法和使用三、 🍉正則表達式的常用操作符四、🍉re庫主要功能函數 一、🍉正…

遠動通訊屏柜的組成及各裝置的作用

遠動通訊屏柜的組成及各裝置的作用 遠動通訊屏是基于公共電網安全而投入的遠方監控遙控設備;主要由遠動裝置、通訊管理機、交換機、調制解調器、GPS對時裝置、數字通道防雷器、模擬通道防雷器、插線板、空氣開關、屏柜及附件等設備組成、標配尺寸2260*800*600&…

C++設計模式---面向對象原則

面向對象設計原則 原則的目的:高內聚,低耦合 1. 單一職責原則 類的職責單一,對外只提供一種功能,而引起類變化的原因都應該只有一個。 2. 開閉原則 對擴展開放,對修改關閉;增加功能是通過增加代碼來實現的&…

【linux特殊符號】

文章目錄 學習目標一、Linux的特殊符號1.系統變量2.引號 總結 學習目標 1.學會查看系統變量 2.學會各種引號 3.一、Linux的特殊符號 1.系統變量 windows系統變量:echo %path% linux系統變量:echo $PATH2.引號 " " 雙引號,換行…

如何基于springboot構建cas最新版源碼?

環境準備 下載JDK21 https://download.oracle.com/java/21/archive/jdk-21.0.2_windows-x64_bin.zip下載gradle 8.5并配置環境變量 https://gradle.org/next-steps/?version8.5&formatbin下載項目git clone http://gitlab.ruishan.cc/meta/anka-authentication.git 開始…

Maven工具

Maven是apache軟件基金會的一個開源項目 是一個項目構建(項目管理)工具 用來幫助開發者管理項目中的 jar文件,以及 jar文件 之間的依賴關系(在A.jar文件中,用到了B.jar)、完成項目的編譯(.java->.class)、測試、打…

web前端項目已有阿里巴巴圖標基礎上,再次導入阿里巴巴圖標的方法

如果是第一次導入阿里巴巴圖標請參考: vue項目引入阿里云圖標_vue引用阿里云圖標fontclass-CSDN博客 本文主要想講在項目原有阿里巴巴圖標基礎上,再次導入阿里巴巴圖標的解決辦法: 1.iconfont.json對應修改就行,這個簡單一看就明白; 2.iconfont.js主要改動<symbol><…

從零入門激光SLAM(二十)——IESKF代碼實現

大家好呀&#xff0c;我是一個SLAM方向的在讀博士&#xff0c;深知SLAM學習過程一路走來的坎坷&#xff0c;也十分感謝各位大佬的優質文章和源碼。隨著知識的越來越多&#xff0c;越來越細&#xff0c;我準備整理一個自己的激光SLAM學習筆記專欄&#xff0c;從0帶大家快速上手激…

Ansible自動化運維中的file文件模塊模塊應用詳解

作者主頁&#xff1a;點擊&#xff01; Ansible專欄&#xff1a;點擊&#xff01; 創作時間&#xff1a;2024年5月21日15點21分 &#x1f4af;趣站推薦&#x1f4af; 前些天發現了一個巨牛的&#x1f916;人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xf…

【Java筆記】第8章:面向對象的三大特性(封裝、繼承、多態)

前言1. 三大特性概述2. 封裝3. 繼承4. 多態結語 #include<GUIQU.h> int main { 上期回顧:【Java筆記】第7章&#xff1a;面向對象 個人主頁&#xff1a;C_GUIQU 歸屬專欄&#xff1a;【Java學習】 return 一鍵三連; } 前言 各位小伙伴大家好&#xff01;上期小編給大家…

后端技術常用網站

技術說明官網SpringBootMVC框架https://spring.io/projects/spring-bootSpringCloud微服務框架https://spring.io/projects/spring-cloud/MyBatis-PlusORM框架https://mp.baomidou.com/Swagger-UI文檔生產工具https://github.com/swagger-api/swagger-uiKibana分析和可視化平臺…

SO_REUSEPORT 之 TCP負載均衡驗證

首先啟動兩個tcp server&#xff0c; 代碼里開啟 SO_REUSEPORT [my_testlocalhost test]$ ./tcp_server_reuseport & [1] 1864 [my_testlocalhost test]$ Server listening on port 8888[my_testlocalhost test]$ ./tcp_server_reuseport & [2] 1865 [my_testlocalh…

網絡工程師備考1——基礎學習

認識設備 1 交換機 一、什么是交換機&#xff1f; 實現不同電腦之間數據的轉發 換機是一種用于電(光)信號轉發的網絡設備。 它可以為接入交換機的任意兩個網絡節點提供獨享的電信號通路。最常見的交換機是以太網交換機。交換機工作于OSI參考模型的第二層&#xff0c;即數據…

使用 Supabase 的 Realtime + Storage 非常方便呢

文章目錄 &#xff08;一&#xff09;Supabase&#xff08;二&#xff09;Realtime&#xff08;消息&#xff09;&#xff08;2.1&#xff09;Python 消息訂閱&#xff08;2.2&#xff09;JavaScript 消息訂閱 &#xff08;三&#xff09;Storage&#xff08;存儲&#xff09;&…

Linux:Ubuntu修改root密碼

Linux&#xff1a;Ubuntu修改root密碼 修改默認grub配置文件 rootshanxin:~# vim /etc/default/grub# 主要修改內容如下&#xff1a;GRUB_DEFAULT0 #GRUB_TIMEOUT_STYLEhidden 注釋這一行 GRUB_TIMEOUT5 # 將這一行的時間改為5秒進行開啟啟動的grub文件的復寫 rootshanxin:~…

芯課堂 | UI Creator 物理鍵盤移植指南

LVGL提供輸入設備的種類一共有5種&#xff0c;分別是&#xff1a;touchpad&#xff08;觸摸板&#xff09;、mouse&#xff08;鼠標&#xff09;、keypad&#xff08;鍵盤&#xff09;、encoder&#xff08;編碼器&#xff09;、button&#xff08;外部按鍵&#xff09;。而基于…

Tron 節點 性能壓測

文章目錄 一、代碼說明1.1 主要功能1.2 代碼示例1.3 代碼解釋1.4 執行流程 二、結果分析三、參數解釋3.1 numWorkers 和 numRequests 說明3.2 使用場景 四、注意事項 最近搭建了一個TRON節點&#xff0c;同事不相信我的自建節點比官方更靠譜&#xff0c;咱們給他使用golang寫一…

如何成為一個專業的AI產品經理?

可以找專業的老師帶。 可以找專業的內容學。 可以多遇挫折并快速學習&#xff0c;屢敗屢戰&#xff0c;筆者本人從業AI十年有余&#xff0c;吃了不少苦&#xff0c;有過很多或成功或失敗的經歷。 成為一個專業的AI產品經理需要一系列專業知識和技能的積累&#xff0c;以及在…

axios - 簡 單 的 請 求 模 板

import {message } from ant-design-vue import axios from axios import {useUserStore } from @/store/modules/user import router from @/routerconst instance = axios.create({baseURL: http://192.168.110.171:5201,timeout: 5000, })* 請求攔截器 insta

切換Ubuntu開機的主題

要將Ubuntu系統的啟動畫面&#xff08;即開機時的顯示界面&#xff09;從Lubuntu切換回原生的Ubuntu界面&#xff0c;可以按照以下步驟操作&#xff1a; 1. 安裝原生Ubuntu的plymouth主題 首先&#xff0c;確保你已經安裝了原生Ubuntu的plymouth主題。打開終端并運行以下命令…