I think WebAssembly is starting to look really good
I've always dreamt about being able to take a program and put it online without any modifications. I'm a bit late to the game, but WebAssembly now seems to make that happen, simply by just compiling your program against a WebAssembly compilation target. I've done some simple testing with Emscripten (C/C++) and Rust and wow, seeing even Hello World run unmodified is such a joy.
To try to understand why this is such a huge deal, we have to go back to the past for a moment (future Simon here: Alright, that turned into some serious storytelling, lol):
Back in the early days we had browser plugins in which Java applets could run. I tried to dabble with it, but always found it quite cumbersome. Not Java itself, I was quite happy working with it, but the circumstances around getting Java applets to run at all, meant that I simply lost interest along the way.
As far as I recall, Microsoft shipped an outdated version of Java with Internet Explorer - which in terms of functionality sat well below the version 2 that Sun Microsystems shipped.
The version difference made a huge impact. That meant that in order to use the latest and greatest features, you had to convince your website visitors to download a newer version of the Java browser plugin, or downgrade your code to work with MS Java. Perhaps there were smarter ways to go about it, but I never found any.
I didn't want to do that, because I knew it mean that people would just leave. So much of my work has always been either Flash or a huge load of AJAXified Javascript (acronym for Asyncronous Javascript and XML) to make the frontend very responsive. It's a purely aestetic thing, but I've always hated that roundtrip that serverside-only webapps written in PHP or ASP(.NET) needed to make, because the server needs to resend the entire page back to your browser. That work caused a tiny flash in your browser. "No big deal", you might think, but if you know its there, you'll definitely take notice of it.
With AJAX, you could do partial page updates meaning you only had to instruct the server to resend the part that needed to update, not the entire page. A huge win for pages that needed to look like they were updated in realtime.
My updated but flaky knowledge on AJAX would soon come in handy. Sometime back in 2005-2006 I got a specific request for a PHP-based webshop in which the basket needed to calculate the sum instantly. I found a plugin that created a browser independent shim layer on top of the Javascript object XMLHttpRequest. I think it was a good thing, because later I found that browsers had small differences in their implementations of XMLHttpRequest and the polyfil layer sort of ironed out the differences.
I spent my school summer holiday on Samsoe (a small island east of Aarhus, Denmark) coding on that webshop. It ran for approximately 10 years, when I convinced (begged) the owner to choose a Wordpress-based shop. I was very relieved because it became increasingly harder to update those layers of spaghetti code I managed to build up over the years, especially since I moved on to work with ASP.NET and C#, so I wasn't really paying attention to developments in the PHP ecosystem. But at the same time, I was the only one who really knew the ins and outs of that shop, so I felt I couldn't really pass it on - and part of me didn't want to do it, because it was my first born... heh, my first real webapp.
Alright that was quite a detour from why I'm excited for WebAssembly, but I sort of needed to explain how I got here. I look forward to not having to alternate between multiple languages. Now I just need to figure out what to build.
Here's some cool WebAssembly-based apps, will update the list as I discover more: