Skip to content(if available)orjump to list(if available)

A WebAssembly compiler that fits in a tweet

Lerc

Really interesting. I considered having a go at a RPN to WASM converter when I was making https://c50.fingswotidun.com/

I ended up converting the RPN style notation into a JavaScript string and creating a new function, which lets the JIT sort it out.

https://c50.fingswotidun.com/show/?code=xy!2*!2y!*6%2Bo2%2Fv...

which has the code

    xy!2*!2y!*6+o2/vy#!*:Cy#*+z#d!;*:ze!xy*4s*43/*e+*+
becomes

    ((round(z) * ((v * (1 - round(y))) + (clamp((( ((x*(2**((2 * (1 - y)) + 6))) ^ ((1 - ((1 - y) * 2))*(2**((2 * (1 - y)) + 6)))) /(2**((2 * (1 - y)) + 6))) / 2)) * round(y)))) + ((1 - round(z)) * ((1 - smoothStep(z)) + smoothStep((((x * y) * sin(4)) * (4 / 3))))))

It would be interesting to see the performance difference from a wasm version, but in the end I found the human(ish) readable expression to be quite useful too.

Originally I created an interpreter for a code as a texture maker for code golfed javascripted games. https://github.com/Lerc/stackie

There's potential for a WASM implementation to be both smaller than the small version and Faster than the fast version.

tromp

Interesting how the obfuscated code is explained by slowly unobfuscating it step by step. This is the reverse of how obfuscated code is normally created: by starting with understandable code, and then slowly obfuscating it bit by bit (as I explained for this IOCCC submission [1]).

I say normally because one could also have a superoptimizer search for a minimal program that achieves some desired behaviour, and then one has to understand it by slowly unraveling the generated code.

[1] https://tromp.github.io/maze.html

parlortricks

Is this a Tweet or a Xit (zit)? ha.

This is cool though, i love these programs that exist in these constraints, like Dwitter does with the demoscene.

trescenzi

I’ve used reverse Polish notation as an interview question many times. It works well because if someone’s never seen it you can learn a lot about their basic understanding of algorithms. But if they are aware of how easy it is you can extend it forever by adding symbols, improving the algo they build, or doing something like this.

eleumik

You are a crazy sadic bastard

martijnarts

> if you take the time to understand what this code does, you’ll learn a surprising amount about WebAssembly!

It's a shame the article mostly teaches about codegolf tricks, and the actual wasm info is left to a single commented code block.

Nonetheless an interesting article about JavaScript quirks though!

hinkley

“Fits in a tweet” can be safely assumed to mean lots and lots of code golf.

marianoguerra

post co-author here, let me know if you have any questions :)

kragen

This is really impressive. It is over 140 characters, but I guess "a tweet" can be any length now.

pdubroy

Co-author of the post here — we had 280 characters in mind. :-)

lcnPylGDnU4H9OF

I have never used Twitter so I might be mistaken but I believe the limit has been 280 for a while now, which is why the first one at 269 bytes would also have fit.

jsheard

Yeah it was changed to 280 for all users in 2017. That's still the default limit, but paying users can exceed it now.

GrumpyNl

Twitter was based on sms, the standard SMS character limit is 160. They used 140 so they could use the remained 20 chars for other purposes.

acuozzo

140 and 160 are related when it comes to SMS.

The GSM-7 alphabet is the most common one in use with SMS (or, at least, it was as UCS-2 is more common now with emojis and such).

160 is the number of GSM-7 characters.

160*7/8 = 140 which is the number of bytes in the userdata portion of the TPDU.

benatkin

The username length restriction might come partly from that. They could surely relax it by now, though. I saw it at play this week when @SecondGentleman (15 characters) changed to @SecondGent46.

actionfromafar

[flagged]

null

[deleted]

userbinator

I prefer calling it an x-cretion.

exe34

Xitter, with the X pronounced as a soft Sh

null

[deleted]