Portál AbcLinuxu, 30. dubna 2025 21:23
Zrovna kompiluji nejnovější GNOME ze zdrojáků. A trvá to a trvá. Možná je to i tím, že ten instalační skript mi chce ukázat, o kolik se zpomalí Firefox, když bude renderován přes Cairo, a tak ho taky překládá. Ale to je jedno.
Proto se trochu bojím Gentoo - jsem zvyklý, že KDE na svém Debianu nainstaluji ze školního repozitáře za dvě minuty, žádé hodinové kompilace. Ale to je taky jedno, třeba ho někdy risknu.
Hlavní rozdíl mezi C a Pascalem totiž není v kráse a podobných malichernostech. Hlavní rozdíl je v gramatice jazyka. Pascal má gramatiku třídy LL(k) (z hlavy detaily nevím, ale pascaloidní Ada je dokonce LL(1) - pro každý další krok syntaktické analýzy stačí jeden symbol ze zdrojového textu), kdežto Céčko je třídy LR (z hlavy detaily opět neznám, ale pro syntaktickou analýzu se musí dělat celkem složité šaškárny na zásobníku symbolů, rozhodně nestačí jeden symbol). Důsledek je ten, že překladače Pascalu pracují řádově (řádově!) rychleji. Kdo někdy vážněji pracoval s Delphi, ví, že tamějším překladačem Object Pascalu prolítnou miliony řádků zdrojového kódu jako namydlený blesk. Linuxové jádro přeložené za 15 sekund, X.org za 20 . Céčko je ještě zpomalené děsným #include, které Ahoj světe "natáhne" možná na tisíce řádek kódu a které způsobuje, že linker musí být komplikovanější.
Mnozí teď možná namítnou, že v Pascalu přece není možné napsat jádro OS a že by to už nemohl být Unix. Já si ale pamatuji Turbo Pacal, kde šly dělat zcela stejné low-levelové opičárny jako v sesterském Turbo C. Jiní zase namítnou, že pascalské programy jsou pomalé. Co si pamatuji, tak programy v Delphi nebo TP nikdy s rychlostí problémy neměly. Navíc nejrychlejší programy nejsou v Céčku, ale ve Fortranu
Navíc já vůbec netrvám na tom Pascalu, já jen chci, aby tehdy před více než třiceti lety Kernighan a Ritchie zabalili svá "makra do assembleru" do něčeho, co se rychle překládá.
Jak by to asi změnilo softwarový průmysl? Nic by se nemuselo překládat přes noc. Kompilace při instalaci by byla mnohem běžnější. Zrychlilo a zlevnilo by to vývoj.
Tiskni
Sdílej:
Silná typová kontrola psaní věcí jako jádra OS dost kompilkuje.A věcí jako GNOME taky? :)
Můžeš jmenovat nějaký běžně používaný silně a zároveň dynamicky typovaný jazyk?Lisp.
V čem to měli napsat, aby dosáhli: 1. stejné přenositelnosti, 2. stejné snadnosti psát bindingy pro všechny možné jazyky.V čemkoli, k čemu je k disposici překladač, který dovolí splnit obě zmíněné podmínky. To by, troufám si tvrdit, mohly být (skoro) všechny jazyky, k nimž existuje překladač v rámci projektu GCC -- generátor cílového kódu je totiž jeden a týž. Ale to je jenom bohapustá teorie, klidně si ji nechám vyvrátit někým, kdo už něco takového vyzkoušel a nepochodil. Holt věčně zelený strom života... nejhorší na Céčku není to, že je tak strašné, ale že je tak rozšířené :)
$ strace -ff fpc z.pas 2>&1 | grep -c execve 3 $ strace -ff gcc -o z z.c 2>&1 | grep -c execve 13
Tak proč je potom C tak pomalé, když je parsování jen malá část?Optimalizátory. Někdo vymyslel, že Céčko bude nejrychlejší jazyk a hordy matematiků a programátorů se předhánějí v počtu optimalizačních průchodů Céčkových překladačů :) A pak pochopitelně #include :)
gcc -S
. Bez optimalizací obsahuje oproti C dost málo (je nejspíš algoritimicky převeditelný zpět na preprocesovaný zdroják v C), s optimalizacemi obsahuje informaci z kompilátoru, což je aditivní konstanta.
[*] I tak platí, že délka minimálních implementací algoritmů v různých (stejně sliných) jazycích se liší jen multiplikativní konstantou. A u reálných jazyků jsou ty ukecanější kompresibilnější.
Uvede nekdo priklad jak by vypadal zdrojak ?
Jsem dosti zvedavy.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.