1 个不稳定版本
使用旧的 Rust 2015
0.2.0 | 2017 年 6 月 7 日 |
---|
#16 in #forth
57KB
1.5K SLoC
PumpkinScript
PumpkinScript 是一种受 Forth 启发的最小化、基于栈的连加式语言。
它在 PumpkinDB 中用于操作低级数据库“虚拟机”——用于操作、记录和检索数据。
这是 PumpkinDB 操作灵活性的终极门户,以及它可以支持哪些格式等。
理由
为什么这很重要?
在 PumpkinDB 的先前版本(或更准确地说,灵感来源)中,建立了更加严格的结构、格式和编码作为使用的前提条件,这无端地限制了该技术的适用性和吸引力。例如,必须接受 ELF、基于 UUID 的事件标识和基于 HLC 的时间戳。
因此,在 PumpkinDB 中取消这类限制被认为是很重要的。但如果我们不知道这些格式是什么,我们如何支持所有格式呢?
如果有一种方法可以以紧凑、明确和可组合的形式描述数据应该如何处理,例如,用于索引——会怎样?或者甚至用于记录数据本身?嗯,这就是使用类似 Forth 的脚本的想法产生的地方。
我们不再需要为与 PumpkinDB 通信设计自定义协议,通信协议已经变成了一个脚本执行器的管道。
例如,可以使用以下方式记录命令/事件集(以下不是实际脚本,而是伪代码)
<command id> <command payload> JOURNAL <event id> <event payload> JOURNAL
这为我们提供了巨大的扩展和灵活性能力。以下是一些例子
- 低级命令式查询(作为声明式查询的基础)
- 索引过滤器
- 订阅过滤器
特性
- 二进制和文本(可读和可写)形式
- 没有类型,只有字节数组
- 动态代码评估
- 零拷贝解释(在可行的情况下;目前不适用于最重要的部分,因为 LMDB 的事务模型使我们无法在事务范围之外携带这些引用)
依赖
~2.5MB
~48K SLoC