Hey,
Thank you for creating this awesome work!
I’ve made some improvements while using this crate and wanted to share my fork. I would be delighted if some of my changes could be merged into this repo.
Some noticeable features include:
- WASM runtime support: Try it out in the demo.
- Static command registration using macros: I introduced
gen_command! and gen_subcommand! macros to statically register commands during compilation, utilizing match blocks for command/subcommand token matching instead of indexing by HashMap. This optimization enhances performance since native and embedded commands should remain unchanged at runtime.
- Generic context support: Replaced
ContextMap with a user-defined generic Ctx (the definition of Interpreter is now Interp<Ctx>), allowing direct access to the Interpreter’s context via interp.context.
- Multi-line command support in interactive terminal: Added support for incomplete mode when typing multi-line commands (e.g.,
if, for, …). You can try it in the demo.
Lastly, I evaluated the forked version against molt 0.3.2. Here are the results (note that performance is influenced by real-time CPU workload, and the values represent general cases):
molt-forked 0.4.0 (time unit in Nanos) |
molt 0.3.2 |
Speedup (×) |
Benchmark |
| 89 |
208 |
2.34 |
ok-1.1 ok, no arguments |
| 90 |
207 |
2.3 |
ok-1.2 ok, one argument |
| 97 |
219 |
2.26 |
ok-1.3 ok, two arguments |
| 119 |
209 |
1.76 |
ident-1.1 ident, simple argument |
| 209 |
402 |
1.92 |
incr-1.1 incr a |
| 158 |
311 |
1.97 |
set-1.1 set var value |
| 201 |
348 |
1.73 |
list-1.1 list of six items |
Thank you for considering these changes! If could, I will organize the changes and make PR.
Hey,
Thank you for creating this awesome work!
I’ve made some improvements while using this crate and wanted to share my fork. I would be delighted if some of my changes could be merged into this repo.
Some noticeable features include:
gen_command!andgen_subcommand!macros to statically register commands during compilation, utilizing match blocks for command/subcommand token matching instead of indexing by HashMap. This optimization enhances performance since native and embedded commands should remain unchanged at runtime.ContextMapwith a user-defined genericCtx(the definition of Interpreter is nowInterp<Ctx>), allowing direct access to the Interpreter’s context viainterp.context.if,for, …). You can try it in the demo.Lastly, I evaluated the forked version against
molt 0.3.2. Here are the results (note that performance is influenced by real-time CPU workload, and the values represent general cases):Command:
cd molt-app && cargo run --release bench ../benchmarks/basic.tclPlatform: Intel Xeon 6348 CPU
0.4.0(time unit in Nanos)0.3.2Thank you for considering these changes! If could, I will organize the changes and make PR.