14 个版本 (5 个重大更新)
0.6.1 | 2024年5月11日 |
---|---|
0.4.5 | 2023年11月18日 |
0.1.0 | 2023年3月16日 |
#57 in 编程语言
15KB
151 行
3body-lang
三体编程语言,用Rust编写
三体编程语言已实现如 "面壁"、"破壁"、"思想钢印"、"冬眠" 等语法,但仍然是一个概念级的编程语言。
解释器的设计均来自作者 Thorsten Ball 的原书,同时感谢多个优秀开源仓库为本项目带来的灵感启发。
所有内容来自书籍 《用Go编写解释器》
灵感来自 wadackel/rs-monkey-lang + flaneur2020/pua-lang,这些项目也启发了 Monkey-Rust-2021-Edition
⚡️ 安装
$ brew install three-body
⚡️ 快速入门
$ 3body -h
$ 3body
语法概览
变量绑定
给 <identifier> 以 <expression>;
示例:
给 岁月 以 "文明";
给 时光 以 "生命";
常量绑定
思想钢印 <identifier> = <expression>;
示例:
思想钢印 水 = "剧毒的";
前进(+) 运算符
给 自然选择 以 0;
自然选择 前进 4
// > 4
降维(-) 运算符
给 宇宙 以 { "维度": 10 };
宇宙.维度 降维 7
// > 3
布尔值
这是计划的一部分
// > true
主不在乎
// > false
函数定义
法则 (<parameter one>, <parameter two>, ...) { <block statement> };
示例:
给 黑暗森林 以 法则() {
给 基本公理 以 ["生存是文明的第一需要", "文明不断增长和扩张,但宇宙中的物质总量保持不变"];
基本公理
}
黑暗森林()
循环语法
面壁 (<expression>) { <block statement> };
示例:
给 危机纪年 以 3;
给 面壁者 以 ["泰勒", "雷迪亚兹", "希恩斯", "罗辑"];
面壁 (危机纪年 < 400) {
危机纪年 = 危机纪年 + 1;
if (危机纪年 == 8) {
面壁者 = rest(面壁者);
延绪;
}
if (危机纪年 == 23) {
面壁者 = rest(面壁者);
延绪;
}
if (危机纪年 == 205) {
面壁者 = rest(面壁者);
}
if (危机纪年 == 205) {
破壁;
}
}
面壁者
内置函数
打印
广播(<arg1>, <arg2>, ...): void
示例:
给 三体世界坐标 以 "半人马星系";
广播(三体世界坐标);
// > "半人马星系"
睡眠
冬眠(<arg1>): void
示例:
冬眠(1000);
深度相等
没关系的都一样(<arg1>, <arg2>): bool
示例:
没关系的都一样([1, [2, 3], { "4": 5 }], [1, [2, 3], { "4": 5 }]);
// > true
总结
词法 | 3body-lang | 解释 |
---|---|---|
let | 给 | "give" |
= | 以 | "as" |
const | 思想钢印 | "thoughtcontrou" |
+ | 前进 | "go forward" |
- | 降维 | "dimension reduction" |
true | 这是计划的一部分 | "It's part of the plan." |
false | 主不在乎 | "The Lord doesn't care." |
fn | 法则 | "rule" |
while | 面壁 | "face the wall" |
break | 破壁 | "break the wall" |
continue | 延绪 | "continue" |
广播 | "broadcast" | |
sleep | 冬眠 | "hibernation" |
clear | 二向箔清理 | "two-way foil cleaning" |
exit | 毁灭 | "destroy" |
deep-equal | 没关系的都一样 | "It's okay. It's all the same." |
🤗 LLM
三体编程语言可以通过 "智子工程" 加载本地大语言模型进行推理。
能够使用三体编程语言Sophon加载本地大语言模型进行推理,灵感来自 wiki/sophon,并由 rustformers/llm 支持。
Sophon 初始化
智子工程({ "type": <string>, "path": <string>, "prompt": <string> })
属性 | 类型 | 解释 |
---|---|---|
类型 | string | 模型类型 |
path | string | 模型所在路径 |
prompt | string | 提示词 |
推理
let 智子 = fn () { let instance = 智子工程({ "type": "llama", "path": "./Vicuna-13B-chinese.bin", "prompt": "你是三体文明的智子" }); return { "回答": fn (问题) { instance.infer(instance, 问题) } } }();
智子.回答("中国最佳科幻小说是哪个")
// > 推理中...
属性 | 类型 | 解释 |
---|---|---|
model | NativeObject::LLMModel | 模型 |
character | string | 提示词角色 |
infer | BuiltinFunc | 执行推理 |
close | BuiltinFunc | 关闭会话 |
⚛️ "中国最佳科幻小说是哪个" 的示例推理,请见 runs/8582743599
由 huantian2415/vicuna-13b-chinese-4bit-ggml 驱动的模型
开发
$ git clone https://github.com/rustq/3body-lang.git
$ cd 3body-lang
$ cargo run --features="repl"
$ cargo test -p three_body_interpreter
有更多建议和想法 💡
创建问题: issues
Visual Studio Code 扩展
许可证
依赖
~0.2–11MB
~71K SLoC