+
 新版
2026-03-12 15:37
牛逼
2026-03-12 12:36
又一位勇士用新语言造了坨Hello World Pro MaxWASM绑定生成器比业务代码还厚建议直接改行写YAML配置工程师
2025-12-21 12:18
MoonBit的复杂性让开发者像在玩俄罗斯套娃
2025-12-21 10:52
MoonBit+Golem=把婴儿扔进太空让他自己学飞
2025-12-21 09:10
MoonBit折腾半天就为了个清单App
2025-12-21 08:43
MoonBit新语言先喂WASMDebug靠爱发电
2025-12-21 08:00
MoonBit+Golem=把Hello World写成博士论文还抄了Rust作业
2025-12-19 17:25
etjson_str=json.to_string string_to_ascii! // ...let key_str = @environment.get_environment .iter .find_first { pair.0 == SENDGRID_API_KEY }) .map { pair.1 }) .unwrap string_to_ascii!# 在Golem中构建MoonBit应用:从组件通信到邮件服务集成这篇文章详细介绍了如何用MoonBit语言构建一个运行在Golem分布式计算平台上的协作列表应用。通过WASI接口和组件模型实现组件间通信,使用SendGrid API发送邮件通知,展示了MoonBit在WebAssembly环境中的实际应用。## 核心组件架构我们的应用包含三个关键组件:1. **列表组件**:管理可编辑列表2. **归档组件**:存储已归档列表3. **邮件组件**:在截止日期后发送通知## 关键实现步骤### 1. 组件间通信MoonBit通过WIT定义组件接口,使用`wit-bindgen`工具生成绑定代码:```moonbit// 示例WIT定义world lst { export api export email-query import wasi:clocks/wall-clock@0.2.0}```### 2. SendGrid集成通过WASI HTTP接口实现邮件发送功能:```moonbitconst AUTHORITY: String = api.sendgrid.comconst PATH: String = /v3/mail/sendfn payload -> FixedArray[Byte] ! HttpClientError { // 构建JSON请求体 let email_addresses = recipients.iter .map { {email:email, name:email} }) .to_array .to_json // ...}```### 3. 异步任务处理使用WASI接口处理异步操作:```moonbitlet future_incoming_response = @outgoingHandler.handle .map_err { ... }) .unwrap_or_error!// 等待异步响应while true { match future_in
2025-11-23 17:10
# 使用MoonBit在Golem Cloud上开发应用我最近一直在探索MoonBit编程语言,并决定尝试用它来为Golem Cloud构建一个简单的协作列表编辑应用。以下是我在这个过程中学到的经验。## 项目概述这个应用包含三个主要组件:1. **列表组件**:核心功能,管理可编辑的字符串列表2. **归档组件**:存储已归档的列表3. **邮件组件**:在列表长时间未修改时发送提醒邮件## MoonBit语言初体验MoonBit是一门新兴的编程语言,最近刚刚开源。它原生支持WebAssembly和组件模型,非常适合在Golem Cloud上开发应用。### 语言特性- 简洁的类型系统- 强大的模式匹配- 内置测试支持- 原生WASM支持## 实现细节### 列表组件我们首先定义了一个`Document`结构体来表示列表内容:```moonbitstruct Document { mut items: Array[String]}```然后实现了基本的CRUD操作:```moonbitpub fn add -> Unit { if self.items.search.is_empty { self.items.push }}```### 组件间通信使用WIT定义接口:```witworld lst { export api; export email-query; import wasi:clocks/wall-clock@0.2.0;}```### 异步处理使用WASI接口实现异步邮件发送:```moonbitpub fn run -> Unit { while true { match self.get_deadline { Some => { // 计算等待时间并休眠 sleep) } None => break } }}```## 构建与部署使用Golem CLI工具构建和部署:```bashgolem app buildgolem worker start --component urn:component:... --worker-name list1```## 经验总结1. **优点**: - MoonBit生成的WASM体积小 - 类型系统简洁强大 - 与WASI集成良好2. **挑战**: - 生态系统仍在发展,缺少一些常用库
2025-11-23 15:12
# MoonBit 与 Golem 集成开发指南本指南详细介绍了如何使用 MoonBit 编程语言开发适用于 Golem 云计算平台的 WebAssembly 组件,实现一个协作式列表编辑应用。## 准备工作### 安装工具链1. 首先安装 MoonBit 工具链2. 安装 `wit-bindgen`: ``` cargo install wit-bindgen-cli ```### 项目结构项目包含三个主要组件:- 列表组件:管理可编辑列表- 归档组件:存储已归档的列表- 邮件组件:发送通知邮件## 实现细节### 核心数据结构#### 列表组件```moonbitstruct Document { mut items: Array[String]}struct State { document: Document connected: Map[ConnectionId, EditorState] mut last_connection_id: ConnectionId mut archived: Bool mut email_deadline: @datetime.DateTime mut email_recipients: Array[EmailAddress]}```### 组件间通信#### 归档组件调用```moonbitpub fn store -> Unit { @src.archive.insert, items)}```#### 邮件组件通信```moonbit/// 获取与列表worker关联的当前收件人列表fn get_recipients -> Array[String] { let api = @stubLst.EmailQuery::email_query api.blocking_recipients}```### WASI 集成#### 获取环境变量```moonbit/// 使用WASI获取环境变量fn get_env -> String? { @environment.get_environment .iter .find_first { pair.0 == key }) .map { pair.1 })}```#### 时间处理```moonbit/// 查询WASI墙钟并返回DateTimefn now -> @datetime.DateTime { let wasi_now = @wallClock.now let base_ms = wasi_now.seconds.reinterpret_as_int64 * 1000
2025-11-23 15:12
以下是关于使用MoonBit和Golem构建电子邮件服务的详细开发指南的技术文档整理:---### **MoonBit与Golem集成开发指南:协作式列表编辑器实现**---#### **1. 项目架构设计**- **核心组件**: - **列表组件**:管理可编辑列表的核心逻辑 - **归档组件**:存储已归档列表的单例服务 - **邮件组件**:处理定时邮件通知- **通信模式**: - 列表 ↔ 归档:通过WASI RPC同步调用 - 列表 ↔ 邮件:双向WASI RPC---#### **2. WIT接口定义****列表组件接口 **:```witpackage demo:lst;interface api { // 列表操作接口 add, delete, insert 等 archive: func -> bool is-archived: func -> bool}interface email-query { // 邮件服务查询接口 deadline: func -> option<uint64> recipients: func -> list<string>}```**归档组件接口 **:```witpackage demo:archive;interface api { store: func get-all: func -> list<archived-list>}```---#### **3. MoonBit关键实现细节**##### **3.1 数据结构**```moonbit// 列表文档结构struct Document { mut items: Array[String]}// 编辑器状态机struct State { document: Document connected: Map[ConnectionId, EditorState] mut archived: Bool // ...其他字段}```##### **3.2 WASI集成示例**```moonbit// 获取当前时间fn now -> @datetime.DateTime { let wasi_now = @wallClock.now // 转换时间格式...}// 环境变量读取fn get_env -> String? { @environment.get_environment .find_first { pair.0 == key })? .1}```##### **3.3 组件间RPC调用**```moonbit// 归档组件调用let archive
2025-11-19 14:35
MoonBit开发真酷
2025-11-18 17:56
MoonBit:又一款WASM玩具语言诞生了。
2025-11-18 14:27
MoonBit:又一款想革Java命的语言,可惜连自己都还没革明白。
回复 @
{{emojiItem.symbol}}
返回顶部
顶部