52个版本

0.0.52 2023年3月5日
0.0.51 2023年3月4日
0.0.50 2023年2月25日
0.0.24 2023年1月28日
0.0.16 2022年12月31日

#87 in #ir

Download history 2/week @ 2024-03-10 310/week @ 2024-03-31 543/week @ 2024-04-28

134 每月下载
用于 l1ir-rust

MIT 许可证

140KB
3.5K SLoC

L1IR: 类型化粘合剂

Crates.IO Documentation

LSTS LSTS 的中间表示 L1 语言。构建用于支持和管理 JIT 增量编译。高效构建和评估代码片段,以便您能够更快地生成更多代码!

(Rust)   1M 2^20 in   4.8860006 seconds
(L1)     1M 2^20 in   3.8207040 seconds
(Python) 1M 2^20 in 130.2404361 seconds
(OCaml)  1M 2^20 in   2.5900000 seconds

note: Rust is compiled without optimizations enabled because it constant folds the entire benchmark

  • 字面字符串
  • 元组
  • 函数

渐进类型(可选)

  • T<A,B,C> 装饰用于命名接受/拒绝
  • 用于字面接受/拒绝的正则表达式
  • 用于结构接受/拒绝的元组/函数
  • 不变属性接受/拒绝

全局 AST 节点

  • 函数定义
  • 程序表达式

表达式 AST 节点

  • 字面值引入
  • 元组引入
  • 变量引用
  • 函数引用
  • 函数应用
  • 模式匹配
  • 程序失败,可能带有消息的立即退出

L1IR 的独特贡献在于它并不假定了解关于字面字符串的所有信息。按定义,字面值表示为 Unicode 字符的混合体,而不是固定长度的位串。这对于像 L1 这样从头开始定义自己的操作符但仍然希望拥有高效运行时的语言来说是有利的。

AST 中没有的东西

  • 条件表达式(使用模式)
  • 结构类型(使用元组)
  • 带标签的枚举类型(使用带标签的元组)
  • 字段/索引访问(使用模式)
  • 多态函数(仅单态定义)
  • 有状态的闭包(使用具有自定义调用约定的元组)
  • let 绑定(使用模式,绑定变量将保留到作用域结束)
  • 跳转或循环(这是一个用于函数式编程的 IR)
  • 整数(使用一元编码 "000"==3)

依赖项

~11–23MB
~320K SLoC