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
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 toWdAny
WdAny
is eitherObject
orFunction
Object
has 2 fieldsbuildin
(store buildin types orNot
) andattrs
(a string toAny
map)Function
is either build-in or definedstate 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 nottype
), args =[expr0, *args]
plan to check this via add flags on return value ofeval
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]
- with
- types (object with
Future Work
- python binding: WhileDB.rs
- wasm
Dependencies
~4–15MB
~140K SLoC