Jádro Linuxu je psáno v C. C++ ja v podstatě nadstavbou jazyka C, a až na několik málo výjimek v sobě celý jazyk C obsahuje. V jazyce C++ se dá psát stejně efektivně, beru-li to z hlediska rychlosti, jako v jazyce C. Z jiných pohledů dokonce i mírně efektivněji. Proto tyto jazyky pro potřeby rychlosti nijak striktně nerozlišuji.
Rozhodnutí MS přepisovat produkty do C# je určitě chytré. Jenomže toto rozhodnutí určitě není děláno kvůli rychlosti. Celý sw průmysl pase po rychlejším, efektivnějším a levnějším vývoji, a o to primárně jde. Rychlost se v tomto případě obětovává. Cílem je zejména úspora peněz, nikoli rychlost výsledných programů.
Prostě já sám tíhnu k používání vyšších jazyků, než je C++, a nebo alespoň lepších knihoven, protože vím, co mi to přináší. Rychlejší vývoj, výhody vyšší abstrakce, spoustu věcí nemusím řešit, apod.. Na druhé straně ztrácím určitě alespoň část rychlosti oproti řešení psaní v nízkém programovacím jazyce.
Je naprosto přirozené, že vývoj vyšších jazyků se veden snahou mimo jiné po vyšší rychlosti. Dynamická kompilace je jedním z cest. Souhlasím, že vývoj dynamické kompilace určitě ještě poběží, ale vývoj statické kompilace také. Koneckonců všechny operační systémy, všechny runtimy pro Javu, .NET, spousta knihoven, apod.. bude stále psaná přednostně v jazycích typu asm, C, C++, apod..
Konečným cílem obojího je totéž. Dosáhnout rychlého běhu ve strojovém kódu. Tedy v konečném cíli se to k sobě přibližuje. Dynamická kompilace samořejmě bude mít navrch, pokud nebude staticky kompilovaný program zkompilován pro daný procesor. Abych řekl pravdu, dost dobře si nedokážu představit případ, kdy by kvůli datům byla Java nějak rychlejší, než C++.
Co se týká testů, je tam testováno mnoho programů. Budu to brát jedno po druhém. První bude čas C++, druhé čas Javy. Čím menší číslo, tím je program rychlejší. Vybral jsem programy, kde se testovalo Visual C a Java společně, což taky nebylo všude.
1) 0.05, 0.53
2) 0.46, 1.60
3) 0.07, 3.93
4) 0.62, 2.55
5) 0.11, 0.76
6) 0.12, 2.89
7) 0.04, 0.55
8) 1.03, 0.76
9) 0.10, 0.90
10) 0.32, 9.65
11) 0.84, 2.92
12) 0.02, 0.48
13) 0.32, 9.65
14) 0.02, 0.48
15) 0.60, 3.92
16) 0.06, 0.62
17) 0.19, 0.62
18) 2.08, 2.85
19) 1.04, 86.59
20) 0.07, 0.72
21) 0.01, 0.75
22) 0.16, 1.18
23) 0.46, 1.87
24) 0.89, 2.55
Tedy téměř všude jsou výsledky dost podstatně horší pro Javu, než pro C/C++ z hlediska rychlosti. S výjimkou program číslo 8 - Object Instantiation. Po skouknutí testovaných zdrojáků pro C a pro Javu jsem ale zjistil, že nedělají totéž, takže jsem toto měření nebral v úvahu.
Když jsem chtěl skouknout metodologii, naskočila chyba 404. Mám podezření, že do běhu programu započítávají i dobu natažení programu, což by zase mírně zvýhodňovalo C++ a mírně znevýhodňovalo Javu. Ale protože metodologie nebyla dostupná, je to jenom moje domněnka.
Zároveň naprosto nechápu, jak v některých pokusech mohli dosáhnout rozdílných výsledků pro C a C++, a to tak, že C++ je dost pomalejší. Co se dá napsat v C, se totiž dá napsat stejně i v C++. Pak se to zvrhává nikoli v testování jazyků, ale v testování objektovosti/neobjektovosti. A nebo v to, že někdo program v C++ neumí napsat.
Nechci odsuzovat ani C++, ani Javu. Ani jiné jazyky. Jen má každý jazyk své určení a svou oblast, kde může ukázat nejpřívětivější tvář. A rychlost není nejsilnější stránkou Javu.
A jen tak mimochodem, zajímavé bylo, že .NET byly velmi výrazně v testech rychlejší, než Java.