← All posts tagged C++

Есть люди, которые ратуют за использование C++ в системном программировании, мотивируя это тем, что язык якобы облегчает разработку. Где-то возможно это и так. Но из системщины и embedded'щины нужно гнать ссаной тряпкой языки, к которым сложно писать:
a) дебагер
b) профайлер
c) инструменты для сбора статического и динамического покрытия

Для embedded/system программирования язык должен быть максимально прост и очевиден (C кстати тоже не идеален, поскольку стандарт допускает достаточно большое количество undefined behavior, но всё же он на порядки проще и гораздо более детерменирован). Особенно это хорошо чувствуется, когда работаешь с авиационными или военными стандартами, например DO 178B, который разрешает применять Ada, C и C++, но последний ограничен вплоть до запрещения использования new/delete, я уже не говорю о темлейтах и RTII.

«C is for old people who can't adapt to change or learn anything new. It's also for people like me who work on 16 Mhz micro controllers with no ability to malloc or new. Next to me is the guy who goes on about C being "syntactic sugar" around the one true language — assembly. Next to that guy is the fellow who inputs bytecode directly because he doesn't trust the assembler. Next to him is a guy who's still soldering NAND circuits. And right next to that guy is god who's so mired down working on the micro-scale that nobody's heard from him in a long time.» reddit.com

Блин, как же в плюсах не хватает управления последовательностью вызова методов(в особенности конструкторов) в иерархии. Что-то типа CLOSовского :before :after и :around :(

Всё же после долгого перерыва в употреблении C++, возвращаться к ним — настоящая боль в заднице. Без какого-то более-менее приемлемого фреймворка типа Qt или boost, писать на C++, не выкрикивая периодически матюги в матовое лицо монитора, невозможно. Ну что, блядь, стоило оформить нормально ostream/ifstream exceptions? Получив, например, std::ifstream::failure в catch блоке, я не узнаю ни имя файла, из которого читались данные, ни offset, по которому они читались, ни размер считываемых данных, я уже не говорю про адекватный вывод ошибки через e.what(). Стандартная библиотека C++ как бы мягко намекает мне, что упрощать мне жизнь — не её задача. Оборачивай, мол, программист, эту херню в свои эксепшены или забей на эксепшены вообще. Могучий язык, воистину могучий.