Asi bych uprednostnil „zkompilovat“, ale „skompilovat“ taky neni uplne spatne, slova jako „sbalit“, „srovnat“ znamenaji v podstate totez a predpona „s“ zde ma stejnou logiku. No a pri vyvoji pro Linux vyju docela casto… Takze na Clang/LLVM se docela tesim, treba budu konecne mene vyvyjet a vice vyvijet:-)
Ne tak úplně. Kompilace je především změna stavu, proto „z-“. „Sbalit“ a „srovnat“ označují činnosti, kde se něco skládá fyzicky k sobě/dohromady, aniž by se to nějak měnilo.
Nicméně v jazyce neplatí vždycky tak úplně jasná logická pravidla. A v situacích, kdy je možná dvojí interpretace prostě rozhoduje to, co je zavedené. „Skompilovat“ jsem zatím neviděl a ta interpretace mi navozuje celkem jednoznačně představu někoho, kdo pomocí pěstí či jiných hrubých metod provádí něco nepěkného někomu (něčemu) jinému. :-)
Clang, přesněji řečeno llvm, generuje kód srovnatelný s tím, jaký produkuje gcc 4.2 (dosavadní systémový překladač na FreeBSD, ale jinak považovaný za zastaralý). S gcc 4.4 se nedá srovnávat ani zdaleka, a to nemluvně o tom, že gcc teprve začíná využívat možností nového frameworku Graphite. Díky tomu se gcc začíná blížit úrovni srovnatelné s intelovským kompilátorem icc, u clangu ne něco takového hudbou vzdálené budoucnosti. Clang je skvělý nástroj je spoustou výhod, ale kvalita generovaného kódu k ním zatím rozhodně nepatří.
Ty mas hodne divoke predstavy, prej blizi se kvalitou kodu icc. Pokud to myslis tak, ze se blizi asymptoticky s casovou konstantou tak 100 let tak mozna :) Zatim je stale pro C a C++ nejlepsi icc pak visual c pak dlouho, predlouho nic, jeste jedno nic a teprve pak gcc a clang kteri si navzajem slapou na paty podle pouziteho testu.
Nebolo tazke najst benchmark, ktory vyvracia toto tvrdenie a to som si ho ani nemusel falsovat sam :)
http://eigen.tuxfamily.org/index.php?…
Pekný PR článok.
Oplatilo by sa ešte dodať, že oba produkty (clang+llvm a gcc) sú distribuované pod odlišnými licenciami.
Väčšine ľudí to je asi ukradnuté (je im jedno akú to má licenciu, hlavne že si svoj program vedia skompilovať).
Potom sú tu menšiny, ktoré majú nezmieriteľne opačné názory (určite chceme BSD vs. určite chceme GNU GPL).
Muze programator rict LLVM bytekodu (a tedy i programu v nejakem jazyce nad nim) veci typu „tahle podminka je skoro vzdycky nepravdiva“?
p = malloc(…);
if (unlikely(!p))
fatal(„…“);
Jak se v LLVM udela instrukce pametove bariery (nutna napriklad pro user-space RCU)?
Jak se v LLVM rekne „pokud nekdo zavola tuhle funkci ve void kontextu, ma dostat warning“, umi podminenou kompilaci podle konstantnosti argumentu? Treba gcc dela veci typu memcpy() jinak, pokud je velikost argumentu znama. Jde tam rict „tenhle argument funkce je printf-like formatovaci string, davej warning pokud nasledujici parametry maji odlisne typy nez se pise ve stringu“?
-Yenya
1) clang ma __builtin_expect
2) http://llvm.org/…LangRef.html#…
3) nerozumim otazce, co je void kontext?
4) llvm ma ruzne optimalizace, zrovna memcpy tam takhle optimalizovane myslim
neni
5) checkovani parametru C funkci je zalezitost C frontendu… clang parametry printfu checkuje
„LLVM používá jako svůj optimalizační backend v podstatě každý „open source jazyk“, který existuje“ – to je veľmi nepresne povedané a veľmi zavádzajúce, taký python llvm nepoužíva ani náhodou. Existuje alternatívna implementácia pythonu, ktorá sa snaží použiť llvm (unladen swallow), ale od kvality mainstreamovej má ďaleko.