Portál AbcLinuxu, 1. května 2025 05:52
Když se chce, tak lze "dobře" navrženým benchmarkem dokázat prakticky cokoliv.
Dnes byl na Squeak-dev konferenci v souvislosti s testováním projektu Exupery zmíněn jeden benchmark porovnávající rychlost C++, Javy a Ruby (mimochodem, vyhrál Common Lisp ). Podobné testy nejde v žádném případě brát vážně a jdou jimi dokázat velice sporné výsledky.
Jako ukázku mohu předložit malý testík, který "dokazuje", že Squeak Smalltalk je rychlejší než Java - což je samozřejmě naprostý nesmysl, vzhledem k tomu, že Squeak používá virtuální stroj, který je napsán ve Smalltaku a je automaticky přetransformován do C. Nemá tedy standardně žádný JIT kompilátor, optimalizované části interpretu bytekódu napsané v assembleru apod.
Kod v Javě:
int a = 1; int b = 0; long startTime = System.currentTimeMillis(); for (int i=0; i<1000; i++) { try { try { int c = a / b; } catch (Exception e1) { try { try { int c = a / b; } catch (Exception e2) { int c = a / b; } } catch (Exception e3) { } } } catch (Exception e4) { } } System.out.println(System.currentTimeMillis()-startTime);
Ekvivalent ve Smalltalku:
| a b c | a := 1. b := 0. [ 1000 timesRepeat: [ [ [ c := a // b. ] on: Exception do: [ [ [ c := a // b. ] on: Exception do: [ c := a // b ] ] on: Exception do: [] ] ] on: Exception do: [] ] ] timeToRun
Na mém notebooku mi Java dávala nejnižší výsledky kolem 36 ms, Squeak cca 25 ms.
Na tento test jsem přišel, když se kdysi v rámci jednoho školení na FITu dělalo cvičení s Visual Studiem a já nevěřícně koukal, jak aplikace v C# dlouho chrochtá, než se odhodlá vyhodit chybové hlášení. Doma jsem si rychlost zpracování výjimek hlouběji otestoval (pro tento příklad mi C# nešel pod 100 ms, ale bylo to na jiném stroji - výkonějším )
Nad smyslupností tohoto testu lze mít oprávněné výhrady, ale pravda taky je, že pro mnoho aplikací je rychlost zpracování výjimek dost důležitá (např. Seaside tak zjišťuje aktuální relaci, vyvolává události pro vykreslování atd.).
Takže nevěřte benchmarkům a už vůbec ne těm, co dělám já
James Horner
Dnes jsem si spokojeně poslouchal svoje oblíbené internetové rádio StreamingSoundtracks.com (nejlepší rádio na světě - a musí to být pravda, protože to sami říkají ) a říkám si - hmm, další krásná skladba, tentokrát ze Statečného srdce... hmm, má trochu jiné aranžmá, takhle ji neznám, že by nebyla na soundtracku? Že by z jeho nějaké rozšířené verze?
Juknu na popisek a ona hraná skadba byla z filmu Bobby Jones: A Stroke of Genius. Tak tohle byl vrchol. O tom, jak James Horner vykrádá sám sebe, o tom jsem neměl vůbec žádné iluze. Že např. v soundtracku k Bicentennial Man lze najít okopírované motivy z Braveheartu, že A Beautiful Mind je prakticky jen trochu přepsaný Bicentennial Man, že v Troji vykrádá motivy z The Mask of Zorro atd. atd., na to všechno jsem si tak nějak zvykl podobně jako na to, že většina skladeb Johna Barryho se od sebe moc neliší. Ale tím, co jsem slyšel, to Horner všechno s přehledem překonal. Ne že by to nebyly opravdu krásné skladby, ale nechápu, proč mu to ti režiséři žerou...
Tiskni
Sdílej:
Jen tak by mne zajímalo, co za implementaci .NETu to bylo a jak by se chovalo Mono
Tenkrát to bylo pod Visual Studiem 2003 Professional, ale když jsem to zkoušel nedávno pod .Net 2.0, tak ty výsledky lepší nebyly.
A mám takové tušení, že návrh lexikálních uzávěrů pro Javu počítá s implementací nelokálního návratu pomocí výjimek, takže na tom třeba zapracují a Java bude lepší než Smalltalk)
Žádný problém, prostě to otestuji pod VisualWorks
A nesouvisí to nějak se squeakovským modelem zásobníku? Tipoval bych, že .NET musí při generování stack trace páchat všelijaké vopchliny, které vždy-plně-objektový (vždy-zaručeně-čerstvý) stack ve Squeaku nemusí. Takové ty propojené MethodKontexty nebo CoToTamMáte, já do toho zase tolik nekoukal.
Určitě ano. Otázka je, jestli se to dá příjmout jako výmluva, když jsem se u VisualWorks, které jsou optimalizacemi prolezlé skrz naskrz, dostal teď na 12 ms
Holt Smalltalkeři asi neradi čekají, než dostanou svoje oblíbené DNU
zmíněn jeden benchmark porovnávající rychlost C++, Javy a Ruby (mimochodem, vyhrál Common Lisp ;-) )
Tohle mi trochu připomíná některá výběrová řízení na státní zakázky… :-)
Děkuji za tip. Zkusím si najít způsob, jak si ho streamovat. U SST mi na to stačí obyčejný wget přetaženej přes oggsplit.
Škoda, že už je tak úzce zaměřené. Pár naťuknutí do playlistu odhalí, že neobsahuje řadu vynikajících starších soundtracků, které mě v tu chvíli napadly (řada věcí od Basila, To Kill a Mockingbird nebo takové perly, jako je El Cid, který by se tam žánrově mohl hodit).
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.