1 个不稳定版本

使用旧的 Rust 2015

0.2.0 2017 年 6 月 7 日

#16 in #forth


3 个crate中使用了 (直接使用了2个)

MPL-2.0 许可证

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