#dsl #scripting #language #interpreters #native #blocks #lambda

litto

Rust语言DSL脚本语言解释器构建块,与原生Rust代码交互

1个不稳定版本

0.1.0 2020年3月13日

#1060编程语言

MIT 许可证

53KB
1K SLoC

litto

Documentation build

在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这样的功能不是即插即用的。
    • 多线程。目前不是目标,因为垃圾回收库不支持。

依赖

~100–670KB
~13K SLoC