1 个不稳定版本

0.1.0 2020年3月9日

#211 in #scripting-language


oxlex 中使用

BSD-3-Clause

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);
}

脚注

  1. 目前只实现了while循环。
  2. 容器成员函数目前损坏。

依赖关系

~1.5MB
~35K SLoC