Názor ke článku Bezpečné programování v C++ I od Lael Ophir - [52] C# je jednoznačně bezpečnější, než C/C++. Jazyk bez...

  • 3. 4. 2009 13:56

    Lael Ophir (neregistrovaný)

    [52]
    C# je jednoznačně bezpečnější, než C/C++. Jazyk bez pointerů je typicky bezpečnější, než jazyk s nimi. Jaký jazyk je lepší, to záleží na kontextu. Pro každou platformu to typicky bývá jazyk, který na ní má nejlepší podporu (C# na Windows, Objective C na MacOS, C/C++ na unixech). To ovšem vůbec nevylučuje, že pro danou aplikaci na Windows bude nejlepší C++, nebo cokoliv jiného. Například kernelové drivery v C# ve Windows psát nejdou.
    C# se pochopitelně uchytilo nejvíc ve Windows, protože je to primární jazyk pro .NET Framework. S chybným SW to nemá souvislost.

    Několikrát jsem psal, že nejsem programátor. Přesto jsem za posledních pár měsíců musel něco napsat. Diskuze na zmíněné téma jsou (pravda ne na rootu) důležité pro budoucnost IT jako oboru. SW je čím dál složitější, je ho čím dál více, a nebezpečnost a nespolehlivost SW má potenciál ohrozit celý obor. Ojedinělé případy s velikými materiálními škodami i ztrátami více životů už máme také.

    Nemusím dohledávat analýzy, abych vám řekl, že buffer overflow chyby dodnes způsobují velké procento bezpečnostních problémů. Přitom jejich mechanismus byl pochopen někdy v roce 1972. 37 let poté, a problém je to pořád. Nepoučili se, a nepoučí se. Řidiči se také nepoučili, a pořád havarují. Programátoři i řidiči totiž budou VŽDY dělat chyby.

    Nemyslím si, že by použití managed prostředí ubíralo možnost reagovat na neočekávané události. V C/C++ je často praxe taková, že se nepoužívají výjimky, a musíte po volání vždy ověřovat návratovou hodnotu (viz typicky libc). Faktem je, že to většina programátorů nedělá důsledně, takže programy na neočekávané věci (třeba neočekávané vstupy) reagují v lepším případě core dumpem s chybou "nelze zapsat adresu 0x0c" apod. V horším (ale přesto častém) případě reagují tichým přepsáním nějaké části vlastní paměti, následným zcela záhadným chováním, nebo dokonce spuštěním nežádoucího kódu.

    To, co nabízíte jako řešení vy, je jen pokračování současných problémů. Jak jsem psal výše, programátoři ani řidiči se nepoučili a nepoučí, chybovat budou dál. Hlásit bugy je jistě třeba, ale bohužel to není řešení *příčiny* problému. Když řidiči často havarují, asi nebudete jen zlepšovat lékařské a pohřební služby, ale budete to také řešit úpravami vyráběných vozů (volant nemusí pravidelně končit v žaludku řidiče), airbagy, ABS, VSC atd. Jinými slovy budete minimalizovat následky chyb, kterých se řidiči budou vždy dopouštět. Samozřejmě to neznamená, že díky tomu přestane být potřeba opatrnost a odpovědnost řidiče. Ale při troše štěstí to umožní udržet či snížit počty těžce zraněných a mrtvých ve stále houstoucím provozu.