This is a naive JavaScript engine implemented in pure Rust to improve my JavaScript knowledge.
- Lexer
- Recursive descent parser with Operator Precedence Algorithm to optimize operators parsing
- Generates abstract syntax tree on basis of ESTree
- Generates bytecode(opcode) from AST
- Bytecode analysis
- Optimizes bytecode according to the analysis result
- Reference-counting GC with Mark-and-Sweep to deal with the reference cycle
- Common Flow Control Statements(if-else, for, while, do-while)
- Closure
- Mathematical Operations
- Function Invocation
- Logical Operations
- Bitwise Operations
- Object Literal
- New Expression
- Member Access Expression
- For-in Statement
- Switch Case Statement
- Try-catch Statement
- Debug
Thanks to the Rust development infrastructure, run this engine from source is very easy, just:
$ cargo build
$ cargo run your-script.js
It's still in development, after it’s completed I’d like to write a series of posts to describe how to build a JavaScript engine from scratch, stay tuned.
Feel free to leave any response by submitting a issue. Star/Fork to subscribe its updates is welcome.