6 个版本 (3 个重大更改)

0.4.1 2024 年 7 月 12 日
0.4.0 2024 年 7 月 12 日
0.3.0 2024 年 6 月 25 日
0.2.1 2023 年 12 月 19 日
0.1.0 2022 年 10 月 5 日

#131 in 编程语言

每月 47 次下载
用于 abi-cafe

MIT/Apache

120KB
2.5K SLoC

KDLScript 🫂💗📜

crates.io docs Rust CI

KDLScript,基于 KDL 的编程语言!

KDLScript ("拥抱脚本") 是一种“虚假”的脚本语言,实际上只是用来声明类型/函数签名,而不将我们绑定到任何特定语言的语义。它存在于 ABI Cafe

基本上,KDLScript 是我们可以根据自己的用例制作得尽可能奇怪的头部格式

struct "Point" {
    x "f32"
    y "f32"
}

enum "ScaleMode" {
    Width
    Height
}

fn "print" {
    inputs { _ "Point"; }
}

fn "scale" {
    inputs { _ "Point"; factor "f32"; scalemode "ScaleMode"; }
    outputs { _ "Point"; }
}

fn "sum" {
    inputs { _ "&[Point; 4]"; }
    outputs { _ "Point"; }
}

最终,语法和概念在很大程度上借鉴了 Rust,原因如下

  • 作者非常熟悉 Rust
  • 这(以及 ABI Cafe)最初是为了在 rustc 中寻找错误而创建的
  • Rust 真的是一个优秀的接口语言!(比 C/C++ 更好)

这个的最终目标是测试语言是否可以通过一次声明类型/接口并在 Rust/C/C++/... 版本中生成程序(调用方和被调用方)来正确地通过 FFI 进行通信。

快速入门

kdl-script 是一个库和 CLI 应用程序。CLI 只是为了好玩。

库的主要入口点是 Compiler::compile_pathCompiler::compile_string,它将生成一个 TypedProgram有关如何使用它的详细信息,请参阅 types 模块文档

CLI 应用程序可以按 kdl-script path/to/program.kdl 调用,以运行 KDLScript 程序。

依赖关系

~14–25MB
~378K SLoC