Awesome! This is the web summit talk I was looking forward to. So part of the promise of wasm is its integration with the web api and dom. In the fractal application for example if we extend that to include a zoom function that handles mouse events and updates variables, I'm probably employing something like blazor or js-sys in rust. How will that high level integration be handled in the dev console? And is it possible to create custom visualizations? Thanks in advance ;)
Although I have no use for it currently I am fascinated by Web-assembly (and PWAs). But is it actually useful? I understand why theoretically it is, but is it being useful in practise?
Answering my own question, a little, I use figma.com a lot. But the potential seems so great, and the available PWAs so poor....
This time WASM promises to be as widespread as JavaScript (no plugins needed) and can be targeted by many languages. Having all the major browser vendors on board helps a lot.
I, for one, am greatly looking forward to kicking JS and all its warts to the curb for my frontend code, so this article is great news. DOM access next, please!
> Answering my own question, a little, I use figma.com a lot. But the potential seems so great, and the available PWAs so poor....
It's just that WebAssembly, like any new technology, can and usually is used in very specific paths that require it.
As a result, it's true that there is not that many full WebAssembly-powered PWAs, although the ones that are, like Figma you already mentioned or Google Earth or various Blazor-powered apps already speak for themselves.
However, there is even more apps and websites out there that use Wasm either directly or via library dependencies for calculations, graphics or even things like hyphenation - in my research https://github.com/mnater/Hyphenopoly was one of the most popular Wasm-powered libs used across a bunch of CMS and blog platforms - probably the last place you would expect to find WebAssembly in, and yet...
I'm coming at with from a similar place as you; I think it's really cool but the benefits are somewhat fringe for normal web apps.
I'm currently writing a SPA in WASM just because I want to play with trendy tech, and the biggest benefit I have observed is massive code size improvement. A similar app I wrote using React had an uncompressed bundle size of about 2 Mb (ouch), which gzipped down to 400 kb. The wasm competitor is about 150 kb and 90 kb gzipped, which is a pretty good code size savings, although still a little bloated. I also strongly prefer the Rust development experience over Typescript, even though TS was perfectly serviceable and the WASM-browser interface is still a little unpolished (but still quite capable). Overall my experience tells me WASM has a strong future but we are house on the bleeding edge of usability at the moment.
It's mainly hamstrung right now by the hoops you have to jump through to get it talking to the actual web page, is my understanding. Some companies though, like Cloudflare, are playing with it as a cross-platform server/desktop runtime, which is interesting
It's absolutely useful in practice. Sometimes the library you need was written in C++, and needs to run performantly and offline. I needed WASM and PWA to make an offline Japanese dictionary:
https://birchlabs.co.uk/mecab-web/index.html
It uses WASM to do linguistic processing via the C++ library, mecab. It tells you where the spaces should go in a Japanese sentence, and what the dictionary form is of each word (so you can lookup the meaning).
Thers is this tool whole algorithms were originally implemented in C++ to use in industrial applications. But was easily ported to the web to create a PWA that now anybody can use. This would have not been possible before. Check it out: https://pidtuner.com
I just tried it and it works pretty well. Awfully slow on my mid-2014 MacBookPro though, especially the variable-view-panel redrawing takes very long (1..2 seconds). But definitely a promising new start compared to the older source-map debugging solution.
Hopefully this will also lead to a 'seamless debugging experience' inside VSCode. It would be pretty awesome to have (for instance) a HTML panel with a WebGL canvas in one VSCode tab while stepping through the C/C++ code in another tab. With a bit of tinkering this would also make a nice shadertoy-style live-coding environment.
You will be able to build your own extension with any backend in the future, but I'm curious what you're looking to gain from that?
I don't know whether GDB understands the Wasm-specific constructs in DWARF, while the current integration uses LLDB under the hood, which does support those.
I guess you'd have to make series of patches to GDB to make it work, as well as to build your own DevTools extension once the API is stable, but in theory should be possible, yeah.