News for hackers. Stuff that matters.
Re:Experimental support for WebAssembly in V8 by jhpriestley on Tuesday March 15, 2016 @12:03PM (#11290619)
You are misunderstanding. A C++ application compiled to wasm is smaller than a C++ application compiled to a subset of javascript.

A javascript application compiled to wasm doesn't really make sense. Javascript isn't a compiled language. The best you could do would be to store some kind of compressed representation of the source code, along with a JIT compiler to run that source code. It isn't a sensible thing to do.

Re:Experimental support for WebAssembly in V8 by DonHopkins on Tuesday March 15, 2016 @02:09PM (#11291715)
Once WebAssembly supports all the features of JavaScript, which is on the roadmap (step 3, "everything else" [1]), it'll be a very sensible thing to do, especially for mobile.

Compiling JavaScript text source code into a binary representation of its AST will save time and space downloading, and time starting up.

You won't need another JIT compiler, the web browser usually already has one. WebAssembly is bytecode and JIT agnostic. Compiling text JavaScript into a binary WebAssembly representation of the parse tree is different than compiling the parse tree to bytecode, or JITting the parse tree or bytecode to machine code. They are complementary layers, and both synergistically useful together.

[1] http://bytecrafter.blogspot.nl/2015/06/a-quick-overview-of-w...

Re:Experimental support for WebAssembly in V8 by twistedpair on Tuesday March 15, 2016 @04:13PM (#11292614)
I can only imagine the possible security exploits available by passing AST binaries directly to the browser, rather than letting the JS lexer/tokenizer and compiler enforce language rules from the source.
Re:Experimental support for WebAssembly in V8 by robbrown451 on Tuesday March 15, 2016 @04:46PM (#11292846)
Luckily, the designers of WebAssembly imagined those things before you.
Re:Experimental support for WebAssembly in V8 by lisivka on Tuesday March 15, 2016 @08:12PM (#11294053)
That's true of version 1, but supporting arbitrary JavaScript is on the roadmap.
Re:Experimental support for WebAssembly in V8 by jfbastien on Tuesday March 15, 2016 @04:24PM (#11292680)
The wasm AST is also a language, and a very simple one at that. Much easier to test and fuzz than all-out JS.
Re:Experimental support for WebAssembly in V8 by stcredzero on Tuesday March 15, 2016 @01:18PM (#11291241)
A javascript application compiled to wasm doesn't really make sense. Javascript isn't a compiled language.

This compiled/interpreted distinction has gotten quite fuzzy, and it has been for decades now. Smalltalk was always a compiled language with really late binding. It did compile to a bytecode which was interpreted at first, but that became JIT compiled in all but one commercial VM. This all happened over a decade ago.

Also, there is clearly a subset of Javascript programs that could be usefully compiled down to a small, fast, compact machine language program.

Re:Experimental support for WebAssembly in V8 by geon on Tuesday March 15, 2016 @03:34PM (#11292346)
> there is clearly a subset of Javascript

I suppose the extra restrictions of Typescript would help. At least if you add extra restrictions to make it easier to compile.

Re:Experimental support for WebAssembly in V8 by xigency on Tuesday March 15, 2016 @12:13PM (#11290704)
Sure it does. Do you know that Lisp and Scheme have compilers? They target assembly even as dynamic languages, like JavaScript.

These are totally sensible. Look at: http://www.call-cc.org/

Re:Experimental support for WebAssembly in V8 by RussianCow on Tuesday March 15, 2016 @01:57PM (#11291619)
But the point is, if you want to compile your JavaScript code ahead of time, you have to ship your own GC and JIT compiler, because you no longer get it "for free" from the browser's JS implementation. There's absolutely no benefit from doing this.
Re:Experimental support for WebAssembly in V8 by geon on Tuesday March 15, 2016 @03:37PM (#11292375)
That will soon not be true. Exposing the js gc is on the roadmap.

...which will also make it feasible to use other gc:ed languages without shipping an enormous runtime.

Re:Experimental support for WebAssembly in V8 by RussianCow on Tuesday March 15, 2016 @05:01PM (#11292961)
Okay, but why would you compile JS down to wasm, only to have it then use the browser's built-in JS runtime? I see the use for compiling other dynamic languages, but compiling JS via wasm shouldn't be any different than running it via the normal JS engine, aside from potentially having a slightly smaller executable.
Re:Experimental support for WebAssembly in V8 by tanlermin on Tuesday March 15, 2016 @03:56PM (#11292498)
But they will still need to be interpreted ie cpython.

I'm not sure how much space just cutting out the GC will save?

Re:Experimental support for WebAssembly in V8 by esailija on Tuesday March 15, 2016 @04:20PM (#11292655)
GC is only a small part of a high level language runtime.
Re:Experimental support for WebAssembly in V8 by PuercoPop on Tuesday March 15, 2016 @07:12PM (#11293768)
Nitpick: What doesn't make sense is 'compiled language'. The term is non-sensical. Languages are not interpreted or compiled, implementations are (sometimes both like cpython). As a counter example, cl-javascript[0] compiles javascript to common Lisp

[0]: http://marijnhaverbeke.nl/cl-javascript/

Re:Experimental support for WebAssembly in V8 by bpicolo on Tuesday March 15, 2016 @12:13PM (#11290708)
> Javascript isn't a compiled language

I mean, it is if you compile it to wasm. It is definitely JIT compiled.

Re:Experimental support for WebAssembly in V8 by Touche on Tuesday March 15, 2016 @12:14PM (#11290727)
Then you have to ship your own GC with it.
Re:Experimental support for WebAssembly in V8 by cstrahan on Tuesday March 15, 2016 @12:51PM (#11291018)
I think you misunderstand what WebAssembly is about.

As I understand it, it's little more than a binary serialization of JavaScript ASTs. In which case, no, you don't need to ship your own GC with it.

I mean, you could always write a JavaScript interpreter in JavaScript, and then compile that into WASM, in which case, yes, you'd ship your own GC. I don't see why you would feel the need to do that for real world applications, though.

Re:Experimental support for WebAssembly in V8 by Touche on Tuesday March 15, 2016 @12:53PM (#11291040)
> I think you misunderstand what WebAssembly is about.

I don't, WebAssembly is about C++, primarily. Every design decision has been to support C++. Everything else is an afterthought that will come later. WebAssembly isn't about minifying your JS.

Read this: https://github.com/WebAssembly/design/blob/master/GC.md GC, DOM access, etc. don't exist in WebAssembly code, yet.

Re:Experimental support for WebAssembly in V8 by bpicolo on Tuesday March 15, 2016 @01:27PM (#11291336)
It's C++ first as a convenience, since LLVM is best at C++ and emscripten w/asm is a solid benchmark. It is NOT primarily about C++ just because that's the v1.

https://github.com/WebAssembly/design/blob/master/FAQ.md#whi...

Re:Experimental support for WebAssembly in V8 by ZenoArrow on Tuesday March 15, 2016 @03:02PM (#11292146)
It's not about C++ primarily, it's about building on the base which asm.js laid out. C++ would only feature in this because of Emscripten.
Re:Experimental support for WebAssembly in V8 by AgentME on Tuesday March 15, 2016 @01:42PM (#11291484)
WebAssembly is a compact serialization of asm.js, not of arbitrary Javascript.
Re:Experimental support for WebAssembly in V8 by DonHopkins on Tuesday March 15, 2016 @02:44PM (#11291997)
That's true of version 1, but supporting arbitrary JavaScript is on the roadmap (step 3, "everything else" [1]). Which will be awesome!

What I'd love to be able to do with tools like Unity3D that compile C# and other CLR languages into asm.js, would be to pass JavaScript objects directly in and out of the C# code so you can manipulate the underlying JavaScript objects directly from C# with little or no overhead.

Right now of course you can implement JSON libraries in C#, but it's indirectly and inefficiently layered on top of the flat memory model of asm.js. I want to be able to use the native JavaScript objects and libraries directly from other languages like C# that compile into JavaScript. That would be ideal!

To do that, asm.js would need a way to store references to garbage collected JS objects somewhere, somehow, using proxies or handles represented in linear memory, opaque reference types [2], or some other magic like that, like Apple's JavaScript/Objective C bridging stuff [3].

[1] http://bytecrafter.blogspot.nl/2015/06/a-quick-overview-of-w...

[2] https://github.com/WebAssembly/design/blob/master/GC.md

[3] https://developer.apple.com/library/mac/documentation/Cocoa/...

Re:Experimental support for WebAssembly in V8 by geon on Tuesday March 15, 2016 @03:41PM (#11292405)
Interesting. But then it wouldn't really be compilation, but parsing + serialization. I guess the distinction is rather pointless.
Re:Experimental support for WebAssembly in V8 by ludamad on Tuesday March 15, 2016 @02:22PM (#11291828)
This conversation was confusing until I read this point
Re:Experimental support for WebAssembly in V8 by xigency on Tuesday March 15, 2016 @12:45PM (#11290975)
My initial reaction was for software with a flat memory footprint, so it really doesn't require garbage collection. Our application could be written in C, if we weren't web developers who are working in JavaScript.

No one wants to do web development in C++ honestly, but they would like the performance.

Re:Experimental support for WebAssembly in V8 by tracker1 on Tuesday March 15, 2016 @01:41PM (#11291469)
I could see this functioning really well with webworker once some sort of thread-safe representation is in place for quickly moving objects in/out of said worker... Would be a pretty clean separation of WebAssembly code, and the DOM accessible code by convention... even if sticking to object serialization (JSON), it would be pretty clean...

With IE9 support slipping, it seems to be a no-brainer in terms of support at this point too [1].

I'm also thinking this could be a huge win once it hits node.js (v6?), as this could be a great answer to better binary module support. As binary modules are a bit of a pain to support, and prebuilt binary modules are in a hodge-podge state.

[1] http://caniuse.com/#feat=webworkers