大家好,我是 MoonBit记者陈随易,今天给大家分享MoonBit生态贡献者 mizchi 和他的 js.mbt。
mizchi 是一名日本前端运维雇佣兵,是 Node.js 和 React 方面的专家,同时也是一个自由职业者。
他主要做的事情就是帮助客户解决前端性能问题,解决前端运维方面的疑难杂症。
在不满Rust过于底层,也不满于TypeScript/JavaScript太动态,不稳定的前提下,MoonBit恰到好处地解决了他在编程语言口味和习惯上的一些要求,并由此创建了一个MoonBit到JS的绑定库js.mbt。
下面就分享他对于编程语言的一些思考和抉择,以及js.mbt项目的作用和场景。
对于选择MoonBit,mizchi认为MoonBit解决了大部分他对于TypeScript的不满,在他看来,MoonBit有如下优势或特点:
- Rust 风格的语法 静态类型 函数式语言
- 模式匹配
- 表达式导向 if match for-else 都是表达式
- F# 风格的管道语法
- 显式的副作用控制
- 可作为代数数据类型使用的 enum
- 通过 LSP 进行的补全与重构
- 明确的异常处理
- 异步处理(async)支持
- 内置 JSON 类型 / JSON 模式匹配
- 可选择 wasm/js/native/llvm 的后端
- 内置测试运行器/快照
- 生成代码体积小!
对于他来说,生成的代码体积小是最令人开心的事情,用 Moonbit 写 npm 库也变得现实。
在他看来,2025年的MoonBit与2024年的MoonBit相比,体感上面有了明显的进步:
- 不再存在语言功能不足导致无论如何都写不出来的情况
- LSP 工具链完善,拥有模式匹配和管道功能的语言都是顶尖的。
- 尝试了 OCaml/Fsharp/Haskell,但只有 Moonbit 获得了与 TS(Node/Npm)/Rust(Cargo)同等级工具链的安心感
在AI大行其道的今天,MoonBit这种新兴语言,让他重新找回了编程的乐趣,也继续巩固了古法手工编程的硬实力,而不是被AI慢慢把编程实力瓦解。
js.mbt 就是他写的MoonBit到JavaScript/FFI的绑定,支持多种运行时和平台。
开源地址:https://github.com/mizchi/js.mbt
用法速览如下:
// Create JavaScript objects
let obj = @js.from_entries([
("name", @js.any("Alice")),
("age", @js.any(30))
])
// Get property
let name = obj["name"]
// Set property
obj["age"] = @js.any(31)
// Call method
let result = obj._call("toString", [])
// Type casting
let age: Int = obj["age"].cast()
它在为 MoonBit 构建通往现实 JavaScript 世界的基础通道。
因为 JS 世界里大量能力都是对象式的、动态的、方法调用式的,如果没有这种桥接层,MoonBit 很难舒服地接入 JS 生态。
一门语言如果没有成熟的互操作层,就很难真的进入生产场景,而 js.mbt 在做的事情是:
- 让 MoonBit 能调 JS
- 让 MoonBit 能跑在主流 JS runtime 上
- 让 MoonBit 能用 Web API / Node API
- 让更高层 npm 绑定生态有基础可依赖
这类项目平时不一定最 显眼,但它往往是生态能不能长起来的关键零件。
它可以用来实现:
- 用 MoonBit 写 Node.js 工具、CLI、脚本
- 用 MoonBit 写浏览器端逻辑
- 用 MoonBit 调用 Web 标准 API,做跨运行时开发
- 作为更大 JS 生态绑定的基础层
从2022年到2026年,这是MoonBit发展的第4年,作为一门新兴的编程语言,其他语言4岁还在爬的时候,MoonBit已经实现了相当多的功能,包括了编译器、构建工具、包管理平台、异步编程、在线演练场、AI副驾驶、VSCode语言插件等等。
在官方和社区的推进下,相信今年在MoonBit生态方面,将会迎来井喷式的发展,并发挥出巨大的作用。