Hlavní navigace

Názor ke článku Bezpečné programování v C++ I od Sten - [33] Práce bez přehazováním pointerů a jiných nebezpečných...

  • 9. 3. 2009 23:28

    Sten (neregistrovaný)

    [33] Práce bez přehazováním pointerů a jiných nebezpečných konstrukcí je v C++ docela dobře možná. Musí se ale vědět jak. V případě C# to za programátora řeší překladač a virtuální stroj, čili programátor nepotřebuje znát detaily. Na druhou stranu pak má daleko víc svázané ruce, co může jeho kód dělat.

    [37] To je právě ten problém C++, na který asi i poukazoval Lael Ophir (a Yenya a další). Spousta programátorů totiž v C++ programuje tak, jak je zvyklá z jiných jazyků (C, Python, Java ap.), což pak má za následek, že odjištěná zbraň ukazatelů, přetékajících hodnot (jako ten int i v printList - prosím nahradit za std::list<T>::si­ze_type) a minimálních kontrol v STL (v tomhle je „oblíbený“ operator[]) přinášejí těžko odhalitelné chyby, které se projeví, až když aplikace dostane opravdu zabrat. Což bývá až u zákazníka. (Mimochodem ani ta moje ukázka není z hlediska C++ programátora ideální - šlo by použít Boost, upravit funkci filter, aby nebral jen funkci, ale cokoliv volatelného, třeba funktor a ten operator << pro std::list by šlo implementovat obecně pro všechny kontejnety.)

    [40] Přesně argument který jsem tu už jednou vyvracel: špatní programátoři nedělají špatný jazyk, jen špatný kód (to je narážka na to obalování funkcí marky a schovávání kódu pod kódem pro kód). Podle postupu v jazycích, který jste provedl, to vypadá, že vám C++ nesedlo. Zřejmě jste na něj oproti C nabalil jen třídy. To je ale věc, ve které C++ moc nevyniká (ačkoliv se to často tvrdí). A co se týče alokování paměti a předávání ukazatelů - vám to C++ opravdu nesedlo :) No nevadí, hlavně že jste našel jiný jazyk, který vám vyhovuje.