Názor ke článku Bezpečné programování v C++ III od inkvizitor - [15] "Moje" makro assert() je to klasické z...

  • 21. 4. 2009 0:56

    inkvizitor (neregistrovaný)

    [15] "Moje" makro assert() je to klasické z jazyka C, byl to jenom jednoduchý příklad. Ale samozřejmě není problém nadefinovat si makro vlastní, které vyhodí třeba právě tu výjimku. Jestli je lepší nechat program natvrdo sletět, nebo se raději snažit z toho nějak vybruslit, je určitě otázka konkrétní aplikace. Pamatuji si na předlouhý thread v konferenci cz.comp.linux před lety na toto téma. Byl to docela slušný flamewar.

    [16] Kompilátor samozřejmě má vliv také, ale to už je vcelku extrémní příklad, podle mě. TDD je zajímavý z několika důvodů. Třeba tím, že přímo vybízí k tomu, aby programátor dodržoval v článku uvedené principy nebo tím, že často nabourává politiku přístupových práv v některých jazycích (Java). V dokumentu, který je, žel, k dispozici pouze po zaplacení předplatného (já jsem si ho zaplatil a myslím, že nebudu litovat, protože v knihovně jsou k dispozici zajímavé materiály právě z hlediska statické analýzy a podobných disciplín) tvrdí skupina, v níž je i Bertrand Meyer, že ke generování jednotkových testů lze využít právě kontrakty uvedené v kódu (použitý nástroj je EiffelStudio: http://portal.acm.org/citation.cfm?doid=1287624.1287685

    [20] Vytvoření tabulky faktoriálů při kompilaci je jistě teoreticky možné, ale je to dobrý nápad? Pokud tu funkci volám často a input je omezen shora poměrně malým číslem, pak možná ano (ale i tak lze tu tabulku budovat dynamicky za běhu, ikdyž v tom případě porušíme uvedené principy), ale pokud tomu tak není, bude asi lepší líný přístup. C takový typ definovat neumožňuje, jinak by ta legrace s assertem byla koneckonců zbytečná, ale v C++ by to implementovat šlo. Podle mě to úsilí při použití C++ není zbytečné - jednak v C++ existuje obrovské množství programů a další pořád přibývají a jednak se s podobnými potížemi jako v C++ setkáme i v jiných imperativních nebo hybridních jazycích. Třeba taková Java mi přijde v něčem i horší než C++, protože nutí programátory používat třídy i tam, kde se moc nehodí a svádí je tím k porušování referenční integrity a ke kódu plnému vedlejších efektů.

    Děkuji všem za reakce.