Programování a vývoj SWNěco málo o programování a světě vývojářů

Test rychlosti jazyka

Publikováno 22.06.2018 v 07:22 v kategorii Programování, přečteno: 8x

Praktický test rychlosti programovacích jazyků, do něhož byly zahrnuty jak mainstreamové, tak ne-mainstreamové druhy. Výsledky jsou celkem překvapivé.
V první řadě je třeba říci, že nejde o nějaký komplexní benchmarking jazyků, ale o test, který je postaven zcela prakticky. Jde o jednu úlohu, řešenou tím samým způsobem (tj. stejným algoritmem 1:1), různými jazyky na stejném PC. Vychází se z předpokladu, že každý člověk má určité penzum znalostí a svůj styl. A před sebou příklad. Ten přepíše do různých jazyků a dozví se, který jazyk je pro něho (tj. pro jeho styl programování a způsob uvažování) a danou věc nejefektivnější.

Nejde tedy o to vymyslet optimální řešení této úlohy v každém jazyce zvlášť, nýbrž o to řešit tuto úlohu tím samým způsobem v různých jazycích. Záměrně jsem použil metodu brute force (hrubou sílu) a kód, který není nějakým učebnicovým příkladem (tj. napište rekurzi...), ale zahrnuje práci s řetězcem (a$="xy"), přepínač CASE a smyčku (LOOP...UNTIL). Čili běžný kód z programátorského života.

Úlohu jsem převzal kdesi z internetu, jevila se mi jako velice hezká i vhodná. Máme řadu začínající AAA0000. Tj. první člen. Další člen tedy bude AAA0001, AAA0002, AAA0003... atd. Písmena se pak prohazují klasicky, tj. po AAA9999 přijde AAB0000. Je obsažena abeceda: A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z. Úkolem je zjistit, na které pozici se nachází sekvence LWK3724. Kód tedy musí projet všechny kombinace od AAA0000 než dojede k této a říci číslo pozice.

Rychlost (v sec), s jakou se to podařilo v různých jazycích vyřešit, vidíte na grafu:

Výsledky lze jen obtížně komentovat. Jde o kupodivu společensky citlivé téma. Ačkoli jde o technickou věc, mám pocit, že to vždy vyprovokuje obránce jistých značek a technologií, kterých se to dotklo. Pokud něco vychází lépe než jejich oblíbený produkt, hledají sofistikované důvody jak zdůvodnit, že je měření provedeno špatně. Také bývá zřejmé, jak hluboce ten výsledek koliduje se zažitou představou lidí o rychlostech zejména mainstreamových jazyků.

Velmi příjemně překvapil jazyk SpiderBasic, který je sice překládán do Javascriptu, ale ta optimalizace v něm musí být provedena nějak velmi dobře, protože se pohybuje při každém testu okolo 2 sekund. Jazyk Go od Google je rovněž bleskový a dává to pod 2 sekundy. Některé jazyky (jako např. PureBasic) jsou jinak velice rychlé, v tomto konkrétním případě se však zdržovaly na řetězcích.

Lze z toho také odvodit, jak propastné rozdíly za použití metody brute force je možné očekávat. Např. pokud bychom měli dešifrovat či diagnostikovat nějaká data podobným způsobem a jednalo by se např. o nějaká big-data, pak co by se nám podařilo v jazyce VB.NET dělat půl roku, dalo by se ve SpiderBasicu udělat za 1 měsíc.

Komentáře

Celkem 0 komentářů

  • Neregistrovaný uživatel

    Jméno: Přihlásit se

    Blog:

    Obsah zprávy*:

    Kontrolní kód*:
    Odpovězte na otázku: Co je dnes za den?