1个不稳定版本
0.1.0 | 2020年3月13日 |
---|
#1060 在 编程语言
53KB
1K SLoC
litto
在Rust中实现解释器的轻量级构建块。理想用于DSL用例。
示例语言
- tinylang:一种使用S-exp语法的微小语言。它基本上只实现了
lambda
,甚至没有像bools、ints或lists这样的原始类型。注意这些类型可以使用lambda
构建。 - minilang:在tinylang的基础上扩展了更丰富的标准库和类型。运行
cd examples/minilang-repl; cargo run
在REPL中尝试它。
目标
- 简单。代码应该简单易懂。
- 强大。使用简单的概念表达强大的功能。例如,lambda可以轻松实现,并且非常强大。
- 易于使用.
- Rust和DSL之间共享数据和函数既容易又安全。
- DSL可以轻松选择一个垃圾回收器来简化内存管理。
- 灵活。诸如语法、AST内部表示、标准库函数、类型、如何解析名称、什么是函数以及如何调用函数等问题都是可定制的。
- Rust。这个库是用Rust编写的,解决了Rust的问题。不打算通过FFI在其它语言中使用。
非目标
- 性能。在简单性的约束下,性能是尽可能好的。实际上,性能关键代码应该在原生Rust中。
- 功能。功能完善不是目标,尤其是当它与简单性冲突时。
- 无栈。Rust语言在调用函数时默认使用原生栈。因此,在Rust中无栈不是简单的。这意味着像协程和
call/cc
这样的功能不是即插即用的。 - 多线程。目前不是目标,因为垃圾回收库不支持。
- 无栈。Rust语言在调用函数时默认使用原生栈。因此,在Rust中无栈不是简单的。这意味着像协程和
依赖
~100–670KB
~13K SLoC