# 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)。