#脚本语言 #脚本 #可嵌入 #语言

mica

一个简单、用户友好的可嵌入脚本语言

8个版本 (破坏性更新)

0.7.1 2023年1月29日
0.7.0 2022年10月31日
0.6.0 2022年10月27日
0.5.0 2022年9月26日
0.1.0 2022年3月13日

#421 in 编程语言

每月39次下载
用于 mica-cli

MIT 协议

500KB
10K SLoC

Mica

Language reference Rust API GitHub crates.io

Mica 是一种简单、人性化的脚本语言,逐个开发特性。其目标是

  • 人性化的 语法,受 Ruby 和 Lua 启发
  • 简单熟悉 的 Rust 开发者功能
  • 易于嵌入 到现有程序中
  • 比大多数现有的 Rust 脚本语言具有更佳的性能
# Hello, Mica!

struct Counter impl
    func new(start, increment) constructor = do
        @value = start
        @increment = increment
    end

    func value() = @value

    func increment() = do
        @value = @value + @increment
    end
end

c = Counter.new(1, 1)
while c.value < 100 do
    print(c.value)
    if c.value.mod(2) == 0 do
        print("even!")
    end
    c.increment()
end

在其当前阶段,它可以嵌入到现有程序中,但可能会出现错误,某些部分可能难以使用。性能也远远达不到我的期望。但我希望您能试一试并分享您的想法!

试试看

要编译 Mica,请使用以下命令之一

# To install the latest stable release:
$ cargo install mica-cli
# To compile the latest revision:
$ git clone https://github.com/mica-lang/mica
$ cd mica
$ cargo build -p mica-cli --release

然后您可以尝试交互式运行,或运行一个文件

# To open the REPL:
$ mica
# To run a file:
$ mica filename.mi

查看 语言参考,以详细了解该语言!

为什么?

Rust生态系统中有许多现有的脚本语言,但没有一个完全符合我的需求。

  • Lua 很棒,但我发现 mluarlua 由于无法开箱绑定大多数函数而非常令人烦恼。您必须创建包装函数,这些函数接受巨大的元组作为参数,这会令 rustfmt 非常困惑,并且非常不方便。
  • Rhai 在功能上很棒,但 AST-walk 解释器非常慢。这是对计算机资源的巨大浪费。
  • Dyon… 存在,但它似乎更像是一个实现语言特性的实验场所,而不是为最终用户设计的语言。
  • Rune 是最有希望的,但即使作者也承认性能目前不是主要目标。
  • 尽管我能发现的似乎这些语言最为突出,但还有许多其他语言。我还排除了奇怪而古怪的语言(包括FP),因为根据当前的处理器架构,它们注定只能作为研究项目存在。此外,命令式语言是最广泛教授的语言。

还有一些未完成的crate,为用C语言编写的更小众的脚本语言提供了绑定,但,嗯,它们尚未完成

我想找到一个会认真对待性能的语言。设计时有明确的目标。甜美的,但不足以让你立即患上糖尿病。而且是我亲手制作的。

设计和实现编程语言一直是我在过去几年里不断挑战自己的一大敌人,虽然取得了不同程度的成功,但我觉得终于到了这个时刻。这一次,我一定要做到。

依赖关系

~1MB
~15K SLoC