3 个版本 (破坏性更新)
0.4.0 | 2022 年 12 月 12 日 |
---|---|
0.3.0 | 2021 年 4 月 11 日 |
0.2.0 | 2020 年 5 月 16 日 |
#3 在 #mun
153 每月下载量
用于 14 个 库(直接使用 7 个)
79KB
1.5K SLoC
Mun 是一种通过迭代赋予创造力的编程语言。
特性
-
预编译 - Mun 采用预编译(AOT),与解释或即时编译(JIT)相对。通过在预编译过程中检测代码中的错误,可以消除一类运行时错误。这允许开发者在 IDE 的舒适环境中停留,而不是在 IDE 和目标应用程序之间切换以调试运行时错误。
-
静态类型 - Mun 在编译时而非运行时解析类型,在编写代码时提供即时反馈,并为强大的重构工具打开了大门。
-
一级热重载 - Mun 的每个方面都是针对热重载设计的。热重载是更改运行中的应用程序的代码和资源的过程,无需在更改函数或值时启动、停止和重新编译应用程序。
-
性能 - 预编译结合静态类型确保 Mun 编译成可以在任何目标平台上原生执行的机器代码。使用 LLVM 进行编译和优化,保证最佳性能。热重载会引入轻微的运行时开销,但可以在生产构建中禁用,以确保最佳运行时性能。
-
交叉编译 - Mun 编译器能够从任何支持的编译器平台编译到所有支持的目标平台。
-
强大的 IDE 集成 - Mun 语言和编译器框架旨在支持源代码查询,允许进行强大的 IDE 集成,例如代码补全和重构工具。
示例
fn fibonacci(n: i32) -> i32 {
if n <= 1 {
n
} else {
fibonacci(n - 1) + fibonacci(n - 2)
}
}
// Comments: functions marked as `pub` can be called outside the module
pub fn main() {
// Native support for bool, f32, f64, i8, u8, u128, i128, usize, isize, etc
let is_true = true;
let var = 0.5;
// Type annotations are not required when a variable's type can be deduced
let n = 3;
let result = fibonacci(n);
// Adding a suffix to a literal restricts its type
let lit = 15u128;
let foo = record();
let bar = tuple();
let baz = on_heap();
}
// Both record structs and tuple structs are supported
struct Record {
n: i32,
}
// Struct definitions include whether they are allocated by a garbage collector
// (`gc`) and passed by reference, or passed by `value`. By default, a struct
// is garbage collected.
struct(value) Tuple(f32, f32);
struct(gc) GC(i32);
// The order of function definitions doesn't matter
fn record() -> Record {
// Mun allows implicit returns
Record { n: 7 }
}
fn tuple() -> Tuple {
// Mun allows explicit returns
return Tuple(3.14, -6.28);
}
fn on_heap() -> GC {
GC(0)
}
文档
《Mun 编程语言书》托管在 netlify。
预构建的二进制文件
[注意] 我们不提供里程碑版本的支援
[注意] 当前所有二进制文件均未签名
下载 macOS、Linux 和 Windows(仅限 64 位)的 里程碑版本 预构建二进制文件。
从源代码构建
请确保您的机器上已安装以下依赖项
克隆源代码,包括所有子模块
git clone https://github.com/mun-lang/mun.git
git submodule update --init --recursive
使用 cargo
构建发布版本
cargo build --release
语言服务器
Mun 支持lsp协议,使用以下命令启动可执行文件
mun language-server
或者,您可以安装特定编辑器的扩展。
VS code
在 Visual Studio Code 中运行。使用以下扩展:VS code 扩展。
Vim/Neovim
使用语言服务器插件(或neovim内置的lsp支持),例如使用 coc.nvim。
将以下配置粘贴到您的 :CocConfig
中,将 command
替换为mun可执行文件的正确路径。
"languageserver": {
"mun": {
"command": "<path_to_mun>",
"rootPatterns": ["mun.toml"],
"trace.server": "verbose",
"args": ["language-server"],
"filetypes": ["mun"]
}
}
注意,"trace.server": "verbose"
是可选的,有助于语言服务器调试。
构建文档
构建书籍需要 mdBook,理想版本为 0.3.x。要安装它,请运行
$ cargo install mdbook --vers [version-num]
Mun 书籍使用 自定义版本的 Highlight.js 来启用 Mun 代码的高亮显示。mdbook 在 theme/
文件夹中需要 Highlight.js 的构建版本,但它并未与源代码一起分发。相反,可以通过调用构建脚本来构建。
cd book
./ci/build-highlight-js
每次您更改自定义版本的 highlight.js 时,都必须调用上述脚本以确保您本地使用的是最新版本。
生成自定义压缩的 Highlight.js 后,要构建书籍,请输入
$ mdbook build
输出将在子目录中。要查看书籍,请将其在您的网页浏览器中打开。
对于本地开发,请使用 mdbook serve
代替 mdbook build
。这将启动一个本地web服务器,端口为 3000
,该服务器提供书籍并在检测到更改时重新构建内容。
所有上述内容也合并到一个单独的shell脚本中,只需运行即可调用
./ci/build
要测试书籍中的 rust
源代码,请运行
mdbook test -L path/to/target/debug/deps
为此要工作,在提供的库路径中只能有一个 libmun_runtime-{HASH}.rlib
文件。
许可协议
Mun 运行时许可协议为以下之一
- Apache License,版本 2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可协议 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
依赖项
~0.9–6.5MB
~25K SLoC