Já mám naopak dojem, že jiné jazyky hlídají a dělají spoustu věcí samy, ale právě C/C++ se úporně drží toho aby zkompilovaný program dělal přesně jen to co zdroják výslovně říká. I kdyby to bylo sebevíc špatně, tak to přeloží doslova. A to se mi dost líbí.
Ani warningy nepíše když to někdo nechce, ani optimalizace nemusí dělat. Vlastně nedělá nic, jen to dělá dost důkladně. Tak mi to aspoň připadá.
I C se dá kompilovat mnoha různými způsoby. Přece jen vznikl v dost punkových dobách, takže dovoluje až nečekané divočiny. Linus to vyřešil pragmaticky tak, že linux není psaný v C ale v GCC dialektu a vyžaduje některá dost specifická nastavení. I C++ by mohl pořešit stejným způsobem.
Jeho hlavní problém s c++ je myslím v tom, že ten jazyk přitahuje specifický typ programátorů, jejichž přístup Linus opravdu nemusí. Aspoň to vidím jako jádro jeho slavné kritiky c++.
Co je na kontrole přetečení chytrého?
Jinak kompilátor je rozhodně důslednější a pozornější než člověk. My lidi prostě nemáme mentální kapacitu na to přemýšlet jestli každé počítání s intama náhodou nemůže přetéct. Respektive máme, ale když ji utopíme v téhle tupé mechanické dělničině, tak nám jí zbývá krutě málo na ty chytré věci.
Jinak napsat v Cčku kontrolu, jestli součet dvou (signed) intů náhodou nepřeteče není vůbec jednoduché. Občas si na tom vylámou zuby i těžké váhy. Linux se tomuhle peklu pragmaticky vyhnul a vyžaduje -fwrapv. A každý překladač má vlastní nestandardní sadu intrinsik pro tuhle základní věc.
Když jazyk po programátorovi něco chce, tak by mu měl aspoň poskytnout prostředky, jak to kontrolovat.