![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Давно хотел написать, всё руки не доходили. Но тут увидел, как
vak восхищается исподвыпопердностью С++ в интерпретации Scott Meyers.
Этот самый Meyers написал введение в книге Andrey Alexandrescu "Modern C++ Design", но я процитирую сейчас кусок из дефирамбов, которые помещены следующими:
Если переводить на русский и не очень стесняться в выражениях, смысл данного кунстштюка можно передать проще:
"Кодогенерация -- вчерашний день. Пробовал через жопу, какая-то хуйня получается! Хотите прочувствовать настоящие извращения? Ебитесь с темплейтами!"
В серьёзных местах темплейты запрещены административно, а если что разрешено, то строго ограничено битьём по рукам всех желающих выразить в коде свою невьебенность. В первую очередь, из-за диких расходов времени на отлов косяков. И из-за феноменальной хрупкости результатов.
Тема очень большая, но сейчас времени нет. На днях узнал, что детки с шаловливыми ручками опять поломали Perl. Попытки номер 6 им оказалось мало, так что они психоделической версии дали совсем другое имя, а для новых художеств перескочили сразу на цифру 7.
![[dreamwidth.org profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Этот самый Meyers написал введение в книге Andrey Alexandrescu "Modern C++ Design", но я процитирую сейчас кусок из дефирамбов, которые помещены следующими:
Code generators have held comparable promise for years, but my own research and practical experience have convinced me that, in the end, code generation doesn't compare. You have the round-trip problem, the not-enough-code-worth-generating problem, the inflexible-generator problem, the inscrutable-generated-code problem, and of course the I-can't-integrate-the-bloody-generated-code-with-my-own-code problem. Any one or these problems may be a showstopper; together, they make code generation an unlikely solution for most programming challenges.
Wouldn't it be great if we could realize the theoretical benefits of code generation -- quicker, easier development, reduced redundancy, fewer bugs -- without the drawbacks? What's what Andrei's approach promises. Generic components implement good designs in easy-to-use, mixable-and-matchable templates. They do pretty much what code generators do: produce boilerplate code for compiler consumption. The difference is that they do it within C++, not apart from it. The result is seamless integration with application code.
John Vlissides
IBM T.J. Watson Research
September 2000
IBM T.J. Watson Research
September 2000
Если переводить на русский и не очень стесняться в выражениях, смысл данного кунстштюка можно передать проще:
"Кодогенерация -- вчерашний день. Пробовал через жопу, какая-то хуйня получается! Хотите прочувствовать настоящие извращения? Ебитесь с темплейтами!"
В серьёзных местах темплейты запрещены административно, а если что разрешено, то строго ограничено битьём по рукам всех желающих выразить в коде свою невьебенность. В первую очередь, из-за диких расходов времени на отлов косяков. И из-за феноменальной хрупкости результатов.
Тема очень большая, но сейчас времени нет. На днях узнал, что детки с шаловливыми ручками опять поломали Perl. Попытки номер 6 им оказалось мало, так что они психоделической версии дали совсем другое имя, а для новых художеств перескочили сразу на цифру 7.
no subject
Date: 2020-06-30 01:47 pm (UTC)В целом я скорее соглашусь, что надо как-то с ужасами уже заканчивать. Но параметризация расширяющим классом - это варварское изобретение, как я понимаю, просто моделирует то, что называется ADT, его рекурсивную часть. Просто язык нужен такой, чтобы это все выражалось не через жопу.
У нас в Скале много такой аналогичной фигни. Tagless finals, free monads, вся эта ненужная хрень... ну, могла бы быть и нужной, если бы с ней можно было работать, а не сидеть гадать, что компилятор скажет, если вообще скажет, а не зависнет.
no subject
Date: 2020-06-30 02:05 pm (UTC)Я тут сыну пытался объяснить, почему в программировании всё так... черезжопно. Вышло, что это не баг, а вектор развития. И пока эеономические механизмы ужасы подпитывают, от них не избавиться. Только сильнее плодиться будут.
Сижу, думаю, что теперь с этим сделать.
no subject
Date: 2020-06-30 02:39 pm (UTC)no subject
Date: 2020-06-30 03:14 pm (UTC)Два года назад в Берне общался с энтуиастами. По-моему, это безнадёжно.
no subject
Date: 2020-07-01 12:29 pm (UTC)no subject
Date: 2020-07-01 12:54 pm (UTC)no subject
Date: 2020-06-30 03:18 pm (UTC)no subject
Date: 2020-06-30 03:38 pm (UTC)no subject
Date: 2020-06-30 03:56 pm (UTC)no subject
Date: 2020-06-30 04:16 pm (UTC)Специалистом надо быть по тому, за что платят больше. И ещё можно подобрать извращений для души. Но тут уж у кого к чему эта душа лежит. Я бы свободное время на что другое использовал. Можно, например, пчёлок разводить.
no subject
Date: 2020-06-30 05:15 pm (UTC)no subject
Date: 2020-06-30 05:47 pm (UTC)no subject
Date: 2020-06-30 08:43 pm (UTC)Дополнение:
no subject
Date: 2020-06-30 10:41 pm (UTC)Си++ начинался как навороты вокруг топора. Сначала превратили его в бензопилу на гусеничном ходу, потом добавили вертикальный взлёт и реактивную тягу. Если можете не писать на Си++ - не пишите. Но если уж приходится, надо жёстко ограничивать разработчиков минимально возможным подмножеством языка. За использование всякой новой фичи депремировать.
no subject
Date: 2020-06-30 10:55 pm (UTC)Вот!
> Но если уж приходится, надо жёстко ограничивать разработчиков минимально возможным подмножеством языка. За использование всякой новой фичи депремировать.
Right. However, vanilla use of templates is necessary, because the standard library is STL, and STL is what one should use. So, a very plain, very simple-minded use of templates, without any tricks, is OK (if one is already in that miserable situation of using C++).
no subject
Date: 2020-07-01 05:56 am (UTC)no subject
Date: 2020-07-01 09:25 am (UTC)В C++ мне также очень нравятся извращения над ключевым словом static. Которое в 4 разных местах может значить абсолютно разное, в зависимости от контекста.
no subject
Date: 2020-07-01 07:14 am (UTC)А как вот это вот проинтерпретировать как "детки с шаловливыми ручками опять поломали Perl"?
no subject
Date: 2020-07-01 08:20 am (UTC)no subject
Date: 2020-07-01 11:52 am (UTC)Потом, означенный perl 7 "детки" прогнали по всему CPAN, и решили что работает достаточно хорошо (=не так много поломано, и если уж поломано, то поделом). Если вы думаете что не хорошо, то какие таки у вас аргументы, без отсылок на ненаписанные тома?
no subject
Date: 2020-07-01 11:55 am (UTC)no subject
Date: 2020-07-01 12:03 pm (UTC)no subject
Date: 2020-07-01 09:33 am (UTC)Мне кодогенерация пригодилась в карьере всего трижды, но то были монументальные кейсы. И последний из них в продакшене уже 10 лет на сотнях тысяч а то и десятках миллионах устройств. Подошёл идеально.
no subject
Date: 2020-07-01 09:43 am (UTC)