This, I think is just a library or archive (in the ar/ranlib sense; https://sourceware.org/binutils/docs/binutils/ar.html#ar) of code that the browser loads over the Internet.
Java hit a jackpot calling such a thing a jar, a word that is both shorthand for "Java archive" and a noun describing a container. That suggests looking at words such as 'bottle', 'box', 'cask', 'pot' (nice word, but its connotations do not make it a winner), 'cup', 'amphora', 'pithos' (not well-known enough, and typically unmovable), 'crate' (taken by rust), or 'vase' but I can't find a nice alternative interpretation as an abbreviation ('Jug' has a 'j' that could mean JavaScript, but I think we would be looking for something with a W for 'web' or I for 'internet') or even something that sounds good ('crate' is growing on me, but already taken by rust. That shows that other terms might grow to become acceptable, too. Maybe 'jug' could be such a word?)
https://en.m.wikipedia.org/wiki/Object_file
Of course the term "object" is confusingly overloaded too...
Also, there's a reason the description is a bit fuzzy on the WebAssembly landing page. It's not just a binary format (in fact, we didn't have a binary format for a while after we started). I like to think that it's a specification of execution semantics that can be expressed in many different formats (text, binary, AST, etc.). Not sure that's the easiest way to explain it though.
Again, I am not extremely against wasm, but this writeup is pretty well done and my take away was that it was non-trivial to pickup, buggy and has poor documentation. I am curious who web assembly is for and who is really excited about it. Is it gaining traction in gaming, and also what am I missing(serious)?
edit: Can advertisers bypass content blockers by compiling to wasm?
Other than that, I can see a lot of uses for it, from small neural nets in the browser to high performance applications like photo editing, and of course gaming. It might not be for all applications, but it certainly has a spot.
Great writeup. I am a big proponent of the idea of webassembly as I believe many are. The browser is one of the greatest apps, and it is easy to look past many of its flaws because it provides a universal environment to develop for. I have always been a harsh critic of the balkanization apps provide when they are unneccessarily trying to extend functionality already provided by the browser and live natively on my device providing virtually nothing but more access to "my" resources.
That said, while I don't love writing apps in an old IBM GML and pulling in heaps of scripts to get the functionality I need, it is easy and well understood (which is why it has proliferated). If we are to change this, I think an entirely new paradigm would be easier to use and embrace than something like wasm because the browser has a lot of access to resources and this has a fairly narrow use-case relative to it's complexity.
I could be wrong, as this technology is super nascent and people as intelligent and synonomous with the web like BRendan Eich are openly supporting it, I just don't see it being embraced at the sort of tipping point neccessary to proliferate.
It will be very hard to build a community of people doing things like you have here: providing great resources and tutorials and a community of code base to build on. A new standard or tech must be 10x better than the current one and I do not feel this is.
edit: the first major demonstration was Unity's angry bots according to Wikipedia. So it appears this is for game devs, and game developers who want to build for the browser will be excited about this. I just think webassembly to be really far down on the ist of improvements we should make to the browser.
Once integrated properly in desktop and mobile browsers (maybe two years from now), it would probably reduce most of the "useful" performance lead that native apps have over web apps. But, it's still a bet - because of course, no one really knows for sure what things will look like two years from now.
My take is two-fold. First, the tooling needs to mature. Second, a community of more hard-core developers (i.e., those who work regularly with C, C#, C++, etc.) needs to crop up.
Without those two things, I think you're right, it will never take off. But my bet is that both of those things happen; larger companies will at some point bank on it, and throw a bunch of tooling and development resources at it. Just a guess.
In particular, I'm curious what web assembly is supposed to be offering that Java applets didn't.
There is an experimental backend of LLVM that you can try, but it will require building LLVM from source currently. Emscripten has an option to do this automatically, I believe.
You can also write the AST format by hand, which IMO is much easier to do than writing asm.js by hand, just more verbose. I wouldn't advise anyone do this, as the format has been changing over time.
Finally, there is work on specifying a true "text format" that is meant to be used with view-source and directly maps to the binary format. You can see some proposals if you look at the pull requests in the design repo. When a proposal is accepted and we implement the tooling, you will be able to generate a binary directly from this format, which will be much nicer.
[1] https://github.com/WebAssembly/design/blob/master/TextFormat...
[2] https://github.com/WebAssembly/design/blob/master/BinaryEnco...
We should have a text format soon too, which will be nicer than the AST format to read/write by hand.
github.com/WebAssembly/spec
github.com/WebAssembly/design
So the languages that make use of it will be compiled languages like C, C++, Pascal, Fortran etc.