Portál AbcLinuxu, 18. říjen 2017 02:32

LLVM a Clang – více než dobrá náhrada za GCC

18. 9. 2013 | Luboš Doležel
Články - LLVM a Clang – více než dobrá náhrada za GCC  

GCC po dlouhou dobu bylo prakticky jedinou věcí, která by člověka napadla při spojení Linux a kompilátor jazyka C. V posledních letech se ale klidné vody začínají čeřit. Co je to LLVM a co s tím má společného Clang?

LLVM, dříve zkratka názvu Low Level Virtual Machine, je původně univerzitní projekt, který vznikl už v roce 2003. Navzdory názvu nejde primárně o další nástroj pro virtualizaci, nýbrž o kompilátor, respektive o univerzální backend, jenž dodává potřebnou infrastrukturu pro vývoj kompilátorů pro různé programovací jazyky.

LLVM jako takové zpracovává mezikód (intermediate form code) vytvořený z původního kódu od programátora, dokáže jej zoptimalizovat a na jeho základě emitovat kód v podobě instrukcí pro vybranou hardwarovou platformu, a to i za běhu programu (JIT). LLVM původně žilo ve stínu GCC, tudíž nepřekvapí, že původně bylo LLVM používáno jako náhrada backendu v GCC: překladače různých jazyků z nabídky GCC byly portovány tak, aby s nimi mohlo být používáno LLVM pro generování kódu. Na Linuxu jste se s tímto hybridem asi moc nesetkali, na OS X se ale LLVM-GCC od roku 2008 běžně používá.

Obsah

Clang?

link

V první řadě je nutné podotknout, že označení GCC je lehce matoucí. GCC totiž označuje jak sadu kompilátorů (GNU Compiler Collection) pro různé jazyky (C++, Java, Fortran, ...), tak i název kompilátoru pro jazyk C a příbuzné ze sady GCC. Snad i proto nejsou lidé, co používají GCC jen pro jazyk C, zvyklí rozlišovat mezi backendem kompilátoru a frontendem pro určitý jazyk. A není divu, protože historicky byla zkratka GCC znamenala pouze GNU C Compiler, podpora dalších jazyků přišla až později.

Clang je tedy frontendem pro LLVM, který si poradí s jazyky C, C++ a Objective-C(++). Jako uživatel se nemusíte nějakými frontendy-backendy zabývat, zajímá vás především to, jak se kompilátor používá. Clang se spouští pomocí clang a clang++, což je obdoba gcc a g++. Samotné parametry pro kompiltátor jsou při běžném použití mezi Clangem a GCC identické, nemusíte se tedy učit nic nového.

Řada voleb dostupných v GCC je u Clangu s varovným hlášením ignorována – to se týká jak parametrů na příkazové řádce, tak například různých __attribute__((něco)), co všemožně najdete. Občas můžete při používání Clangu narazit na větší přísnost – taková ukázka:

int funkce()
{
        return;
}

Tento evidentně zvrácený kód bude pod GCC zkompilován s pouhým varováním, kdežto pod Clangem dostanete chybu. (Nevylučuji, že Clang nějak přinutíte to akceptovat.)

$ gcc -c test.c -Wall
test.c: In function ‘funkce’:
test.c:3:2: warning: ‘return’ with no value, in function returning non-void [-Wreturn-type]

$ clang -c test.c -Wall
test.c:3:2: error: non-void function 'funkce' should return a value [-Wreturn-type]
        return;
        ^
1 error generated.

Pokud se dostanete k podobně zběsilému kódu, odhadem napsanému kdysi v devadesátých létech programátorem, co už je teď asi v důchodu, nesnažte se to ohýbat přes koleno. Je to asi jako rozčilovat se, že jakási zprasená HTML stránka napsaná v roce 1997 nefunguje v poslední verzi Firefoxu.

Pro programátory ale Clang nabízí zajímavé funkce. Pravdou je, že se vývojáři GCC snaží v tomto Clang dohnat, ale už jen to je ukázkou přínosnosti Clangu. Jde o srozumitelnost chybových hlášek. Už v ukázce nahoře můžete vidět, že Clang ukazuje řádek, na kterém se chyba nachází. Další drobností je to, že Clang používá ve výstupu na terminál barvy, takže chyby a varování vidíte na první pohled.

Clang

Na stránkách Clangu najdete celý přehled situací, kdy jsou jeho hlášky srozumitelnější než při použití GCC, my si tady ukážeme jen jednu jednoduchou situaci:

Clang

Podotýkám, že Clang při linkování programu používá systémový linker (ld). Pracuje se ale na LLVM linkeru LLD.

libc++

link

Knihovna libstdc++ je implementací standardní knihovny C++ a je součástí GCC. Není tedy divu, že vznkl projekt libc++, který mimo jiné pomáhá Clangu k nezávislosti na GCC.

Vznik libc++ má ale i další důvody. Tím prvním je licence – libstdc++ 4.2 je poslední verze, která vyšla pod licencí GNU GPLv2, další verze jsou už pod GPLv3, která ale nemusí být pro všechny přijatelná. libc++ je pod volnějšími licencemi MIT a UIUC (BSD-like). Ostatní alternativní implementace standardní knihovny C++ jsou navíc mrtvé – jak STLport, tak STDCXX – takže jich určitě není přehršel. Autoři k tomuto uvádějí, že doplnění podpory pro C++11 do těchto již nevyvíjených knihoven by se stejně rovnalo přepisu.

libc++ se už teď dostává do linuxových distribucí, na Gentoo ji například najdete pod názvem sys-libs/libcxx.

API je grunt

link

LLVM i Clang byly psány s ohledem na znovupoužitelnost, a to nejen jako kompilátor. Clang například poskytuje céčkovou knihovnu libclang obalující vnitřní API Clangu a najde nejčastěji využití při parsování zdrojového kódu a jeho analýzu. To představuje obrovský přínos například pro vývojářská IDE, a to pro možnost okamžité kontroly zdrojového kódu před kompilací. Tuto funkci najdete v linuxových IDE i bez použití Clangu (napadá mě třeba Eclipse), kvalita těchto analyzérů je ale dosti bídná; typicky si stěžují více, než je potřeba. API Clangu dokáže rovnou doporučovat opravy kódu (třeba při překlepu v názvu volané funkce) a překvapivě není nijak komplikované.

Jednoduchý analyzér, co vypíše všechny chyby a varování na chybový výstup, může vypadat takto:

int main(int argc, char *argv[]) {
	CXIndex Index = clang_createIndex(0, 0);
	CXTranslationUnit TU = clang_parseTranslationUnit(Index, 0,
		argv, argc, 0, 0, CXTranslationUnit_None);
		
	for(unsigned I = 0, N = clang_getNumDiagnostics(TU); I != N; ++I) {
		CXDiagnostic Diag = clang_getDiagnostic (TU, I);
		CXString String = clang_formatDiagnostic (Diag,
			clang_defaultDiagnosticDisplayOptions());
		
		fprintf(stderr, "%s\n", clang_getCString(String));
		
		clang_disposeString(String);
	}
	
	clang_disposeTranslationUnit(TU);
	clang_disposeIndex(Index);
	
	return 0;
}

Nebudu tu ale dále vykrádat tuto prezentaci, ze které tento příklad pochází. Jinak na takovéto použití libclang můžete narazit například v Qt Creatoru.

Využití možná najdete i přímo pro API LLVM, se kterým si za běhu můžete nechat do paměti zkompilovat nějakou funkci a tu pak předat dál jako callback. Více najdete v tutoriálu pro JIT.

LLDB není databáze

link

LLDB je debugger, tedy nástroj pro ladění chyb v programech. O jeho vznik se zasadil Apple, a to aby mohl nahradit zastarávající verzi GDB na svých systémech něčím novým, schopným. A buďme za to rádi, konkurence je prospěšná i v open source.

Já osobně jsem totiž s GDB krajně nespokojený. Pro takovéto obyčejné použití celkem postačí, po letech používání ale začnete narážet na podivné chování (GDB pošle samo sobě SIGSTOP), pády GDB (laděný program často „sejme“ i debugger) a další podivnosti (GDB mi při auto-completion nabídne funkci pro breakpoint, pak ale řekne, že je nedefinovaná). Nepochybuji o tom, že řadě z vás GDB plně vyhovuje, nicméně i takové Valve se už zajímá o možnosti vylepšení LLDB, protože GDB je moc neuspokojuje.

Na LLDB zatím na Linuxu moc nenarazíte. To je mimo jiné způsobeno tím, že LLDB je určené primárně pro OS X a na ostatní platformy je teprve portováno. Balíček s LLDB ale najdete například na Debianu, a to v sekci experimental. Řada příkazů je podobná GDB, ostatní se snadno naučíte. Vývojáři LLDB se snažili do příkazů zavést větší logiku a jednoznačnost.

Pokud poohlédneme od příkazového rozhraní k vývojovým prostředím, zjistíte, že s GDB to není žádná legrace. Různá IDE, ať už KDevelop, Eclipse nebo Qt Creator, používají gdb spuštěné v podprocesu, kterému předávají příkazy úplně stejným způsobem, jako by uživatel GDB používal přímo. To je krajně nepraktické a často dosti nestabilní. GDB bohužel nebylo nikdy navrženo tak, aby sloužilo jako API pro jiné programy (stav je v globálních proměnných apod.), takže to ani jinak nejde. Právě v tom se LLDB liší – stejně jako ostatní projekty okolo LLVM je vnitřní API určeno k používání ostatními programy.

Podobně jako GDB je LLDB možné řídit nebo rozšiřovat pomocí skriptů v Pythonu.

Další využití LLVM a Clangu

link

Pokud vás alespoň trochu zajímá 3D grafika a akcelerace, tak jste pravděpodobně slyšeli o LLVMpipe. Jde o softwarový rasterizér, tedy o řešení pro systémy, kde 3D akcelerace není z nějakého důvodu dostupná. Z principu jde o velmi pomalou věc (hry si s tím moc nezahrajete), LLVM zde však díky dynamickému překladu kódu pomáhá tomu, aby toto nouzové řešení posloužilo alespoň v méně náročných situacích (například při používání OpenGL pro skládání obsahu obrazovky v GNOME).

Crosscompilátorům, neboli kompilátorům, co na stroji s jednou architekturou dokáží vytvořit binárku pro jinou architekturu, díky Clangu/LLVM tak trochu zvoní hrana. Zatím jsem ještě neměl čest takto LLVM používat (takže neumím posoudit, jak moc snadno použitelné to je), ale jediná verze LLVM dokáže už z principu generovat kód pro různé platformy. Na Gentoo se tato možnost aktivuje USE flagem multitarget, kompilátor pak můžete použít třeba takto:

clang -target armv7--eabi -mcpu=cortex-a9 -c soubor.c

Pořád sice potřebujete knihovny pro cílovou architekturu pro linker, nemusíte ale pro každou architekturu mít oddělenou kopii kompilátoru.

Cling je interaktivní interpreter jazyka C++, který využívá schopnost JIT kompilace v LLVM. Programátoři v C++ s ním získávají schopnosti, kterých si běžně mohou užívat jen programátoři ve skriptovacích jazycích. Cling není prvním projektem tohoto typu, který v Cernu vznikl – CINT je jakýmsi předchůdcem Clingu, avšak s tím rozdílem, že zatímco Cling může využívat bohatých schopností Clangu a LLVM, CINT musí věci řešit po svém. To vysvětluje těch necelých 400 000 řádek kódu, které CINT obsahuje...

Zmíním zde ještě projekt libcpu. Jde o velice zajímavý nápad, kdy je zdrojem dat pro LLVM již zkompilovaný kód a smyslem je překompilovat jej pro jinou platformu. Tento projekt sice moc nežije, při googlení ale narazíte na zajímavé informace o tom, jakým překážkám musí člověk při řešení této úlohy čelit. Jde například o to, že instrukce procesorů jsou příliš nízkoúrovňové, aby je šlo lehce přeložit do nějaké vyšší myšlenky, kterou by šlo dále zoptimalizovat. Na výstupu je tedy vždy znatelně více přeložených instrukcí, než kolik bylo původních.

Zapojení Apple

link

Apple je na vývoji Clangu/LLVM silně zainteresován a důvodem je už výše zmiňovaný přechod GCC na GNU GPLv3. Apple na GCC silně závisí (závisel) a od tohoto přechodu zůstal zaseknutý na posledních verzích, co vyšly pod starou licencí. Přechod open source projektů ke GPLv3 je údajně i jedním z důvodů zvýšeného výskytu děravých knihoven na systémech od Apple. Nedrží totiž krok s bezpečnostními opravami, jež se v nových vydáních knihoven vyskytují.

Proto Apple logicky podporuje projekt pod jemu příjemnější (volnější) licencí. Znamená to sice, že může pracovat na funkcích, které pak komunitě v podobě zdrojového kódu neuvolní, na druhou stranu je Apple určitou zárukou rozvoje LLVM/Clangu do budoucna. Navíc proprietární vylepšení v kompilátoru nejsou v roce 2013 při výkonu dostupných procesorů zázračným obchodním artiklem – spíše by šlo o komplikaci pro samotný Apple.

Třebaže se Apple netěší mezi uživateli Linuxu velké popularitě, svobodný kód zkrátka nesmrdí.

Další články z této rubriky

LLVM a Clang – více než dobrá náhrada za GCC
Ze 4 s na 0,9 s – programovací jazyk Vala v praxi
Reverzujeme ovladače pro USB HID zařízení
Linux: systémové volání splice()
Programování v jazyce Vala - základní prvky jazyka

Diskuse k tomuto článku

18.9.2013 00:57 mpel
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Odpovědět | Sbalit | Link | Blokovat | Admin
gcc -fdiagnostics-color=auto
Jardík avatar 18.9.2013 02:46 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Jup, GCC už dávno umí barvičky a taky chybové hlášky se zlepšily.
Věřím v jednoho Boha.
Marián Kyral avatar 18.9.2013 09:26 Marián Kyral | skóre: 29 | blog: Sem_Tam | Frýdek-Místek
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
No dávno. Na Gentoo mám stále 4.7.3 a ta barvičky neumí. No a 4.8 je zatím stále hard masked.
Jardík avatar 18.9.2013 13:30 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
4.8.1 mám už v Archu nějaký pátek :-) Nechápu, proč se vývojáři některých distribucích (ehm většiny) drží zuby nechty zastaralého softwaru, přestože nová verze přináší opravy chyb a pak je backportují jak opice.
Věřím v jednoho Boha.
Jakub Lucký avatar 18.9.2013 13:41 Jakub Lucký | skóre: 40 | Praha
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
protože když na takovém systému provozuješ nějakou vlastní (nebo někým jiným) naprogramovanou ***, tak se ti to s upgradem dost může rozbít. A nic není horší, než rozlícení zákazníci, kterým jsi něco rozbil...
If you understand, things are just as they are; if you do not understand, things are just as they are. (Zen P.) Blogísek
Jardík avatar 19.9.2013 01:37 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
No já se nechcu hádat, ale jak může nové gcc rozbít nějaký program mi nejde do hlavy. Nebo proč by jím neměl jít zkompilovat? Snad pokud dodržuji standard jazyka, tak mi to nová verze kompilátoru nemůže rozbít, ba naopak bych řekl, že ten standard bude zvládat lépe. (ehm).
Věřím v jednoho Boha.
19.9.2013 06:36 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC

Upgrade toolchainu bývá jeden z nejrizikovějších. Kromě obvyklých problémů, které jsou u jakéhokoli balíku, v tomto případě musíte počítat i s tím, že nezanedbatelné procento balíčků v distribuci s novou verzí najednou z různých důvodů nepůjde přeložit. U gcc nejčastěji bývá důvodem větší přísnost na syntaxi, kdy konstrukce, které dříve prošly s warningem, najednou způsobí tvrdou chybu. No a podle očekávání jsou to nejčastěji právě ty balíčky, které nejsou zrovna nejaktivněji maintainované.

pokud dodržuji standard jazyka

Standard, který většina programátorů nikdy neviděla, protože oficiálně ho ani nemohou získat jinak než že si ho koupí za ne zrovna zanedbatelnou částku (nebo si pokoutně stáhnout odněkud draft). A to nemluvím o jeho rozsahu.

Jakub Lucký avatar 19.9.2013 08:16 Jakub Lucký | skóre: 40 | Praha
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
kromě všeho, co napsal pan Kubeček jsou to taky bugy. Nový kód v kompileru jsou nové bugy a nové bugy ve vygenerované binárce jsou spousta nových problémů (někde níže se píše o nekonečné smyčce v Postgresu)

Tenhle bleeding-edge SW je super na svůj domácí vývoj, ale když ty buildy jdou do celého světa, tak bych se držel osvědčených verzí...
If you understand, things are just as they are; if you do not understand, things are just as they are. (Zen P.) Blogísek
pavlix avatar 19.9.2013 10:49 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
No já se nechcu hádat, ale jak může nové gcc rozbít nějaký program
Čekej reakce lidí, kterým se to děje dnes a denně. Například u NetworkManageru běžně selhává kompilace na Gentoo kvůli warningům proměněným v errory. Dokonce mám pocit, že to ani není upstream verzí GCC ale nějakými úpravami výchozí konfigurace, ale to je čirá spekulace.
Snad pokud dodržuji standard jazyka
Teoretik idealista? Zrovna ty warningy eskalované na errory jsou jeden příklad za všechny. Úpravy bývají triviální, ale pokud jde o celou distribuci, je toho dost.
19.9.2013 11:06 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
U malého one-man-show projektu se dá s dostatečně pevnou vůlí dodržovat "no warning" politika. U většího projektu, kam přispívá spousta různých lidí, je to téměř nadlidský úkol a obdivuji ty, komu se to přesto daří.
Josef Kufner avatar 19.9.2013 13:30 Josef Kufner | skóre: 67
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Nestačí nepřijímat patche s warningem? Na to jde udělat jednoduše automatický test a prostě před merge vyžadovat, aby procházel.
Hello world ! Segmentation fault (core dumped)
19.9.2013 13:43 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Teoreticky ano. V praxi ale narazíte na to, že se někdy warning objeví jen v určitých verzích překladače, při určitých CFLAGS nebo jen při určitých kombinacích konfiguračních voleb. Třeba tady jsem si sice dal pozor, aby i při !CONFIG_SYSCTL (což je hodně neobvyklé) nevznikl dead code, ale už jsem přehlédl, že se tam pak objeví nepoužitý label.
pavlix avatar 19.9.2013 14:02 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
To je pravda. Dotyční pak mají na výběr jestli změní konfiguraci tak, aby jim build prošel nebo nahlásí chybu (a změní si případně konfiguraci dočasně).

Ale zrovna o tom jsem psal v 72.
pavlix avatar 19.9.2013 14:00 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Je to triviální. Stačí by default nastavit build tak, aby warningy, na kterých záleží, byly interpretovány jako chyby. A nikdo přece nezačlení patch, který ani nebuilduje.
stativ avatar 19.9.2013 11:05 stativ | skóre: 54 | blog: SlaNé roury
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Zapomínáš na bugy v kompilátoru.
Ať sežeru elfa i s chlupama!!! ljirkovsky.wordpress.com stativ.tk
Marián Kyral avatar 18.9.2013 15:43 Marián Kyral | skóre: 29 | blog: Sem_Tam | Frýdek-Místek
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
No na Gentoo předchází každému upgrade gcc rozsáhlé testování. Přece jen je to u distribuce kompilované ze zdrojáků jedna z nejpodstatnějších částí instalace. Ty máš možná nejaktuálnější gcc. ale určitě jím nemáš překompilovány všechny programy.
18.9.2013 21:23 mpel
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
$ cc -v 2>&1 |tail -n1

gcc version 4.9.0-pre9999 20130917 (experimental) commit 6b99cb5e6af1b911414c1b34d3a163b4b52a1ad7 (Gentoo 4.9.0_pre9999)

Mám tím překompilovány všechny programy (některé starším buildem pochopitelně). Gentoo konkrétně umožnuje používat víc verzí GCC zároveň a přepínat mezi němi pomocí programu gcc-config (Ví někdo, proč to není modul do eselect?), takže i když se něco rozbije, máte po ruce záložní řešení.
pavlix avatar 18.9.2013 21:42 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
některé starším buildem pochopitelně
?
gcc version 4.9.0-pre9999
A tušíš, proč je 4.8 na Gentoo stále hardmasked?
18.9.2013 22:14 mpel
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Starším buildem == 4.9.0-pre9999 se starším datem. Overlay "toolchain" nějak magicky zajistí, že při "emerge sys-devel/gcc" se z gitu stáhne bleeding edge verze. Když náhodou něco nejde zkompilovat, zkusím nejdřív poslední gitové a teprve potom (už si nepamatuju, kdy a s čím naposledy) nějaké starší.

Proč je právě teď oficiální 4.8 hardmasked opravdu netuším, proces odmaskovávání neznám. Bleeding edge (tehdy 4.8.0-pre9999) jsem začal používat v době, kdy bylo 4.7 oficiálně čerstvě stabilní a 4.6 pořád hard-masked. S verzemi označenými na gcc.gnu.org jako stabilní jsem problém snad nikdy neměl.

Jednou mi tehdy nestabilní 4.8 vygenerovala nekonečnou smyčku uprostřed PostgreSQL při CREATE TABLE :-) Ale na testovacím stroji mít bleeding edge překladače a knihovny mi už nějaký ten čas ušetřilo.
18.9.2013 22:39 Ivorne | blog: Ivorne
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Jakým způsobem ti může nejnovější gcc ušetřit čas?
18.9.2013 23:25 mpel
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Napíše varování na věc, kterou jsem před rokem nespravil a přehlídl. Spadlý program nemusím debugovat, ale prostě ho zkompiluju novým/jiným překladačem a spravím "nově vzniklé" problémy. Nové nástroje v testovacím prostředí pomáhají řešit problémy dřív, než stihnou nastat (při migraci nebo pádu ostré verze). Samozřejmě je pak třeba otestovat ještě proti starým/stabilním/používaným, což je ale jednodušší, protože všechno takto rozbité už někdo jiný spravil.

Není to v žádném případě stoprocentní, ale pomáhá to.
pavlix avatar 19.9.2013 14:04 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Proč je právě teď oficiální 4.8 hardmasked opravdu netuším, proces odmaskovávání neznám.
Jedním z kroků je navrhnout ho v bugzille.
18.9.2013 22:51 mimi.vx | skóre: 37 | blog: Mimi.VX | Praha
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC

protože je ještě dost věcí v bugzile které se s GCC-4.8 nepřeloží,

 

a další sranda je to že gcc-4.8 je dost oproti předchozím rozdílné viz http://gcc.gnu.org/gcc-4.8/porting_to.html

USE="-gnome -kde";turris
David Watzke avatar 19.9.2013 16:46 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Ví někdo, proč to není modul do eselect?
Existuje (či existoval?) eselect compiler, ale sám používám gcc-config, protože je to úplně jedno.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
coder avatar 19.9.2013 20:09 coder | skóre: 4 | blog: lINUKS
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Na archu je sice poslední gcc a poslední knihovny ale rozbíjí to možnost kompilace různých programů. To si na Gentoo nemůžou dovolit. Ale to ty určitě víš.
Luboš Doležel (Doli) avatar 18.9.2013 06:58 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Až od 4.9.
18.9.2013 07:34 Khardix
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Až od 4.9.
Na gcc 4.8.1 -fdiagnostics-color=auto funguje. Funguje i detekce $GCC_COLORS, která danou volbu zapíná automaticky, je-li nastavena (http://gcc.gnu.org/onlinedocs/gcc/Language-Independent-Options.html).
18.9.2013 07:36 Nemo
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Me to nefunguje a ani Google takovy prepinac nezna.
pavlix avatar 18.9.2013 09:09 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
...
David Watzke avatar 18.9.2013 10:49 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Domnívám se, že to jen někdo neumí použít Google (neví, co pro něj znamená znak "-" na začátku slova) :-)
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
pavlix avatar 18.9.2013 09:25 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Odpovědět | Sbalit | Link | Blokovat | Admin
Tento evidentně zvrácený kód bude pod GCC zkompilován s pouhým varováním, kdežto pod Clangem dostanete chybu. (Nevylučuji, že Clang nějak přinutíte to akceptovat.)
GCC umí být maximálně tolerantní, tedy dokáže zkompilovat snad vše, co zkompilovat jde. Tvrdé chyby hlásí snad jen když není zbytí. Nedá se říct, že by to bylo špatně, je to jedna z možností jak kompilaci řešit. Na druhou stranu libovolné warningy můžeš v tvrdé chyby proměnit vyladěním -Werror nebo můžeš zkusit -pedantic-errors.
Apple je na vývoji Clangu/LLVM silně zainteresován a důvodem je už výše zmiňovaný přechod GCC na GNU GPLv3. Apple na GCC silně závisí (závisel) a od tohoto přechodu zůstal zaseknutý na posledních verzích, co vyšly pod starou licencí.
Otázkou je, co tím Apple získal a co by ztratil použitím kompilátoru pod GPLv3. Popřípadě co by je stála analýza rizik a jejich zalepení (například patchováním GCC, pokud by to bylo nutné) a zda tu analýzu provedli.
Proto Apple logicky podporuje projekt pod jemu příjemnější (volnější) licencí.
Já chápu, že GPLv3 není zrovna pohodlná, ale konkrétně u kompilátoru si nejsem vědom toho, že by představovala až takový problém. Jestli třeba v Apple někdo nezdržoval GPLv3 GCC za jiným účelem (například odůvodněním LLVM). Ale rád se nechám poučit o jiných teoriích ;).
vpsFree.czKancelář, home office nebo freelancing?Gentoo
18.9.2013 12:11 Ivan
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
GCC umí být maximálně tolerantní, tedy dokáže zkompilovat snad vše, co zkompilovat jde. Tvrdé chyby hlásí snad jen když není zbytí. Nedá se říct, že by to bylo špatně, je to jedna z možností jak kompilaci řešit. Na druhou stranu libovolné warningy můžeš v tvrdé chyby proměnit vyladěním -Werror nebo můžeš zkusit -pedantic-errors.
Gcc dokaze zkompilovat i to co by se zkompilovat nemelo. V Ccku umoznuje definovat funkci uvnitr funkce, takze pokud na zacatku kodu zapomenete na jednu slozenou zavorku, tak gcc ohlasi chybu az na samem konci souboru. Proto je v uzitecne davat stredniky i tam kde syntakticky byt nemusi.

Na druhou stranu ma GCC i neco striktenejsi semantickou kontrolu u sablon nez ma MSVC. MSVC dokaze preparsovat sablonu i kdyz nezna definice typu v ni pouzitych. Gcc provadi (asi jenom castecnou) semantickou kontrolu sablon i kdyz je zrovna nepouzijete (instantiate).
18.9.2013 21:30 Sten
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
GCC (ve výchozím nastavení) zkompiluje to, co by podle libovolné verze C či C++ mělo jít zkompilovat, a odmítá jen to, co nikdy nebylo povoleno. Proto povoluje funkce ve funkcích nebo return bez hodnoty u funkce deklarované s návratovou hodnotou, zatímco brání definici šablon, které obsahují neznámé typy. (Existují ale i výjimky, třeba extern template GCC kvůli komplexnosti takové implementace nikdy neimplementovalo a po vypuštění extern template z C++11 to už ani neplánuje.)
18.9.2013 21:25 Sten
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Otázkou je, co tím Apple získal a co by ztratil použitím kompilátoru pod GPLv3. Popřípadě co by je stála analýza rizik a jejich zalepení (například patchováním GCC, pokud by to bylo nutné) a zda tu analýzu provedli.
Apple používá Objective-C a Objective-C++. Pro ladění těchto jazyků (a třeba nedávno zavedený automatický reference counting) se interně lépe strukturované LLVM hodilo. Stejně jako pro JIT kompilace, třeba implementace OpenGL v MacOS X se JIT kompiluje podle hardware, na kterém se spustí.
Já chápu, že GPLv3 není zrovna pohodlná, ale konkrétně u kompilátoru si nejsem vědom toho, že by představovala až takový problém. Jestli třeba v Apple někdo nezdržoval GPLv3 GCC za jiným účelem (například odůvodněním LLVM). Ale rád se nechám poučit o jiných teoriích ;).
Pro JIT kompilace může GPLv3 představovat problém.
pavlix avatar 19.9.2013 14:07 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Pro JIT kompilace může GPLv3 představovat problém.
Zajímavé.
18.9.2013 09:50 jka | skóre: 10
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Odpovědět | Sbalit | Link | Blokovat | Admin
Článek je dobrý jako nástin.

Pro spoustu mnohem zajímavějších "fíčur" doporučuji mrknout na loňskou a letošní prezentaci z Going Native. Z počátku jsem byl skeptický a zaujatý, když začal kritizovat GCC, ale rychle mě přesvědčil konkrétními technickými příklady místo nějakých náboženských sporů o licenci.

A naprosto mě dostala ukázka detekce runtime chyb, race conditions a vůbec věcí, které běžně ladit je peklo.

http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/Clang-Defending-C-from-Murphy-s-Million-Monkeys

http://channel9.msdn.com/Events/GoingNative/2013/The-Care-and-Feeding-of-C-s-Dragons
18.9.2013 10:33 Ondra
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Odpovědět | Sbalit | Link | Blokovat | Admin
Comparison of Diagnostics between GCC and Clang
18.9.2013 10:56 Karel
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Ano, ale to všechno je až od verze 4.8... je až s podivem, jak dlouho se vývojáři GCC stavěli k těmto věcem stylem "správnej programátor chyby nedělá, takže tohle implementovat je ztráta času". A hle, stačí pár let a klesající popularita jim ukázala co si o tom myslí ostatní :-P. Už jenom kvůli zdravému soupeření, zlatý Clang ;-).
pavlix avatar 18.9.2013 11:21 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
+1

Nebýt Clangu tak GCC žádné takové vlastnosti nemá.
18.9.2013 15:01 chrono
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Skôr išlo o "správny programátor používa IDE".
pavlix avatar 18.9.2013 16:05 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
s/IDE/GNU Emacs
q66 avatar 18.9.2013 18:11 q66 | skóre: 32 | blog: Q's CZ devblog
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
s/GNU Emacs/vim/
pavlix avatar 19.9.2013 14:07 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
To by tak trochu postrádalo ten vtip.
18.9.2013 21:42 mpel
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Ale správnej programátor opravdu chyby nedělá; frustrováni ošklivými hláškami jsou programátoři opatrnější ;-)

Větší problém (který zatím moc neřeší ani jedna strana) podle mě je, že některé knihovní třídy mají poměrně bohatou hierarchii (a to i STL, některé implementace k tomu přidávají ještě své úrovně abstrakce) a uživatel nedostane chybu na úrovni svého kódu, ale na všech úrovních po cestě. Sebesprávnější programátor má potom smůlu, protože se kvůli jednomu překlepu topí v hláškách cizího kódu.

Třeba už to ale nějaké cool IDE vyřešilo a pro svoji ignoranci o tom nevím - představoval bych si takové hlášky rozklikávací s náhledy kódu při najetí myší nad danou třídu, což s clang[++]em/LLVM určitě nebude problém.
19.9.2013 07:58 vitamin
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
To je skor problem c++ ktory bude snad vyrieseny v dalsom standarte c++1y pridanim Concepts Lite: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3580.pdf
progdan avatar 18.9.2013 10:34 progdan | skóre: 34 | blog: Archař | Teplice/Brno
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Odpovědět | Sbalit | Link | Blokovat | Admin

S pouzitim Clangu pro parsovani kodu v IDE si uz pohravali v QtCreatoru (ja na to i branch v gitu) - problem je, ze je to radove pomalejsi nez "naivni" implementace, kterou vetsina IDEcek pouziva, takze na obarveni klicoveho slova nebo doplneni nazvu metody za tecku/operator-> se musi cekat, coz urcite zadneho programatora nepotesi :-) Z toho duvodu se to zatim jeste nikde moc neujalo.

Collecting data is only the first step toward wisdom, but sharing data is the first step toward the community.
18.9.2013 13:43 extremni lama | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Nevim jestli tohle v tom clang API nejak neresi, ale dalsi problem bych videl v tom ze normalni parser asi bude na obarvovani/doplnovani moc prisnej. Na to se bude spis hodit neco co ten kod jen tak proleti a moc nekontroluje jestli je spravne.

Vim jak otravny treba je defaultni c++ obarvovani ve vimu, kde po otevreni levy zavorky tam zacnou cervene svitit ruzny pravy zavorky, protoze "nepasujou" a sviti dokud nedokoncis psani.

Uz vidim jak zacnu psat novy radek kodu a v tu chvili me vsechen nasledujici kod zacne cervene blikat dokud nedopisu radek a neukoncim strednikem :-)
The enemy of my enemy is still my enemy.
pavlix avatar 18.9.2013 16:16 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Vim jak otravny treba je defaultni c++ obarvovani ve vimu, kde po otevreni levy zavorky tam zacnou cervene svitit ruzny pravy zavorky, protoze "nepasujou" a sviti dokud nedokoncis psani.
To mi víceméně vyhovuje. Aspoň se to nesnažím kompilovat, dokud to neopravím.
Uz vidim jak zacnu psat novy radek kodu a v tu chvili me vsechen nasledujici kod zacne cervene blikat dokud nedopisu radek a neukoncim strednikem :-)
Blikání je špatné obecně :). Ale bylo by zajímavé to zkusit neblikající a ne přespříliš výrazné.
mirec avatar 18.9.2013 13:52 mirec | skóre: 31 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC

Ja mám starú šunku notebook a zase až tak pomalé to dopĺňanie vo vime nie je (~0.5s, dopĺňanie sa spúšťa na pozadí). Backend musí byť ale celkom slušne nastavený, zapnuté cachovanie ... Samozrejme hovorím o dopĺňaní v komplexných projektoch používajúcich Qt 5 (malá konzolová aplikácia používajúca max tak fstream bude samozrejme rádovo rýchlejšia).

LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
xkucf03 avatar 21.9.2013 11:08 xkucf03 | skóre: 46 | blog: xkucf03
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC

A pak že je Java pomalá :-) Tam jsou v IDE (např. Netbeans) tyhle věci běžné a nápověda se zobrazí hned.

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-Výuka.cz, Nekuřák.net
stativ avatar 21.9.2013 12:59 stativ | skóre: 54 | blog: SlaNé roury
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Akorát, že Java se parsuje mnohem snáz.
Ať sežeru elfa i s chlupama!!! ljirkovsky.wordpress.com stativ.tk
18.9.2013 13:53 Tom
Rozbalit Rozbalit vše LLVM a Clang nově používá Embarcadero
Odpovědět | Sbalit | Link | Blokovat | Admin
Nově LLVM a Clang využívá Embarcadero pro překlad ObjectPascalu (Delphi) pro iOS a Android - blíže na delphi.cz - a zdá se, že se angažují i ve vývoji (např. debugger)
18.9.2013 14:55 tom
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Odpovědět | Sbalit | Link | Blokovat | Admin
IMO to s tim returnem je spatnej priklad. V C to je totiz v poradku a nedefinovane chovani ma nastat, az kdyz se ta vracena hodnota pouzije (neplati pro C++).
Grunt avatar 18.9.2013 19:43 Grunt | skóre: 22 | blog: Expresivní zabručení | Lanžhot
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Odpovědět | Sbalit | Link | Blokovat | Admin
Autor má u mě malé bezvýznamné plusko za API. Kdyby se dalo zacinkat pár drobáky v mističce, už by cinkali.
int funkce()
{
        return;
}
Tento evidentně zvrácený kód
Huh? A co je na něm zvráceného?
Já osobně jsem totiž s GDB krajně nespokojený. Pro takovéto obyčejné použití celkem postačí, po letech používání ale začnete narážet na podivné chování (GDB pošle samo sobě SIGSTOP), pády GDB (laděný program často „sejme“ i debugger) a další podivnosti (GDB mi při auto-completion nabídne funkci pro breakpoint, pak ale řekne, že je nedefinovaná).
Čoveče, jak to používáš? S tím jsem se nikdy v životě ještě nesetkal. A jinak debuggovat jde i gdb, pro ty případy kdy samo sobě pošle SIGSTOP (to by se asi dít nemělo).
GDB bohužel nebylo nikdy navrženo tak, aby sloužilo jako API pro jiné programy (stav je v globálních proměnných apod.), takže to ani jinak nejde.
To je omyl. Jen je k tomu potřeba nepoužívat TUI. To bylo skutečně navrženo jako UI, ne jako API (i když to tak na první pohled nemusí vypadat).
Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
Luboš Doležel (Doli) avatar 18.9.2013 19:49 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Huh? A co je na něm zvráceného?
Nedefinovaná návratová hodnota. Zakázali to sice tuším až v C99, ale autora takového kódu bych za to nakopal.
Čoveče, jak to používáš? S tím jsem se nikdy v životě ještě nesetkal.
Při vývoji Darlingu klidně několikrát za den. Těžko říct, to přesně to způsobuje, ale nemůžu se LLDB dočkat.
To je omyl. Jen je k tomu potřeba nepoužívat TUI.
I tak je to oproti klasickému API bída.
Grunt avatar 18.9.2013 20:38 Grunt | skóre: 22 | blog: Expresivní zabručení | Lanžhot
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Nedefinovaná návratová hodnota. Zakázali to sice tuším až v C99, ale autora takového kódu bych za to nakopal.
Tož nám co pamatujeme ještě BASIC (GOSUB, RETURN) a kované procedury (subroutine, proto SUB, jinak žádné call, ale postaru ještě pěkně GOTO) to až tak zvrácené/nepřirozené nepřijde. Ostatně jestli hned za callem nic z akumulátoru nevyzvedáváš, tak je i docela nesmysl do něj něco cpát, konvence, nekonvence. A furt platí že Céčko je programovací jazyk a ne nějaký strojový syntaktický popis programu. Jazyk se většinou píše na klávesnici, na tu obrazovku neskáče ten kód sám od sebe. Mně osobně by jako prasení nepřišlo i kdyby tam žádný return nebyl, protože funkce je většinou deklarovaná někde mimo hlavní funkce a také je jasně ohraničená složenými závorkami. Pro nás co píšeme ještě stále programy v textovém editoru to furt jeden ENTER a min. šest ušetřených písmenek. Je kravina pokračovat někde v prostoru mimo program, takže já bych od kompilátoru očekával (leda by to bylo nejednoznačné), že za „}“ ten leave a ret automaticky doplní a nebude otravovat jinak to není kompilátor ale otravný krám. A v C99 si můžou psát co chtějí.
Při vývoji Darlingu klidně několikrát za den. Těžko říct, to přesně to způsobuje,
Samozřejmě asi máš dost starostí s vývojem Darlingu, takže to po tobě nikdo nemůže chtít, ale GDB je stále ve aktivním vývoji. Takže pokud ti to fakt někde blbne a je to nějaká trivialita je dobré stáhnout si zdrojáky gdb a můžeš se pokusit to místo které vrací kraviny najít. Někdy je to lepší než se nad tím rozčilovat a doufat v nějakou alternativu. Jinak i když GDB nemá tolik možností jako jiné debuggery, mi přišel ze všech nejlogičtější (jako by půlku práce udělal za mě).
I tak je to oproti klasickému API bída.
Tak jestli chceš, GDB má i paketový protokol. Pointa je, že chceš-li implementovat API do GDB začínat se má tady, ne tady. To User Manual je všeříkající.
Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
Grunt avatar 18.9.2013 20:41 Grunt | skóre: 22 | blog: Expresivní zabručení | Lanžhot
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
paketový protokol.
No ale úplně nejlepší by bylo asi nevymýšlet nějaké kraviny a naučit se používat libgdb.
Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
pavlix avatar 18.9.2013 21:19 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Ostatně jestli hned za callem nic z akumulátoru nevyzvedáváš, tak je i docela nesmysl do něj něco cpát, konvence, nekonvence. A furt platí že Céčko je programovací jazyk a ne nějaký strojový syntaktický popis programu. Jazyk se většinou píše na klávesnici, na tu obrazovku neskáče ten kód sám od sebe. Mně osobně by jako prasení nepřišlo i kdyby tam žádný return nebyl, protože funkce je většinou deklarovaná někde mimo hlavní funkce a také je jasně ohraničená složenými závorkami.
Co je to za pseudofilosofické sračky? Když chci funkci bez návratové hodnoty, tak přece nebudu do hlavičky psát, že návratová hodnota je typu int, ne? Jaký je problém na té tvé klávesnici z doby BASICu místo int napsat v hlavičce void?
Grunt avatar 18.9.2013 21:22 Grunt | skóre: 22 | blog: Expresivní zabručení | Lanžhot
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Problém je, že mi ten int unikl. Pak už to samozřejmě dává smysl. void nebo nic, pak mi přijde return zbytečný.
Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
pavlix avatar 18.9.2013 21:29 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Problém je, že mi ten int unikl. Pak už to samozřejmě dává smysl.
Tím je vyřešeno.
void nebo nic, pak mi přijde return zbytečný.
Vzhledem k tomu, že nic je ekvivalent int, tak bych viděl warning jako velmi relevantní (i když je to natolik bad style, že pak dávám přednost warningu v každém případě).
Grunt avatar 18.9.2013 21:37 Grunt | skóre: 22 | blog: Expresivní zabručení | Lanžhot
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Vzhledem k tomu, že nic je ekvivalent int
Jak jsem říkal. Staré dobré procedury. To se prostě zavolalo, vrátilo a takové kraviny jako návratové typy nebo hodnoty se vůbec neřešili. S ničím jiným než úspěchem se ani nepočítalo a když nastane chyba, nech si to vyřeší systém sám. Ono tou deklarací funkce bez zapsání typu na integer se automaticky počítá s funkcemi, ne s procedurami. Do šrotu s krámem jakýmsi (to je jako kdyby mě někdo chtěl vychovávat co mám psát).
Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
pavlix avatar 19.9.2013 10:54 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Jak jsem říkal. Staré dobré procedury. To se prostě zavolalo, vrátilo a takové kraviny jako návratové typy nebo hodnoty se vůbec neřešili.
Stačí před funkci napsat void. Výstup lze řešit prostřednictvím ukazatelových parametrů.
S ničím jiným než úspěchem se ani nepočítalo a když nastane chyba, nech si to vyřeší systém sám.
Vždy můžeš použít například funkci abort(). Remcáš nad věcmi, které vůbec nejsou zásadního významu.
19.9.2013 11:41 Jindřich Makovička | skóre: 13
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Výstup lze řešit prostřednictvím ukazatelových parametrů.
Proč tak složitě? Výstup stačí uložit do předem dané globální proměnné :)
pavlix avatar 19.9.2013 12:54 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Cílem bylo ukázat, že to není až takový problém, nikoliv se dohadovat o používání či nepoužívání globálních proměnných.
19.9.2013 06:40 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Pozor, v C je z historických důvodů "nic" totéž jako int, ne void.
19.9.2013 15:45 j
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Trebas chces aby to vracelo int ... trebas kvuli rozsahu ... ale je ti jedno, co tam bude/nebude. Kompilator by te na to asi mel upozornit warningem, ale nevidim duvod, proc to neprelozit.
19.9.2013 17:03 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Trebas chces aby to vracelo int ... trebas kvuli rozsahu ... ale je ti jedno, co tam bude/nebude.

Tohle jsem nepochopil. Šlo by to trochu rozvést?

20.9.2013 08:51 j
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
To je jednoduchy ... mam trebas 150 funkci, vsechny vracej int, kterej ma nejak definovanej rozsah (= nejaky mnoztvi Bytu)... a ja si vysledky (trebas) ukladam do pole intu. U nekterych je mi vysledek putna, ale nechci kvuli tomu vyrabet nejakou odbocku - to muze bejt drahy.

A jednoduse pak vim, ze vysledek po zavolani tech 150ti funci bude nejak velkej kus dat v pameti, se kterym trebas neco dalsiho provedu.
pavlix avatar 20.9.2013 09:27 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
nejak definovanej rozsah (= nejaky mnoztvi Bytu)
Rozsah a množství bajtů jsou sice na sobě do jisté míry závislé, ale dát mezi to rovnítko je pitomost.
a ja si vysledky (trebas) ukladam do pole intu. U nekterych je mi vysledek putna, ale nechci kvuli tomu vyrabet nejakou odbocku - to muze bejt drahy.

A jednoduse pak vim, ze vysledek po zavolani tech 150ti funci bude nejak velkej kus dat v pameti, se kterym trebas neco dalsiho provedu.
Můžeš popsat mechanismus ukládání a vyzvedávání těch hodnot, odpovídající konstrukce v C a souvislost s návratovou hodnotou typu int? Mám takové podezření, že vaříš z vody.
20.9.2013 09:59 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC

To, co píšete, moc smysl nedává - když voláte konkrétní funkci, tak prostě musíte (už při kompilaci) vědět, co je zač a co (jaký typ) vrací. Ne že vám vrátí "nějaký počet bytů".

Ale aspoň mne to navedlo na skutečný use case. Řekněme, že jde o callback nebo mám v poli pointery na funkce, z nichž některé vracejí užitečnou hodnotu a od některých žádnou informaci neočekávám. Pak je potřeba, aby měly všechny stejný typ návratové hodnoty. Ale i v tom případě bych to neřešil a prostě tam napsal "return 0". Ta jedna instrukce xor až tak závratný vliv na výkon mít nebude.

pavlix avatar 20.9.2013 11:38 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Ale i v tom případě bych to neřešil a prostě tam napsal "return 0".
+1

Nicméně to asi nebude platit pro pole funkcí, ale spíše pro pole struktur, ve kterých budou kromě funkcí i informace, ze kterých zjistím, zda mě návratová hodnota zajímá. Pak je ale otázkou, jeslti skutečně nebudu chtít vracet data ve formě „nějakého počtu bajtů“, ale na to se spíše hodí funkci předávat odkaz na buffer nějaké velikosti nebo dle vhodnosti použít některou z mnoha jiných technik.
20.9.2013 12:12 j
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Ale o tom, ze by tam mohlo/melo neco byt jako navratova hodnota nebyla rec, to je samo sebou, byla rec o tom, ze neni zadny duvod, aby to prekladac s errorem neprelozil.

Je to zhruba stejny, jako kdyz neinicializuju promennou a prectu si jeji obsah ... ocekaval bych nejaky warning, ale ne error.

BTW: Ja prece vim ze ta funkce vraci int, stejne jako vsechny ostatni z tech 150ti ... a zaroven vim, ze int na dany architekture/kompilatoru/... ma rekneme 4 Byty.
pavlix avatar 20.9.2013 12:30 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Debata o hovně. Prázdný return je prasárna a překladač netuší, jak převést void na int, tudíž hodí error. Teoreticky by mohl hodit warning a buď interpretovat void jako magickou konstantu (nulu), nebo by mohl return bez argumentu interpretovat jako návrat bez inicializace návratové hodnoty. Ale je to zbytečnost, když je stejně zřejmé, že je to špatně.

Pokud bys chtěl něco zakódovat/konvertovat do návratového int, tak to buď musí být z datového typu, které překladač dokáže konvertovat automaticky, nebo musíš to konverzi provést explicitně.
18.9.2013 20:51 tom
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Huh? A co je na něm zvráceného?
Nedefinovaná návratová hodnota. Zakázali to sice tuším až v C99, ale autora takového kódu bych za to nakopal.
Definovat vse muze byt drahe. Pracoval jsem s API, kde byla obdoba errno a navratova hodnota mela smysl jen kdyz nebyla "errno" definovana. V tom pripade je naprosto zbytecne z funkce neco vracet. Kdyz takovych pripadu mate v kodu stovky, tak to je na 8bitovem kontroleru uz poznat.
Luboš Doležel (Doli) avatar 18.9.2013 20:55 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
To je poněkud špatný návrh API. Nebyl by přece problém to navrhnout tak, aby se nevracela hodnota zbytečně a funkčnost zůstala zachovaná.
Grunt avatar 18.9.2013 21:06 Grunt | skóre: 22 | blog: Expresivní zabručení | Lanžhot
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Jak jsem říkal, pro ty co byli zvyknutí na GOTO a GOSUB, těm přišlo i nějaké vracení jako zbytečné a aspoň já měl z počátku problém ho pochopit.
Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
Luboš Doležel (Doli) avatar 18.9.2013 21:12 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Ano. To je přesně ten typ kódu, ze kterého jsem vůbec přišel na to, že to GCC akceptuje. Teď jeden takový portuju na Android :-) Interrupty do toho cpu přes signály a další hrůzy :-)
18.9.2013 21:20 tom
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
To je poněkud špatný návrh API. Nebyl by přece problém to navrhnout tak, aby se nevracela hodnota zbytečně a funkčnost zůstala zachovaná.
Jo, ale za cenu prodlouzeni a zpomaleni kodu. Casto se totiz muze vyplatit z nedefinovane hodnoty vypocitat jinou nedefinovanou nez prodlouzit nejdelsi cestu programem pridanim dalsich podminek. To, ze neco pocitate zbytecne, je jedno, protoze stejne musite mit tolik casu, kolik ho je potreba v nejhorsim pripade.
pavlix avatar 18.9.2013 21:42 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
To se dá (teoreticky) pochopit, ale otázkou je, zda jsou takové případy reálné nebo domnělé a to už asi bez konkrétního případu nepůjde. V jednu chvíli tu podmínku budeš muset vyhodnotit tak jako tak, takže je velkou otázkou, jestli je tento typ optimalizace zrovna tím nejlepší.

Nastavení errno na chybovou hodnotu se typicky provádí při chybě, která je výsledkem vyhodnocení nějaké podmínky, která bude nejspíš sama o sobě podstatně dražší než (zbytečné) nastavení návratové hodnoty. Navíc mám takové podezření, že když prohodíš errno s návratovou hodnotou, celý problém odpadne.

Docela se těším na vyvrácení mých představ a jsem v takovém případě ochotný platit oběd na některé z brzkých konferencí.
Josef Kufner avatar 18.9.2013 22:49 Josef Kufner | skóre: 67
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Ono taky errno je velký problém pro vícevláknové aplikace. Ať už jde o pthread na Linuxu nebo interrupty na 8bitu.

Styl, kdy funkce vrátí kód chyby a data předá na pointery v parametrech mi přijde asi nejlepší. V poslední době jsem však přišel na chuť vyjímkám, ty dokáží ještě víc zjednodušit život.
Hello world ! Segmentation fault (core dumped)
pavlix avatar 19.9.2013 10:56 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Ono taky errno je velký problém pro vícevláknové aplikace. Ať už jde o pthread na Linuxu nebo interrupty na 8bitu.
To už je trochu jiné téma.
Styl, kdy funkce vrátí kód chyby a data předá na pointery v parametrech mi přijde asi nejlepší. V poslední době jsem však přišel na chuť vyjímkám, ty dokáží ještě víc zjednodušit život.
Tady se bavíme o tom, že tom chce optimalizovat do poslední instrukce ;).
Luboš Doležel (Doli) avatar 19.9.2013 19:54 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Na Linuxu snad ne, je to thread specific.
pavlix avatar 20.9.2013 09:29 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Bavíme se konkrétně o glibc, že. Máš pravdu, je rozdíl mezi klasickým errno patternem a thread-local errno v glibc.
2.10.2013 17:14 pasky | skóre: 3 | blog: pasky
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Nevím, co je myšleno "klasickým errno patternem", ale že je errno specifická pro každý thread, je specifikováno v POSIXu.
18.9.2013 22:57 tom
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Funkce v cyklu nastavuji pri chybe priznak errno (to same mohou delat funkce volane z nich). Pokud budete vracet rovnou chybu, kod se vzdy musi prodlouzit. Dulezita je worst-case doba behu funkce. Priklad je dost umelej, ale myslim, ze styl je jasnej.
void cidla_ok(void) {
        int hodnota, rtn, i;

        for (i = 0; i < pocet_cidel; i++) {
                hodnota = cti_z_i2c(cidla[i].i2c_adresa);
                hodnota = skaluj(hodnota, cidla[i].typ_cidla);
                rtn += hodnota_ok(hodnota, cidla[i].typ_hodnoty);
        }

        if (errno || rtn) {
                reboot();
        }
}
19.9.2013 08:11 __dark__
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Sorry, ale nevim jestli toto je zrovna zdarny priklad. Ten kdo to napsal by se mel nad sebou zamyslet :-P
19.9.2013 08:29 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC

Tohle nemá šanci obecně fungovat. Na jedné straně totiž potřebujete, aby v případě, že k chybě nedojde, zachovala se hodnota errno (jinak vám úspěch druhého volání zamaskuje chybu prvního), ale pak nemáte nijak zaručeno, že pokud všechny uspějí, na konci bude errno nula. Mimochodem, standardní C knihovna vám v případě úspěchu negarantuje vůbec nic, takže nikdy nestačí kontrolovat errno, ale vždy musíte nejdřív zkontrolovat návratovou hodnotu.

A efektivitou bych se neoháněl už vůbec, když pokaždé zbytečně projdete celý cyklus, i když bude výsledek jasný třeba hned po první iteraci.

19.9.2013 09:22 tom
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Prectete si znovu cely thread ;-)

Tohle nemá šanci obecně fungovat. Na jedné straně totiž potřebujete, aby v případě, že k chybě nedojde, zachovala se hodnota errno (jinak vám úspěch druhého volání zamaskuje chybu prvního), ale pak nemáte nijak zaručeno, že pokud všechny uspějí, na konci bude errno nula. Mimochodem, standardní C knihovna vám v případě úspěchu negarantuje vůbec nic, takže nikdy nestačí kontrolovat errno, ale vždy musíte nejdřív zkontrolovat návratovou hodnotu.

libc se v projektu nepouzivala, proto jsem v komentarich psal "errno" a obdoba errno a ne errno

A efektivitou bych se neoháněl už vůbec, když pokaždé zbytečně projdete celý cyklus, i když bude výsledek jasný třeba hned po první iteraci.

Projit cely cyklus zbytecne me vubec nevadi, protoze na spracovani cyklu mam vyhrazeny dany cas. Je proto lepsi obcas delat zbytecne veci a snizit maximalni mozny cas behu. Prumerny cas je mi ukradeny.
19.9.2013 09:27 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Prectete si znovu cely thread ;-)

A vy si přečtěte příspěvek, na který odpovídáte.

libc se v projektu nepouzivala, proto jsem v komentarich psal "errno" a obdoba errno a ne errno

To je úplně jedno. To, co jsem napsal, je problém pro jakoukoli implementaci. Buď v případě úspěchu errno vynulujete nebo ho necháte - ale vaše ukázka nebude fungovat správně ani v jednom případě. Samozřejmě ještě může být chování nedefinované (jako ve standardní C knihovně), ale pak jste na tom ještě hůř.

19.9.2013 09:59 tom
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
V pripade uspechu se "errno" nemenilo.
19.9.2013 10:08 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
V tom případě pokud všechna volání uspějí, víte jen, že hodnota bude stejná jako na začátku, ne že bude nulová.
pavlix avatar 19.9.2013 11:01 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
To bych chápal jak účel, podle mě chce zjistit zda v sérii akcí nastala nějaká chyba, nikoli zda v konkrétní akci nastala nějaká chyba, pričemž uvedená funkce je jen jednou z akcí.
19.9.2013 11:11 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
chce zjistit zda v sérii akcí nastala nějaká chyba

Jenže to právě nezjistí, pokud před tou sérií nenastaví errno na nulu. A to neudělal.

Možná vypadám jako hnidopich, ale při své práci se setkávám s důsledky podobných "samozřejmých" předpokladů (které se tu a tam ukážou neoprávněnými) příliš často na to, abych to mohl ignorovat.

pavlix avatar 19.9.2013 11:35 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Příklad je napsaný úplně špatně. Myšlenku jsem spíše odhadoval.
pavlix avatar 19.9.2013 11:08 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Tak za tenhle příklad bych ti nedal ani kus chleba. Neodpovídá diskuzi (1) v tom, že návratový typ je void a (2) v tom, že se v něm return nevolá vůbec, natož podmínečně.
pavlix avatar 19.9.2013 11:37 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Až teď mě napadlo, že ta funkce může být ta volající, pak ti ale skutečně chybí nastavení errno, jak píše michal a bez definice té volané funkce to stejně nemá smysl.
stativ avatar 19.9.2013 11:20 stativ | skóre: 54 | blog: SlaNé roury
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Čoveče, jak to používáš? S tím jsem se nikdy v životě ještě nesetkal. A jinak debuggovat jde i gdb, pro ty případy kdy samo sobě pošle SIGSTOP (to by se asi dít nemělo).
Mě už se taky GDB podařilo nejednou shodit, takže se té nespokojenosti ani moc nedivím. Ale není třeba čekat na LLDB, docela slušný je i idb (intelácký debugger, je součástí Intel Composer, pro nekomerční účely zdarma). Nevýhodou je, že jeho UI je postavené nad Eclipse a je tedy šíleně pomalé.
Ať sežeru elfa i s chlupama!!! ljirkovsky.wordpress.com stativ.tk
Grunt avatar 19.9.2013 12:36 Grunt | skóre: 22 | blog: Expresivní zabručení | Lanžhot
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Mě už se taky GDB podařilo nejednou shodit, takže se té nespokojenosti ani moc nedivím.
Ono je asi dobré, pokud nějaký bug vyběhne nečekaně si uložit stav a pak se k němu vracet. Mně se teda zatím podařilo ho jenom zacyklit, musím to zaklepat, mně drží jako skála.
Ale není třeba čekat na LLDB, docela slušný je i idb
Pochopil jsem to tak, že nevyhovující je spíš způsob ovládání jak debuger samotný, že?
Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
stativ avatar 19.9.2013 21:04 stativ | skóre: 54 | blog: SlaNé roury
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Já proti způsobu ovládání gdb nic nemám (to je spíš problém autorů IDE a různých GUI pro GDB). Spíš mám problém s tím, když debugger nefunguje tak jak má. V tom případě přijde alternativa více než vhod.
Ať sežeru elfa i s chlupama!!! ljirkovsky.wordpress.com stativ.tk
20.9.2013 15:49 Ivan
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Ono je asi dobré, pokud nějaký bug vyběhne nečekaně si uložit stav a pak se k němu vracet. Mně se teda zatím podařilo ho jenom zacyklit, musím to zaklepat, mně drží jako skála.
Pises "jen" v Ccku anebo i v C++? U projektu (se sablonama), ktery ma velke mnozstvi symbolu staci zmacknout 2x po sobe TAB ve spatnem kontextu a GDB jde do kopru. Z nejakoho duvodu se snazi zkombinovat vsechny symboly a dela to tak dlouho dokud ho nezabije OOM. O kterej bug presne je jedne to nemuzu rict - bugu na "TAB completition" v gdb existuje nekolik.
Grunt avatar 18.9.2013 19:49 Grunt | skóre: 22 | blog: Expresivní zabručení | Lanžhot
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Odpovědět | Sbalit | Link | Blokovat | Admin
V první řadě je nutné podotknout, že označení GCC je lehce matoucí. GCC totiž označuje jak sadu kompilátorů (GNU Compiler Collection) pro různé jazyky (C++, Java, Fortran, ...)
Jak je to s kompilátorem pro Javu v GCC? Vždycky jsem to kompiloval, ale nikdy jsem si nevšiml, že by to bylo nějak využilo. Je to vůbec k něčemu dobré?
Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
Luboš Doležel (Doli) avatar 18.9.2013 19:51 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
No, člověk z toho má jakousi nativní binárku bez bloatwaru v podobě JRE. Používá se to například u pdftk.
Grunt avatar 18.9.2013 19:55 Grunt | skóre: 22 | blog: Expresivní zabručení | Lanžhot
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
No, člověk z toho má jakousi nativní binárku bez bloatwaru v podobě JRE
Vždyť to je pomalu na erekci. Ještě jsem teda ale žádné třídy překládané do binárek v nasazení neviděl, ale budu to muset zkontrolovat. Cokoliv lepší než Java.
Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
18.9.2013 23:06 Miki
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
+1

:-D
18.9.2013 23:04 Boris Dušek | skóre: 22 | blog: everything
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Odpovědět | Sbalit | Link | Blokovat | Admin
na OS X se ale LLVM-GCC od roku 2008 běžně používá
používalo, teď už se v podstatě používá jen clang ;-) (default už to nějakou dobu je, a v dnes vydaném Xcode 5 už bylo llvm-gcc dokonce odstraněno takže clang ("Apple LLVM compiler 5.0") je už jedinou Applem dodávanou možností).
vim ~/.emacs
18.9.2013 23:50 mikro
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Odpovědět | Sbalit | Link | Blokovat | Admin
Vdaka za clanok, jeden z najzaujimavejsich, ake som poslednou dobou na cz/sk webe cital.
19.9.2013 14:43 Peter Fodrek | skóre: 10
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Ja tak isto, ale

mozno by bolo dobre zmienit, ze existuje C++ backend,

teda, ze LLVM vie vygenerovat kod v c++. V 2.9 existoval funkcin CBackend, ktory generoval low level C.

Ten momenytalne skompilujem, ale nemal som Cas ho sprevadzkovat. Viem, kde ma chybu (pocet parametrov)
little.owl avatar 19.9.2013 00:05 little.owl | skóre: 22 | Brighton
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Odpovědět | Sbalit | Link | Blokovat | Admin
Mate tady vsichni stesti, ze ted nemam cas!
You're damned if you do, and you're damned if you don't.
19.9.2013 10:46 frr | skóre: 33
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
:-D :-D :-D Jako že je tahle debata na mě moc vysoká liga (nebo spíš to není hra mého srdce) tak tahle hláška mě dohnala k slzám. Sorry za offtopic, nemůžu si pomoct.
[:wq]
3.1. 15:29 Tuttle | skóre: 1 | blog: tuttlovo
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Chechtal jsem se dve minuty!!! Diky! :-)))
Petr Tomášek avatar 19.9.2013 09:02 Petr Tomášek | skóre: 37 | blog: Vejšplechty
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Odpovědět | Sbalit | Link | Blokovat | Admin
Tento evidentně zvrácený kód...

pitomost

složme se na Mrdouše Zmrdanahttp://jetencurakjesteprezidentem.cz/?
pavlix avatar 20.9.2013 09:30 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
Slyšeli jste slovo odborníka. Amen.
20.9.2013 10:03 David Jaša | skóre: 44 | blog: Dejvův blog
Rozbalit Rozbalit vše Re: LLVM a Clang – více než dobrá náhrada za GCC
To je skoro lepší než "tak pravil astrolog". :-)

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.