понедельник, 13 февраля 2023 г.

[prog.c++.flame] Наглядный пример того, за что я не люблю C++

Хорошая статья на английском, "Behind the magic of magic_enum", которая объясняет принципы работы библиотеки magic_enum (у которой, мать-мать-мать, 3.4K звезд на GitHub-е).

Статья-то хорошая, но она как раз иллюстрирует то, за что я не люблю C++ (и как язык, и как экосистему, и как коммьюнити). А именно:

Вместо того, чтобы добавить нужную фичу непосредственно в язык люди пытаются эмулировать ее кривыми и убогими велосипедами из говна и палок.

И, что самое страшное, это и вызывает восхищение, и находит применение.

Нечто подобное уже было в прошлом, когда в Boost включили Boost.Lambda, эмулировавшую лямбда-функции для C++98. Убогая, страшная как черт, требовавшая нехилых познаний в C++ для того, чтобы разобраться в деталях ее реализации, тормозившая компиляцию и провоцировавшая internal compiler errors... Но использовавшаяся!

И вот этого я не понимал ни тогда, ни сейчас.

Ну нет в языке фичи X. Смиритесь и обходитесь без нее. Да, придется больше написать ручками. Но зато это будет работать вне зависимости от компилятора и понятно будет даже начинающему C++нику (или деду вроде меня, который уже мало чего помнит).

Но нет, давайте налепим известную субстанцию на палочку, обзовем это конфеткой и будем жрать причмокивая.

3 комментария:

Dmitry Igrishin комментирует...

А ещё есть всякие Q_ENUM, Z_ENUM, Z_ENUM_NS и т.д. И этим пользуются. Это факт.

eao197 комментирует...

@Dmitry Igrishin

Тем и печальнее, что проблема давным-давно назревшая, но почему-то не решаемая никак. Разве что обещаниями что когда-нибудь вместе с рефлексией.

Между тем переусложненную систему модулей в язык добавили (тем самым создав в C++ ситуацию, отчасти напоминающую Python2 vs Python3). Хотя C++ мог бы и еще 20 лет без модулей прожить.

Dmitry Igrishin комментирует...

@eao197

Согласен. Просто нужно учитывать, что стандартизация и введение новшеств куда бы то ни было - это часть большого бизнеса.