1 个不稳定版本
0.1.0 | 2020年3月9日 |
---|
#559 in 编程语言
15KB
391 行
OxyScript
一种轻微氧化的脚本语言
! 这是一个非常重的 WIP。目前无法正常工作 !
目前正在从堆栈虚拟机切换到寄存器虚拟机。目前不可用
这是什么?
OxyScript 是我自己实现的一个小型脚本语言
作为一个学习练习,并且因为我想要一个我可以自己控制所有
设计变量的语言。
为什么?
没有真正的原因,除了以下这些
- 作为一个学习练习
- 使其易于嵌入 Rust
- 作为 Python 的替代品用于 shell 脚本(因为我讨厌 Python)
- 只是为了好玩
目标
我实现这个的有些目标是
- 应该能够运行基本的算法(例如,斐波那契数列)
- 应该能够调用 Rust 函数
- 应该提供易于嵌入的 API
- 替代 Python 等语言进行 shell 脚本编写
- 应该足够快
当前状态/待办事项
- 处理整数算术
- 处理浮点算术
- 将脚本组织成(子)模块
- 支持调用函数
- 支持字符串处理
- 支持简单的条件语句(if 无 else)
- 支持复杂的条件语句(if/elseif/else,switch/case...)
- 部分支持:支持循环(loop,while,for 等...)(见 FN#1)
- 部分支持:支持自定义类型(容器)(见 FN#2)
- 支持调用 Rust 函数
- 支持嵌入/暴露 Rust 原生类型
设计
这是一个简单的 .oxs 脚本可能的样子
mod: inner_module {
fn: add(lhs: int, rhs: int) ~ int {
return lhs + rhs;
}
}
import: core::Destroy;
// This is basically a struct.
cont: Vector {
x: float;
y: float;
}
impl: Destroy for Vector {
fn: destroy(&this) {
// Special handling for destruction of this property
}
}
// Struct implementation
impl: Vector {
fn: length() ~ float {
return float::sqrt((x*x)+(y*y));
}
}
import: inner_module::add = add_fn;
fn: main() ~ int {
var lhs: int = 1;
var rhs: int = 2;
return add_fn(lhs, rhs);
}
脚注
- 目前只实现了循环。
- 容器成员函数目前有问题。
依赖项
~2.1–3.5MB
~58K SLoC