Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

every language eventually compiled into low-level computer language?

Isn't every language compiled into low-level computer language?

If so, shouldn't all languages have the same performance?

Just wondering...

like image 760
never_had_a_name Avatar asked Jun 06 '10 01:06

never_had_a_name


1 Answers

As pointed out by others, not every language is translated into machine language; some are translated into some form (bytecode, reverse Polish, AST) that is interpreted.

But even among languages that are translated to machine code,

  • Some translators are better than others
  • Some language features are easier to translate to high-performance code than others

An example of a translator that is better than some others is the GCC C compiler. It has had many years' work invested in producing good code, and its translations outperform those of the simpler compilers lcc and tcc, for example.

An example of a feature that is hard to translate to high-performance code is C's ability to do pointer arithmetic and to dereference pointers: when a program stores through a pointer, it is very difficult for the compiler to know what memory locations are affected. Similarly, when an unknown function is called, the compiler must make very pessimistic assumptions about what might happen to the contents of objects allocated on the heap. In a language like Java, the compiler can do a better job translating because the type system enforces greater separation between pointers of different types. In a language like ML or Haskell, the compiler can do better still, because in these languages, most data allocated in memory cannot be changed by a function call. But of course object-oriented languages and functional languages present their own translation challenges.

Finally, translation of a Turing-complete language is itself a hard problem: in general, finding the best translation of a program is an NP-hard problem, which means that the only solutions known potentially take time exponential in the size of the program. This would be unacceptable in a compiler (can't wait forever to compile a mere few thousand lines), and so compilers use heuristics. There is always room for improvement in these heuristics.

like image 152
Norman Ramsey Avatar answered Sep 23 '22 16:09

Norman Ramsey