19 ms·
Web Assembly now supported across all browsers
- TekMol 9y agoI would try it out, if it would be possible to just type web assembly by hand. Then I would just open an html file or a jsfiddle and play with it. But as I understand it, it needs a toolchain?
- a_humean 9y agoYes, WebAssembly is bytecode that is a IR compile target for other languages, which right now is limited to C and C++ via Emscripten, or Rust via its own normal toolchain or Emscripten as well. It has a plain text assembly output called WAT, but its not really meant to be handwritten, but rather reviewed as a build artifact. You can see an examples in Rust including the readable Wat output here: https://www.hellorust.com/demos/add/index.html https://www.hellorust.com/demos/add/index.html
- TekMol 9y agoIf I can't just type it and see the result, I am not much interested. I don't like to install software. As a child of the web, my feet are firmly planted into the cloud.
- throwaway613834 9y ago> I don't like to install software. As a child of the web, my feet are firmly planted into the cloud. It's funny, I'm the exact opposite. I don't like cloud apps. One day they're there, next day half their features are removed, next day they're gone. And I can't hack them to make them better fits for me when they keep changing. I want the code to run on my machine so I can do anything I want to it and have a stable environment I can rely on.
- TekMol 9y agoI don't care if jsfiddle still exists tomorrow. I just use it to quickly try something and immediately share it with others. I don't put anything I care for on machines I don't own. I own many machines in the cloud. They are beautiful. Because they are all the same. They are virtual. They are cheap. I can create them with a click. There are so many vendors. If one of them would go away, it would not tamper with my ability to create new machines.
- throwaway613834 9y ago> I own many machines in the cloud. They are beautiful. I was talking about web apps, but w.r.t. VMs... sure, at the price of your pocket though? I can run my home computer all I want and not pay for anything except the electricity and internet.
- xg15 9y ago> I own many machines in the cloud. > They are virtual. They are cheap. I can create them with a click. If they are virtual, you don't own them. You own an 'I promise really really hard' of some vendor at best.
- TekMol 9y agoI own the virtual thing. It's my data. Yes, the vendor could illegaly tamper with it. Or legaly stop providing me service. But the beauty of the cloud is that it would not affect me. Because I can replace any vendor with a click.
- stephenr 9y agoI think you're confusing the buzzword "cloud" for "rented virtual server". None of which has anything at all to do with installing a fucking tool chain.
- kowdermeister 9y agoAs someone who learned programming as the web grow, I was like you, but I now I see WebAssembly as the future of the web. Lots of amazing and horrible things will emerge. It's better to catch up now, than 2 years later when it will be everywhere. BTW you DON'T need WA if you don't have performance issues with your current web application.
- TekMol 9y agoI only do what I like. So I don't need to catch up with a technology if I don't like it. And if I need a toolchain, I am not tempted to use wasm. As for performance: I do a lot of machine learning in the browser. So performance is something that I am interested in.
- pjmlp 9y agonpm, bower, webpacker,... sounds like a toolchain to me.
- deleted 9y ago[deleted]
- a_humean 9y agoI can understand the nostalgia, but that just isn't really true anymore for a lot of front-end web development. Almost everywhere you look in front-end web today you see a toolchain that includes the node runtime, babel or typescript as a compiler, and some kind of bundler/linker such as webpack or browserify that throws in minification/mangling in as a freebie. That doesn't even cover CSS. JS/CSS is already a compile target with a build artifact often barely resemble the original source code. WASM is just another compile target that opens up the web as a platform for other languages.
- exDM69 9y agoYou can do that but why would you want to? The tool you're looking for is wat2wasm, which converts the human readable WAT source to WASM binary, and here [0] is an online tool if you want to tinker with it. Compiler IR's like WASM or LLVM IR are very laborious to type, they're intended to be produced and consumed by compilers. You need to write very verbose code with all the type declarations, which aren't automatically propagaged, ie. `(func $foo (param $0 i32) (result i32) ...)` and `(i32.add ...)`. There's very little point in writing code like this by hand, apart from testing and debugging the compiler producing or consuming this code. It doesn't make much sense to have this "in the cloud" outside of toy tools like this. In any kind of actual work scenario, you'd be running a compiler producing WASM on your development machine and deliver the WASM binaries over HTTP to the client machine. The whole point is to have near-native performance while reducing the compile time on the client side. But if you want to tinker with it, knock yourself out. Here's the tool: [0] https://cdn.rawgit.com/WebAssembly/wabt/fb986fbd/demo/wat2wasm/ https://cdn.rawgit.com/WebAssembly/wabt/fb986fbd/demo/wat2wa...
- BigJono 9y agoI like this answer a lot more than the other ones that are just dismissive. I think there's at least some value in these "toy tools". Would being able to tinker with WASM not help development of compilers? I place a very high value on understanding as far down the stack as you can, I don't think ignorance of every abstraction layer below the one you're working on is a very noble goal to strive for.
- krapp 9y agoWebAssembly is still very new - better tools are bound to show up, but I think GC and DOM support need to be finalized first.
- exDM69 9y ago> Would being able to tinker with WASM not help development of compilers? There are tools, even web based ones, that allow you to tinker with WASM, compile C, C++ or Rust code to WASM, print out the WAT representation, turn WAT into WASM, run the WASM blobs through JS, etc. These tools are probably very useful for the guys developing WASM frontends and backends. E.g. sharing a piece of WASM code with other developers. Should the average developer use them? Not really. Maybe spend an hour poking at things to get the general idea of how it works. You really don't need to understand the details of LLVM IR, SPIR-V, WASM or GCC's GIMPLE in order to use those compilers. Is it a good idea to understand what and how are intermediate representations used in compilers but actually writing that by hand is not necessary or productive.
- danaliv 9y ago"There is a principle which is a bar against all information, which is proof against all arguments and which cannot fail to keep a man in everlasting ignorance—that principle is contempt prior to investigation." -William Paley
- klibertp 9y agoI'm pretty sure someone will write a Forth for WA, if it's not done already. You'll even get a REPL for the assembly, then.
- pjmlp 9y agoSo you mean applications that I never get to see the code, because they are hidden in servers I don't have access to? Sounds like a strange duality of criteria to me.
- geokon 9y agoI've got to admit, I'm really clueless about these things But don't we already have a universal byte code with JVM bytecode? Why did the wheel need to be reinvented here? Are there fundamental issues with JVM bytecode that make it impossible/impractical to have c++/rust/LLVM compile to it? This isn't a troll question. I'm curious what are the fundamental underlying technical issues that made WebAssembly necessary (please be nice... c++ developer here.. so I'm really clueless about web stuff. I don't even use the JVM)
- Game_Ender 9y agoThe first upside is WebAssembly is designed to run C++ at close to native <10% overhead. The WASM team is starting with that foundation then adding features needed for GC and cross language API access (DOM). This is as opposed the Java and C# byte codes which come with a lot of assumptions baked in.
- pjmlp 9y agoCLR was designed to support C++, hence Maanged C++ and C++/CLI. Also the reason why the only major revision to the MSIL bytecodes was the support for generics.
- m1el 9y agoI'll take a stab at your question. > Are there fundamental issues with JVM bytecode that make it impossible/impractical to have c++/rust/LLVM compile to it? Lack of pointers. Lack of true structs. Different memory model. Enforced class/object model. WebAssembly has a memory model which is very close to a generic CPU. My understanding of what made WASM necessary - You don't want a GC? You don't get a GC. You want full control over your memory layout? You get a raw growable slab of memory with raw pointers.
- hnarn 9y agoMaybe you'll enjoy this: https://wasdk.github.io/WasmFiddle/ https://wasdk.github.io/WasmFiddle/
- TekMol 9y agoThat's funny. Never been using C, I guess-coded my way to this little program: int pow(a) { for (int i=0;i<10;i++) a=a*2+1; return a; } int main() { return pow(1); } And as far as I understand the output, the compiler on the server reduced it to a constant: (module (table 0 anyfunc) (memory $0 1) (export "memory" (memory $0)) (export "pow" (func $pow)) (export "main" (func $main)) (func $pow (param $0 i32) (result i32) (i32.or (i32.shl (get_local $0) (i32.const 10) ) (i32.const 1023) ) ) (func $main (result i32) (i32.const 2047) ) ) Looking at the wasm code, I really hate it that I cannot edit it by hand and have the browser execute it. That would be fun.
- banachtarski 9y agoThe amount of vigor you espouse an opinion with is astounding relative to how little you know. The point of WASM isn't for you to hand-edit things. It's to provide a unified IR that many lanugages can target (C, C++, Rust being just the beginning). Any language that compiles to LLVM bytecode today can theoretically target the browser now. One thing those languages I mention have in common? They don't use a garbage collector. AKA, you can now write code that will run in the browser with predictable latency semantics. Then again, I could just be feeding a troll right now, I really can't tell.
- pjmlp 9y agoNot having a GC is just an implementation detail. Anyone can implement one and ship it with the statically compiled WASM code, it is no different than targeting an actual machine code, unless we are speaking of CPUs like Intel iAPX 432. The only issue is having a little bigger download, which is irrelevant in the age where web pages to display static text are bigger than the whole Quake installation.
- starik36 9y ago> across all browsers IE. Everywhere I've worked, we still have to support it. Unless Microsoft ports Edge to Windows 7/8 and makes it a default browser, I don't see the situation changing anytime soon.
- kowdermeister 9y agoYou can still ship an asm.js version there as a fallback.
- borplk 9y agoDoes anyone know when/if DOM support will come to WASM?
- Bob2018 9y agoI am also curious about WebGL and/or canvas approach. This would allow bypassing the HTML and CSS mess not just JS mess.
- Klathmon 9y agoUnless you have a good reason, I urge you to never do that. Even ignoring accessibility (which is pretty much completely ruined in this situation no matter what), you'll need to reinvent every single primitive widget you need yourself and have it work the same as it does on all platforms. That's a shitload of code shipped to the user before you even write a single byte of code for your application!
- scottmf 9y agoNo doubt someone will build that library though
- kayoone 9y ago
- inDigiNeous 9y agoAny good example projects already using WebAssembly ? Some list with multiple examples would be nice.
- pjmlp 9y agoThere are already ongoing efforts to port JVM and CLR to WebAssembly. Someone is porting TypeScript to WASM, named AssemblyScript. It won't surprise me to see a WebAssembly backend for Flash.
- whatever_dude 9y ago> It won't surprise me to see a WebAssembly backend for Flash. If Adobe was smart, they'd have started working on am asmjs (later WebAssembly) + webgl output for Flash a long time ago. Alas they're not exactly forward-planning and let the platform die, and its tools fizzle. Today there's already better alternatives that do things more cleanly/natively (like Pixijs). If you use TypeScript with Pixijs, it's like having a much more advanced ActionScript, better development tools (your browser's devtools), and better performance. You lose a "stage" for free drawing, but that was more often than not a misused feature anyway (and one that has good alternatives in the DOM/JS world anyway).
- pjmlp 9y agoWhen the whole story with Apple happened, Adobe eventually created a native code backend for Flash. And for a while they even had a C/C++ compiler for the Flash VM. So if they really cared, it isn't something that should be too hard for them. Failing that, it might be an interesting project for a compiler hacker without ideas. In any case, I see it more like preserving many of the games written in Flash.
- send_computers 9y agohttps://github.com/mbasso/awesome-wasm#projects https://github.com/mbasso/awesome-wasm#projects
- frik 9y ago
- AnIdiotOnTheNet 9y agoAll browsers? Including Lynx? Oh, no, you meant all the official browsers of our corporate masters. Sooner or later they'll all be one.
- therealmarv 9y agoyou should definitely switch to more modern browsers! Try Links2 ... it even supports frames! ;)
- gilrain 9y agoWe welcome you to switch to Mozilla Firefox!
- jokoon 9y agoI tried to use emscripten as a tool chain, it was not the greatest experience. I really hope better toolchains will appear. Emscripten seems to be a collection of weird hacks.