1 个不稳定版本
0.1.0 | 2020年3月9日 |
---|
#211 in #scripting-language
在 oxlex 中使用
11KB
212 代码行
OxyScript
一种轻微氧化的脚本语言
! 这一切都是非常重的WIP。现在还没有正常工作 !
目前正在从堆栈虚拟机切换到寄存器虚拟机。目前不可用
这是什么呢?
OxyScript是我自己实现的一个小脚本语言
作为一个学习练习,因为我想要一个我可以控制所有
设计变量的语言。
为什么?
没有真正的理由,只是以下
- 作为一个学习练习
- 使其易于嵌入Rust
- 作为Python的替代品用于shell脚本(因为我讨厌Python)
- 为了好玩
目标
我使用这个的一些目标包括
- 应该能够运行基本算法(例如,斐波那契数列)
- 应该能够调用Rust函数
- 应该提供易于嵌入的API
- 替代Python等语言用于shell脚本
- 应该足够快
当前状态/待办事项
- 处理整数算术
- 处理浮点算术
- 将脚本组织成(子)模块
- 支持调用函数
- 支持字符串处理
- 支持简单的条件语句(if没有else)
- 支持复杂的条件语句(if/elseif/else,switch/case...)
- 部分:支持循环(循环、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);
}
脚注
- 目前只实现了while循环。
- 容器成员函数目前损坏。
依赖关系
~1.5MB
~35K SLoC