<div dir="ltr">Hey GiNaC people!<br><br>First of all, thank you for this great library!<br><br>I'm working on a web-based interface for GiNaC as a hobby project and I wanted to share it with you.<br><br>You can try a demo frontend here: <a href="https://daninet.github.io/ginac-wasm/">https://daninet.github.io/ginac-wasm/</a><br>Source code: <a href="https://github.com/Daninet/ginac-wasm">https://github.com/Daninet/ginac-wasm</a><br><br>There is no operator overloading in JavaScript, so I had to implement functions like add(), mul() for the different operations. The GiNaC commands are batched for faster processing because WASM <=> JavaScript calls are too expensive. 

The demo frontend includes a PEG-based parser written in JavaScript, but the embedded parser is also exposed through the parse() function.<br><br>At this moment, the JavaScript/TypeScript API looks like this:<br>const GiNaC = await initGiNaC('./dist/ginac.wasm');<br>const g = getFactory();<br>GiNaC(g.mul(g.numeric('2'), g.pow(g.symbol('x'), g.numeric('2'))));<br>GiNaC(g.series(g.atan(g.symbol('x')), g.symbol('x'), g.numeric('5')));<br><br>On my computer, the native ginsh is about 10x faster in estimating Pi with Machin’s formula compared to my WebAssembly port. That's because of the expensive C++ exception mocks generated by Emscripten, which compensate for the lack of native browser support for exceptions in WebAssembly. I estimate that the performance gap can be brought down to about 1/2 of native performance once the native exception instructions are getting wildly available in browsers.<br><br>I plan to publish it on NPM (the JavaScript package library) when I manage to stabilize the API and implement the remaining features.<br><br>What do you think? Do you have any suggestions or ideas?<br><br>Best regards,<br>Dani Biró</div>