5个版本

0.1.4 2023年12月31日
0.1.3 2023年12月24日
0.1.2 2023年12月13日
0.1.1 2023年12月12日
0.1.0 2023年12月12日

#244编程语言

Download history 10/week @ 2024-03-09 1/week @ 2024-03-16 19/week @ 2024-03-30 219/week @ 2024-04-20

80 每月下载

MITGPL-3.0-only

99KB
2K SLoC

WhileDB

While-DB编程语言的Rust实现,用于 SJTU CS2612(2022 Fall)附件 1014

待办事项

  • 找到一种方法来省略 ;} 之后,目前无法添加 ;,然而

  • 添加函数

  • 使任何表达式可调用(目前只有 ident 可调用)

  • 添加类和方法

  • 添加 [ ] 来表示数组和获取元素

  • 添加字符串

  • 添加解释器或编译器

    任何对象(包括程序状态)都可以表示为 Any,指向 WdAny 的指针 WdAnyObjectFunction,其中 Object 有两个字段 buildin(存储内置类型或 Not)和 attrs(一个字符串到 Any 映射) Function 是内置的或定义的

    状态存储

    • 类型(具有 "__name__" => typename 和 "__method_name__" => method function)的对象
    • 实例(具有 "__type__" => type object)的对象
    • 函数...

    状态 = { <locals>, "..": {<nonlocals>} } 😎,仅在 DefinedFunction(内置函数没有局部变量)中这样做

    调用一个表达式

    • expr是一个expr0.ident,expr是一个实例(__type__不是type),参数为[expr0, *args],计划通过在eval的返回值上添加标志来检查这一点 pub fn eval(expr: Rc<Expr>, state: Any) -> Result<(Any, Option<Any>)>等等。

      计划以相同的方式检查breakcontinuereturn

    • expr是一个WdAny::Function,原始参数
    • expr是一个Object
      • 具有__init__ self-attr,参数为[new_obj (with __type__ => this expr), *args]
      • 具有__call__ self-attr,原始参数
      • 具有从__type__属性中找到的__call__属性,参数为[this expr, *args]

未来工作

依赖关系

~4–15MB
~147K SLoC