21 comments

[ 4.4 ms ] story [ 82.3 ms ] thread
This has ~5 syscalls written, almost everything is "undefined", not sure why it got posted.

If you want an actual complete tiny WASI runtime in TypeScript, Deno has a full one:

https://deno.land/std@0.127.0/wasi/snapshot_preview1.ts

The aim isn't to be complete, it's to be tiny like the name says!

Real-world usage: https://github.com/qrdate/mt63_wasm/blob/master/src/MT63-tx....

Nice work! Do you plan to implement the rest as well or is this done?
The motivation was to try to get the MT63 encoder into as small of a footprint as possible, trying to minimise the Lambda bootup time and memory usage from API requests on our end, while learning WASI at the same time. It worked well for that! Ideas are welcome though!

It's live on our site (https://qrdate.org). Press the "Sonify" button to hear the transmission.

Big downvote from me. Tiny projects are the best way to learn a system. Nobody needs a higher bar for getting started learning some tech. Do a tiny/toy version and keep improving (either in that project or your next one)!

Edit: or in this case it seems the tiny is the goal itself. That's cool too. See also: suckless.org, UNIX philosophy, etc.

Are we going to post every 200-line project to HN too?

Tiny projects are fine, but they don't all need to be posted to HN.

Lots of tiny projects get posted here and get lots of positive attention. It seems mostly to depend on the audience who looks and the time of day when it becomes widely visible. HN itself welcomes posting projects, “show” being a first class part of the site (which if I’m not mistaken this was originally a “show” post). Maybe just show your lack of interest by looking at the next thing?
"Tiny projects are fine, but they don't all need to be posted to HN."

I rather would have more tiny projects, than political discussions to dive in, to be honest.

Only if they are written in Rust.
Wasmer has also a Rust-compiled-to-Wasm runtime available for Deno:

https://deno.land/x/wasm@v1.0.2/README.md

And here is the more lightweight and flexible (in some ways) one from Wasmer, before they completely rewrote it in Rust:

https://github.com/sagemathinc/JSage/tree/main/packages/wasi

It took me some work to track down the old version, fix some bugs in it, and keep it going. But I personally find the old version very useful too, and if you can see from the comments that it has an interesting history.

The Deno WASI runtime doesn't run in a browser, it only runs in Demo. So this tiny mostly unimplemented API is still infinitely more useful to me than the Deno implementation.
(comment deleted)
(comment deleted)

    clock_time_get( id: number, precision: number, timeOut: number ): number {
      ...
      view.setUint32( timeOut, ( now * 1000000.0 ) % 0xFFFFFFFF, true );
      view.setUint32( timeOut + 4, now * 1000000.0 / 0xFFFFFFFF, true );
Oh no. As they say, something something and off-by-one errors.
Thanks for raising this issue, it's fixed now!
This is great! I used wasmer's polyfill for a while, but that was too much and too complex for most of the use case. This project seems really simple and tiny well.