2022-06-21 17:24:14
В универе нас сначала учили C++, а когда перешли на Java, мне казалось, что она какая-то ненастоящая: многие вопросы уже решены, сложности упрощены, в чем прикол, в чем состоит работа тогда, если не надо помнить пять видов наследования и шесть видов конструкторов? Любой дурак так может! Потом, конечно, устроился я именно на Java и простоту эту научился ценить.
И вот как-то собеседовали мы чувака, лайв кодинг на языке по его выбору, и он выбрал C++. Надо сказать, что к тому времени у меня уже сложился образ гиперсложности и низкоуровневости вокруг системных языков, который подтверждался и кандидатами, выбиравшими C. Говоришь им — напишите функцию, которая переворачивает строку, а они «а кто ее выделяет, а кто освобождает, а что такое строка» и думаешь ну все, началось.
Так вот, пришел чувак с С++, я уже готов к этим всем вопросам из мира байтоебства, а он вместо этого хоп, хоп, в пять строчек все написал, да еще у него все там автоматически выделяется, копируется и освобождается, все на STL да без единого указателя. Фига себе! — подумал я, но брать мы его конечно не стали. Может и взяли, конечно, я не помню уже, это и не релевантно. Релевантно то, что у меня промелькнула тогда мысль — а может, там в С++ все не так уж и плохо, как об этом рассказывают? Может, жить можно? Вот вроде все симпатичненько и высокоуровнево.
Промотайте еще лет пять, и вот я наконец добрался до С++ сам. Сел писать обертку вокруг Skia, заодно и код самой Skia почитал, и сам для JNI пописал. И вот что имею сказать:
Да, язык C++ поганый, ничего хорошего там нет. Но вот что интересно — это не сразу бросается в глаза. Издалека он создает иллюзию неплохого инструмента, вроде бы все на месте и жить можно. Сложность, да, конечно, но ты всегда думаешь — не буду писать сложно, буду только простые части использовать. Ага, щас.
Так вот, проблема в С++ в том, что он генерирует стабильный и неиссякаемый поток мелких неожиданных проблем. Вроде садишься и думаешь — ну понятно, тут сделаю так и так, вроде все просто, цель видна, дорога прямая. Начинаешь — и тут же спотыкаешься и ломаешь себе ногу.
Причем, что интересно, эти проблемы всегда разные и всегда в неожиданных местах. То бинарную совместимость сломают. То линковка от порядка зависит. То шаблон не работает. То память прозевал. То система сборки. То Виндоус. Все время что-то разное, и все время непредвиденное, и все время вроде и не сломанное прям совсем, а где-то процентов на 20%, так, чтобы опытные говорили «чинить не стоит», а новички где-нибудь да и споткнулись. Ну как новички — Гугл тоже не блещет, а у них эта кодбаза на полмира раскатана.
Как пистолет в штанах, короче. Вроде и носить можно, но чисто статистичкески каждый рано или поздно яйца себе отстрелит.
5.6K viewsNikita Prokopov, 14:24