🔥

Тред (Дмитрий Свиридкин)


Сегодня про C++, Rust и вообще почему я продолжаю кушать кактус Тред первый.

Как все четкие пацаны, я начинал с паскаля. Но не с турбо или фри, а с @PascalABCNET. Тогда еще без .NET (потом я узнал, что эта инкарнация паскаля уже пару лет как была мертва). Но потом ушлый десятиклассник смекнул, что на паскале писать олимпиадки не удобно (ибо sort нет)

Тогда я решил "выучить" что-то серьезное. На выбор были Java или C++. В Java с порога было множество непонятных ключевых слов, и вообще stdin парсить не удобно... А C++ — зашибись. Изи. Выбор очевиден!
notion image

Параллельно какой-то диванный стартапер предложил освоить php и html и пилить с ним сайтики и зашибать миллионы: он бы осваивал css, а я бы пыхал. Мне не понравилось. Но много разных html тегов я выписал в тетрадку...

На первый курс уже поступал со "знанием" плюсов. Они мне так нравились, так классно. Так бы с одними плюсами и остался, если бы умный человек не шепнул: на олимпиадках важно быстро решить задачу, чтоб не тратить время на простые штуки, полезно иметь в арсенале Python или Ruby.

В универе было много курсов "связанных" с C++. Правда, сути они не раскрывали и подвоха я не видел. Так что к четвертому курсу был уверен, что буду работать на плюсах и вообще умею и практикую. Смартпоинтеры знаю, мьютекс лочить умею, чего еще надо? Любимый язык!

А потом я пошел работать... И че-то все падает, все через жо, память течет, треды крашаться. Падение на выходе — вообще любимая тема. Кажется, это немного не тот C++, которому меня учили...

Сломанные абстракции. Неявно умирающие объекты. Безумие инициализации... Нас учили слишком радужному C++. Которого достаточно, чтобы сделать что-то игрушечное, ну или в олимпиадки поиграть. Но обратного пути нет. Надо было работать работу, ничего другого я все равно не знал

Ну ладно, давайте откроем неиссякаемый источник безумия: (Я в процессе такие восхитительные вещи понаходил) Один лайк — один пример UB на C++!
Стал изучать, как со всем этим бороться: isocpp.github.io/CppCoreGuideli… Начал ковырять различные виды UB и как их опознавать. Тут даже старенький тред в твитторе есть: twitter.com/Nekrolm/status…

Чем больше ковырял, тем больше ужасался и восхищался. Победить это невозможно, только возглавить. Из удобного языка для меня C++ превратился в неповоротливое чудовище, при использовании которого нужно просто угорать, чтобы не сойти с ума.

Я люблю C++, потому что искать и расковыривать весь этот треш — забавно. По крайней мере для меня Буквально час назад обнаружил лютый static finalization order fiasco, пофиксил и еще минут 15 писал развернутый комментарий, почему этот код нельзя трогать.

Я люблю C++, за то что среди огромной кучи известной массы и в нем есть что-то хорошее: метапрограммирование шаблонов и constexpr. Там просто UB нет. Почти нет...

Но я ненавижу C++, потому что я вынужден думать об огромной куче деталей, решая простейшую задачу. А также писать лютое количество велосипедов (обязательно с ошибками), вновь и вновь решая задачу, которая решена везде. Кроме C++.

Я ненавижу его, потому что не могу просто взять чужое готовое решение. У нам совершенно отвратительная модульность и изоляция. Если я втащу что-то — обязательно произойдет какая-нибудь трешнина при линковке.

Ненавижу, потому что у нас никогда не будет фич, которые нам обещают. В нормальном виде. Неделю назад я видел, как прекрасный стектрейс будущего C++23 внезапно из opencv ведет в сетевую библиотеку Poco, от которой он не зависит... Безумие. А почему? А потому что линковка...

Возникает вопрос
notion image

Во-первых, мне за это платят. Во-вторых, расследование UB — это всегда детектив с погонями и приключениями. Моя работа не рутинная. В-третьих, множество историй, которые можно рассказать. А рассказывать всякую дичь я люблю. В-четвертых, я не упорствую 🤡🤡🤡

Поскольку победить C++ невозможно, я решил придерживаться стратегии спикеров с плюсовых конференций: рассказывай всем, как тут круто и здорово, а сам пиши на чем-то другом

Пока получается не очень — писать приходится, но не новый код. Последний год я на плюсах в основном правил старый код.