
Originally Posted by
Anandh
Hello there,
Am newbie in this compiler arena. I have little difficult in understanding various compiler and what does it actually means front-end and back-end in the context of compiler (e.g. I read LLVM compiler used as back-end for Clang.)
Is Clang/LLVM and Apple-LLVM (
https://developer.apple.com/technologies/tools/) are all just same. Or is there any difference in that. Someone can please enlighten me on this. or even pointer to some good article to understand would be great.
Thanks / Anandh
Hi,
Some of my answers will be simplified.
Apple/LLVM and clang/LLVM are basically same thing.
Front-end contains the lexer (source code -> token stream), syntax analyzer (token stream -> AST), semantic analyzer (AST -> Intermediate Code).
Back-end contains the code generator (Intermediate Code -> Machine Code -> Object File).
Not sure whether the linker is part of the back-end or counts as a different module, but it does the (Object File(s) -> Binary) part.
When you call
Code:
clang <options> <sourcefile1, ...>
you basically run your source files through all these phases.
As long as the difference between clang and gcc, there's not much. If you are going to program in Objective-C, then clang is MUCH better, but if C/C++ is your game, they both will perform perfectly fine. What systemd rulez said is complete bullshit.
Better in clang: (a bit) better C++11 support, faster compile times, modular structure
Better in gcc: more front-ends (more programming languages are supported), more architectures are supported
The best thing you can do is write your code in a compiler independent way (normally this should not be a problem) and when you have production ready code, then benchmark the two binaries to see which one is better at that point.
This was my answer, hope it helped.
Unrelated:
systemd rulez, are you the kind of person who always wanted an Apple device, but could never get one, so your "revenge" is calling everything Apple makes shit? I mean, your answers were so retarded, that I laughed my ass off! FYI you can donwload the source code of clang, so you can even check on that little "surveillance capability" which doesn't exist...