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

'Transpiling' since it kind of converts to a scripting language not a native code.


Transpiling is also known as source-to-source compilation.


To add to this, transpiling is a kind of compiling where the source code and target code have roughly the same level of abstraction. asm.js does appear to be more "low-level" than quake bytecode, so this is compiling, and not transpiling.


asm.js is portable assembly with a jit assembler. In that sense, it's even closer to "native code" than C, as C requires a separate compilation step.


I am confused, there are JIT compilers for C:

http://code.google.com/p/asmjit/

http://homepage1.nifty.com/herumi/soft/xbyak_e.html

How is asm.js different to those?


He's trying to conjure up a difference that just isn't there in practice. Compilation is compilation, regardless of the number of times it's performed, and regardless of whether or not the result is stored for future use.


Embedding jit assemblers into C binaries is different than jit-ing the C language itself.


So is asm.js not run from a binary, that compiles the js JIT? C JIT compilers compile C code JIT, I still don't see the difference.

The two projects I linked to were incorrect, they are for interpreting asm JIT.

What I meant to point to were:

http://root.cern.ch/drupal/content/cling

https://metacpan.org/pod/C::TinyCompiler


Thanks for the pointers. Looks like asm.js and C are on par as portable assembly targets. The one difference is that asm.js is ready to use by half a billion users, the other is that no sane human should code asm.js directly, whereas some people swear by C as a language for humans. Allow me to clarify the initial statement:

> For 99.9% of the end users, asm.js it's even closer to "portable native code" than C, as C is usually delivered to end users as a precompiled binary via a separate compilation step, therefore no longer portable.


The reason people call C portable assembly is because it's about as low as you can go without coding in assembly, and still have it compile to various platforms.

You are really comparing asm.js and C as portable assembly emitters rather than targets. That said, people very occasionally use C as a target like they use asm.js, e.g. the original C++ compilers, the mars rover.

asm.js is as low as you can seemingly go and have it run in a modern version of Chrome and Firefox, but those requirements prevent it from being a portable assembler in the sense that C is. In addition, it's sensible to write your program in another language first before asm.js, as I understand it.

There's a whole swathe of machines (rather than users) out there that cannot run a modern version of those browsers, i.e. asm.js is not portable to them.

When the code being written in and transposed from is asm.js and the destination is some other language - then asm.js will be portable assembler in the sense that C is.


That's not true at all.

Asm.js is just a subset of JavaScript that is far more machine-friendly than it is human-friendly. Having a worse syntax than C or normal JavaScript doesn't mean that it's closer to native code or anything like that.

And the compilation step is still there in both cases. It doesn't matter if it's just-in-time compilation or ahead-of-time compilation; it's still compilation, and it's still there.


Precisely. Until there are CPUs with direct asm.js support (hopefully not though).


'Translation' would be the word of choice from PL literature. But there's such a significant transformation going on here that compiling seems quite apt.




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

Search: