2 个不稳定版本

0.4.0 2022 年 12 月 12 日
0.1.0 2021 年 4 月 11 日

6#mun 中排名

Download history 28/week @ 2024-03-11 19/week @ 2024-03-18 36/week @ 2024-03-25 86/week @ 2024-04-01 20/week @ 2024-04-08 17/week @ 2024-04-15 21/week @ 2024-04-22 18/week @ 2024-04-29 23/week @ 2024-05-06 18/week @ 2024-05-13 18/week @ 2024-05-20 19/week @ 2024-05-27 20/week @ 2024-06-03 23/week @ 2024-06-10 19/week @ 2024-06-17 22/week @ 2024-06-24

84 每月下载量
用于 8 个包(5 个直接使用)

MIT/Apache

32KB
319 行代码(不包括注释)

Mun Mun

Build Status Crates.io docs main docs v0.4 MIT/Apache Join us on Discord codecov Lines of Code

Mun 是一种通过迭代赋予创造力的编程语言。

特性

  • 编译时间编译 - Mun 是编译时间编译(AOT),而不是像解释或即时编译(JIT)那样。通过在 AOT 编译期间检测代码中的错误,可以消除一类运行时错误。这允许开发者保持在他们的 IDE 舒适的环境中,而不是需要在 IDE 和目标应用程序之间切换来调试运行时错误。

  • 静态类型 - Mun 在编译时间而不是运行时解析类型,在编写代码时提供即时反馈,并为强大的重构工具打开大门。

  • 一等热重载 - Mun 的每个方面都是考虑到热重载而设计的。热重载是更改运行中应用程序的代码和资源的过程,消除了在更改函数或值时需要启动、停止和重新编译应用程序的需求。

  • 性能 - AOT 编译与静态类型结合确保 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

输出将位于 book 子目录中。要查看书籍,请在您的网页浏览器中打开它。

对于本地开发,请使用 mdbook serve 而不是 mdbook build。这将启动一个本地 web 服务器,端口号为 3000,它将提供书籍并在检测到更改时重新构建内容。

所有上述内容也合并到一个单独的 shell 脚本中,可以通过简单地运行

./ci/build

来测试书籍中的 rust 源代码,运行

mdbook test -L path/to/target/debug/deps

为了使其正常工作,提供的库路径中只能有一个 libmun_runtime-{HASH}.rlib 文件。

许可证

Mun 运行时根据您的选择许可为以下之一

依赖项

~0.8–1.5MB
~31K SLoC