5 releases

0.1.4 Dec 31, 2023
0.1.3 Dec 24, 2023
0.1.2 Dec 13, 2023
0.1.1 Dec 12, 2023
0.1.0 Dec 12, 2023

#329 in WebAssembly

MIT and GPL-3.0-only

99KB
2K SLoC

WhileDB

rust implementation of While-DB, the programming language used in SJTU CS2612 (2022 Fall) Attachment 1014

TODO

  • find a way to omit ; after } currently unable to add ;, however

  • add function

  • make any expression callable (currently only ident callable)

  • add class and method

  • add [ ] to represent array and getitem

  • add string

  • add interpreter or compiler

    any object (including the program state) can be represented as Any, pointer to WdAny WdAny is either Object or Function Object has 2 fields buildin (store buildin types or Not) and attrs(a string to Any map) Function is either build-in or defined

    state store

    • types (object with "__name__" => typename, and "__method_name__" => method function)
    • instances (object with "__type__" => type object)
    • functions ...

    state = { <locals>, "..": {<nonlocals>} } 😎, only do this in DefinedFunction (buildin function do not have locals)

    call an expression

    • expr is a expr0.ident and expr is a instance (__type__ is not type), args = [expr0, *args] plan to check this via add flags on return value of eval pub fn eval(expr: Rc<Expr>, state: Any) -> Result<(Any, Option<Any>)> etc.

      plan to check break, continue, return the same way.

    • expr is a WdAny::Function, original args
    • expr if a Object
      • with __init__ self-attr, args = [new_obj (with __type__ => this expr), *args]
      • with __call__ self-attr, original args
      • with __call__ attr found from __type__ attr, args = [this expr, *args]

Future Work

Dependencies

~4–15MB
~140K SLoC