Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

What is this "web bytecode" you are referring to?


I have no idea what people are talking about here (web bytecode and web assembly doesn't make any sense to me... thought the latter probably is intended to mean asm.js which is just a subset of js that allows for optimization based on the limitation of this subset).

They compiled C/C++-code using Clang (or possible gcc w/dragonegg, but my guess is Clang 3.2 as that's the supported compiler for emscripten) to LLVM bytecode and then to JS/HTML5 using emscripten, which is aware of asm.js and optimizes for it.

Mozilla (which Kripken is also highly involved with) are behind asm.js and is supported in the latest nightly of firefox (supposedly giving speeds to within 2x of native code, which is damn impressive), and the guy behind emscripten (again, Kripken) works for Mozilla.

I'm don't know to what extend emscripten is part of Mozilla or his own personal project.

---- Slides by Kripken on emscripten (http://kripken.github.io/mloc_emscripten_talk)


The "web bytecode" refers to the fact that the two script files are bytecode and not readable js.

Download them with: 1) curl "http://cdn.unrealengine.com/html5-4c0913f/UDKGame-Browser-Sh... -H "Referer: http://www.unrealengine.com/html5/ > UDKGame-Browser-Shipping.js

2) curl "http://cdn.unrealengine.com/html5-4c0913f/UDKGame_Data.js -H "Referer: http://www.unrealengine.com/html5/ > UDKGame_Data.js

And all you get is 5.4M / 4K of unreadable bytecode.


> And all you get is 5.4M / 4K of unreadable bytecode.

It's just gzipped. ungzip the files (turns 5 MB into 50 MB) and you can read them as plain text javascript.


Yes and no... once you hit the

   // EMSCRIPTEN_START_ASM
it becomes

    if((d|0)!=36620|(d|0)!=0&(c[b+4>>2]|0)!=0)
    {c[1779323]=6}b=c[1312365]|0;d=7084512;
    c[d>>2]=c[1312364]|0;c[d+4>>2]=b;b=7084520;
    d=c[b>>2]|0;if((d|0)!=36620|(d|0)!=0&(c[b+4>>2]|0)!=0)
    {c[1779323]=7}b=c[1312363]|0;d=7084520;
    c[d>>2]=c[1312362]|0;
all on one line for nearly the rest of the file. It might as well be bytecode. Actually many bytecodes are more understandable.


No, it's still JavaScript. The fact that it's compressed or not human-readable doesn't make it bytecode.


"It might as well be bytecode."


So can you add some dynamic code into asm.js and expect same performance? Asm.js is an assembly that looks like JavaScript for compatibility and readability.


No, asm.js code that parses successfully is compiled ahead of time. It is a strict subset of the JavaScript programming language. If you use parts other than the subset, it will fail to parse as valid asm.js code and revert to the interpreter/JITs.


Well yes, but the same is true of any minified JavaScript, handwritten or compiled. For example look at the output of the closure compiler minifier.


Minified Javascript does not operate on an enormous buffer of bytes, such that you get seven and eight digit numbers flying everywhere. It's still easier to understand and manipulate than ASM.

asm.js isn't just an evocative name, it's a reasonable description... it's assembly in Javascript.


THERE is the code. LOL, I actually did not spot it in the file and asked myself "just where the ... is the code"?


Ah, that helps. I wonder why the gzip is not done automatically by curl/wget...


Yeah, it confused me at first as well, but I ran `file` to see what was going on and that clued me in.


It will if you pass in --compressed flag, e.g.:

   curl --compressed "http://cdn.unrealengine.com/html5-4c0913f/UDKGame_Data.js" -H "Referer: http://www.unrealengine.com/html5/" -O




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: