Vzhledem k tomu, že na root chodím asi jednou za měsíc a nebudu mít čas čekat na kolečko schválení příspěvků, pak reakce na příspěvek a případně moje reakce, napíšu to naráz:
Kód pana Nováčiska z [9] je nejhorší možný, který nasbíral všechna negativa, která existují. Každá dobrá implementace shared_ptr je výrazně efektivnější a méně problematická. Ondřej Nováčisko by udělal dobře, kdyby namísto objevování kola si nějakou efektivní knihovnu prozkoumal.
Stručný výčet některých negativ kódu v [9]:
1) Někdo musí rozhodnout, zda kód bude single threaded, nebo multi threaded. Asi programátor, každopádně programátor je pak nucen zabývat se ptákovinami a řešit věci. Špatné rozhodnutí pak o tom, zda multi threaded je zdrojem těžko hledatelných chyb.
2) Při přetečení čítače se mu automaticky překlopí čítač do druhé polohy, tedy původně single threaded se změní na multi threaded a naopak. Nijak to nemá ošetřené.
3) Zbytečně ztrácí čas testem na NULL. To prakticky není v čítači referencí nikdy potřeba.
4) Na kódu je vidět neoptimalizace. Například první tři instrukce v kódu MT by šlo nahradit jedinou instrukcí push dword 1.
Pomíjím, že celý úsek kódu není konečný, například z ničeho nic se vyčarovalo v registru ebx adresa InterlockedIncrement, takže někde předtím se musí naplnit.
Jinak pro jeho informaci, celé přičtení jedničky proměnné k pointeru, které je threadově bezpečné je v x86 assembleru na 2 instrukce. Záměrně neuvedu kód, ať si taky zahledá. Nevolá se přitom žádný podprogram ani nedochází ke skokům. Tedy efektivita úplně báječná.
To je důvod, proč knihovny, které haní samozřejmě mohou být velmi efektivní a mnohem efektivnější, než tu popisuje.
Jinak o STL si také nemyslím nic moc dobrého, ale na druhé straně spíše proto, že nekontroluje správnost parametrů čímž mohou vznikat obtížně hledatelné chyby a také proto, že není rozšířitelná. Například některé třídy bez virtuálních metod jsou zbytečně konečné. A nakonec také proto, že používá nejasně velké integery.
Ing. Miloslav Ponkrác
Autor se zabývá vývojem kompilátorů a knihoven pro objektově-orientované programovací jazyky.
Přečteno 36 210×
Přečteno 25 371×
Přečteno 23 799×
Přečteno 20 182×
Přečteno 17 878×