fk0, легенда (17.12.2019 12:24, просмотров: 835) ответил VLLV на Все проблемы, которые я вижу сегодня в надежности встроенных систем, вообще не связаны с языком программирования. Например:
С языком очень даже связано. Компилирующие языки со статической типизацией (C++, C#, Java, C, Pascal) пропускают гораздо меньше ошибок, чем ассемблеры (без типизации) или скриптовые языки (Python, Javascript). В последних пока не запустишь -- не узнаешь, что там ошибка вообще есть. А сделать 100% покрытие тестами -- невозможно. Кроме того, ещё "алиасинг" вызывает массу ошибок. Это union, void*, reinterpret_cast, c-style cast "(char*)x"... Алиасинг применяется ввиду отсутствия ни статического (на уровне шаблонов), ни динамического (на уровне ООП) полиморфизма, и ввиду отсутствия generic-функций и типов. Других вариантов нет и программисту приходится всё делать руками, что в других языках делается какими-то относительно безопасными механизмами. И при этом компилятор ничего не проверяет и позволяет допускать ошибки с несовместимыми типами объектов, с несовместимым выравниванием, с несовместимыми размерами в памяти... Кроме того, отсутствия концепции владения (RAII), или garbage collector, неизбежно ведёт к утере ресурсов (утечкам памяти). Реально C++ позволяет допустить куда меньше характерных для C ошибок, требующих отладки с отладчиком. Но позволяет другие классы ошибок, но это уже другая история. В среднем на C++ возможно создание более сложных архитектурных решений, которые на C утонули бы в собственной сложности и ошибках. Про ассемблер и говорить нечего. И с другой стороны скриптовые языки очень выигрывают по скорости разработки, но по скорости работы и безошибочности далеко позади. Последнее практически ограничивает возможность применения скриптовых языков в больших проектах.
[ZX]