# moonbit-compiler
**Repository Path**: iloverust/moonbit-compiler
## Basic Information
- **Project Name**: moonbit-compiler
- **Description**: moonbit-compiler
- **Primary Language**: Unknown
- **License**: AGPL-3.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2025-08-17
- **Last Updated**: 2025-08-18
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
MoonBit 编译器
[MoonBit] | [文档] | [概览] | [标准库]
这里是 [MoonBit] 的编译器。MoonBit 是一个用户友好,构建快,产出质量高的编程语言。
[Moonbit]: https://www.moonbitlang.cn
[概览]: https://tour.moonbitlang.com
[文档]: https://docs.moonbitlang.com/zh-cn/
[标准库]: https://github.com/moonbitlang/core
## 路线图
构建一个编程语言是一个漫长的旅程。Rust 和 Go 分别用了 9 年和 5 年到达 1.0 版本。MoonBit 由一个年轻而有干劲的团队开发,正在稳步前进。我们明白,社区的采用和扩展对编程语言来说十分关键,并且我们也致力于打造一个围绕 MoonBit 的积极参与、合作共赢的社区。到目前为止,我们已经开源了[标准库](https://github.com/moonbitlang/core)和绝大多数工具,包括[构建系统](https://github.com/moonbitlang/moon),[词法分析](https://github.com/moonbit-community/moonlex),[markdown 解析](https://github.com/moonbit-community/cmark)等,将来还会有更多项目。开放编译器源代码对于安全来说十分重要。开源 Wasm 后端是重要一步,并且我们计划在将来开源更多组建( moonfmt、moondoc )。
## 从源代码构建
### 开发环境
- OCaml 4.14.2
- [OPAM](https://opam.ocaml.org/)
### 构建
使用下列脚本构建
```
opam switch create 4.14.2
opam install -y dune
dune build -p moonbit-lang
```
## 使用wasm版的MoonBit编译器
首先需要安装nodejs, 然后在本仓库的根目录下执行以下命令
```shell
mkdir -p $HOME/.moon
MOON_VERSION=$(cat ./node/moon_version)
MOON_HOME="$HOME/.moon"
BIN_DIR="$MOON_HOME/bin"
mkdir -p "$BIN_DIR"
git clone https://github.com/moonbitlang/moon
cd moon
git reset --hard "$MOON_VERSION"
cargo build --release
cp target/release/moon "$BIN_DIR"
cp target/release/moonrun "$BIN_DIR"
pushd node
cp moonc.js moonfmt.js mooninfo.js moonc.assets moonfmt.assets mooninfo.assets "$BIN_DIR" -r
mv "$BIN_DIR/moonc.js" "$BIN_DIR/moonc"
mv "$BIN_DIR/moonfmt.js" "$BIN_DIR/moonfmt"
mv "$BIN_DIR/mooninfo.js" "$BIN_DIR/mooninfo"
chmod +x "$BIN_DIR/moonc"
chmod +x "$BIN_DIR/moonfmt"
chmod +x "$BIN_DIR/mooninfo"
cp lib include "$MOON_HOME"
popd
CORE_VERSION=$(cat ./node/core_version)
git clone https://github.com/moonbitlang/core "$MOON_HOME/lib/core"
pushd "$MOON_HOME/lib/core"
git reset --hard "$CORE_VERSION"
moon bundle --target all
popd
```
## 贡献
这个项目正在快速演进,因此还没有准备好接受大量社区贡献。
如果你有兴趣贡献,首先,十分感谢!
请签署 [CLA](https://www.moonbitlang.com/cla/moonc)。
对于小的 Bug 修复,欢迎向[我们的邮箱](mailto:jichuruanjian@idea.edu.cn)发送补丁。对于大的贡献,推荐先在[我们的论坛](https://discuss.moonbitlang.com)进行讨论。
## 许可证
MoonBit 采用 MoonBit Public License,一个放宽的 SSPL (Server Side Public License)。有两个关键的区别:
- 用户可以任意选择许可证来对 MoonBit 编译器构建的产物进行许可。用户可以自由使用他们的 MoonBit 源代码以及生成的产物。
- 允许以非商业目的对编译器的修改。
虽然我们拥抱开放,出于下列两个原因,我们没有选择完全开放的许可证,而是选择了放宽后的 SSPL:
- MoonBit 依然在 beta-preview 的阶段。在这个阶段引入分叉可能影响项目的稳定。我们希望达到一个更成熟、更稳定的状态后接受社区贡献。
- 我们希望避免大型云服务商利用团队的成果进行商业化。
在过去两年中,我们的团队努力改进 MoonBit 和它的工具链,始终守护我们的愿景:开发一个快速、简单、高效的编程语言。通过开源 MoonBit,我们希望可以让我们的用户相信,我们致力于 MoonBit 的增长和创新。我们同时希望我们的用户可以放心,MoonBit 不会采用 [open-core 的模式](https://en.wikipedia.org/wiki/Open-core_model),所有的 MoonBit 用户都会获得最好的开发编译器和 IDE 支持。 MoonBit 团队的愿景是通过云平台服务以及硬件 SDK 等来获得持续增长。
## 编译器优化
MoonBit编译器经过了全面优化,实现了以下几个关键改进:
### 1. 性能瓶颈分析
通过分析编译器的执行流程,我们识别出了主要的性能瓶颈,包括类型检查过程中的重复计算、内存分配过多导致的GC压力,以及单线程编译限制。
### 2. 类型检查器优化
在`typer.ml`中实现了类型名称缓存表,显著减少了类型检查过程中的重复计算,提高了类型推导和检查的效率。
### 3. 并行编译支持
在`moon0_main.ml`中添加了`pcompile`命令行参数,实现了多线程并行编译功能,充分利用多核处理器资源,显著减少了大型项目的编译时间。
### 4. 内存使用优化
创建了`memory_pool.ml`模块,实现了内存池机制,并在`ast_builder.ml`中集成,用于表达式、语句和模式的创建。这大大减少了内存分配和垃圾回收的开销,提高了编译器的内存效率。
### 5. 错误报告系统改进
创建了`error_formatter.ml`模块,实现了彩色错误输出、更详细的错误位置指示和更友好的错误提示信息。在`moon0_main.ml`中添加了`-no-color`和`-error-format`命令行参数,允许用户控制错误输出格式。
通过这些优化,MoonBit编译器在性能、内存使用和用户体验方面都得到了显著提升:
- 编译速度提高:类型检查优化和并行编译支持大幅减少了编译时间
- 内存效率提升:内存池机制减少了内存分配和GC压力
- 错误报告改进:更清晰、更友好的错误信息帮助开发者更快地定位和修复问题
### 6. 中英文混合编程支持
MoonBit编译器支持中英文混合编程,为开发者提供了更灵活的编码体验:
- **标识符支持中文**:变量名、函数名、类名等可以使用中文字符,使代码对中文用户更加友好
- **注释支持中文**:可以使用中文编写注释,提高代码可读性和文档质量
- **字符串支持中文**:字符串字面量可以包含中文字符,便于开发面向中文用户的应用
- **错误信息本地化**:编译器错误和警告信息支持中文显示,帮助中文开发者更快理解问题
这一特性使MoonBit成为一个对中文开发者更加友好的编程语言,特别适合教育环境和中文开发团队使用。同时,它也保持了与英文编程环境的完全兼容性,支持中英文代码的无缝集成。
## 致谢
我们十分感谢社区对我们的支持。
特别感谢 Jane Street 的优秀的 PPX 库,这个仓库使用了一些他们的 [PPX 函数](./src/hash.c)。