This demo contains webassembly and javascript content, and may not work correctly on older browsers.
For a more in-depth explanation of what's going on here, check out the writeup on my blog, and the project's (very messy) source code on Github.
Pop open the sources tab, subtract the ~15kb of
wasm-pack
overhead from the (uncompressed)
.wasm
file size, and you'll find that this shortcode-to-emoji
lookup function only requires
~20kb of static storage (code + data), with zero dynamic allocation.
For reference, a file of raw (shortcode,emoji)
pairs would
occupy ~32kb, and would need to be parsed into a dynamically-allocated map
to be queried efficiently. Additionally, the hash-map generated by the
unmodified rust-phf
takes up a whopping ~100kb of
.rodata
and .data.rel.ro
, though admittedly,
much of that space is wasted on struct-padding, which could be mitigated
by refactoring the library to use two arrays-of-structs instead of a
single array-of-tuples.
Go on, type in some shortcodes! Colons are optional, and can be omitted.
Some crowd favorites include: :+1:
, :smile:
,
:poop:
, :tada:
This lookup function is generated from the same dataset used by Github.
If you're feeling lucky, you can try spamming some input into the text box and trying to find a false positive! This demo uses 16-bit hashes for the keys, so it aught to be pretty difficult to find any "reasonable" false positives (i.e: one which is is only a mistake or two away from being a valid input).
That said, it's pretty easy to programmatically find false positives. In fact, every time you refresh this page, I'll go ahead and find another false positive by randomly generating a bunch of strings and seeing if one of them returns an output! Oh hey, looks like (still calculating...). Neat!
Oh, and if you're interesting in stress-testing the function directly, you
can access it by calling
window.shortcode_lookup
.