LINUX.ORG.RU

Loki and Boost advanced usage

 


0

8

Всем привет!

Решил я стало быть доучить основы C++ по книжке Александреску (Современное проектирование на С++). И там в 3 главе на 86 странице есть шаблон из Loki - GenScatterHierarchy - он генерирует иерархию классов. Вопрос - почему он считается устаревшим и не включенным в boost, хотя описывается как «невероятно эффективный»?

★★

Последнее исправление: aido (всего исправлений: 3)

Потому что Александреску — совсем поехавший, и мало кто такой код хочет писать и, тем более, читать потом.

hateyoufeel ★★★★★
()

доучить основы C++ по книжке Александреску (Современное проектирование на С++)

Хахаха-хаха-хаха :-) Побереги нервные клетки :-) Зачем тебе седина (или лысина) раньше времени? :-)

anonymous
()

[оффтоп] Из классики - читай про шаблоны Вандервуда и Джосаттиса.

Может посвежее и есть чего адекватного, но из проверенных временем сиё самый торт имхо. [/оффтоп]

pon4ik ★★★★★
()

Вангую там страшный синтаксис.

peregrine ★★★★★
()

Зря ты это сюда принес. У многих местных обитателей при сочетании Александреску + C++ начинается истерика. При этом мало кто попытается понять, что книжка Александреску сложная потому что шаблоны тогда не поддерживали нужных возможностей, которые он пытался эмулировать подручными средствами (переменное число параметров, например, или понятные сообщения об ошибках). Выходила такая эмуляция... эммм... многословной, но его это не напрягало.

С тех пор прошло несколько лет, variadic template уже давно есть, над понятными сообщениями об ошибках активно работают уже лет 6 и довольно успешно, в результате, если сейчас реализовывать Loki без оглядки на VS2013, то из нее уйдет 95% кода (причем самого запутанного). Если еще понять, что программирование на шаблонах - это чистая функциональщина с иммутабельностью, pattern matching и чем-то еще, в отличие от остального C++. И что сама идея «разработки классов на основе стратегий» очень простая (почти примитивная, причем чтобы все это понять, не нужно быть сеньором-помидором, достаточно чуть продвинутым jun'ом), то реакция на упоминания Loki станет непонятной.

Однако мем «покусанный Александреску» слишком силен, даже сейчас, поэтому Алексанреску и C++ лучше не упоминать в одном предложении.

anonymous
()
Ответ на: комментарий от anonymous

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

Его книжка не сложная :-) Просто она рассказывает про неимоверно крутую библиотеку Loki, которую никто не использует (поднимите руки, кто использует) :-) Слишком крутая, наверное :-) Лол :-)

И что сама идея «разработки классов на основе стратегий» очень простая

Да знаем мы эту песню :-) Это называется «передача аргумента шаблона для выбора алгоритма» :-) У Страуструпа ещё в 3-м издании об этом было :-) Но Александреску в своей книжке не только про это писал :-) Он ещё поднял сверх важную проблему - Ъ синглтон и его корректное удаление :-) Лол :-)

anonymous
()
Ответ на: комментарий от anonymous

Если еще понять, что программирование на шаблонах - это чистая функциональщина с иммутабельностью, pattern matching и чем-то еще, в отличие от остального C++

Ничего себе :-) Тут прям почти Clojure :-) Лол :-) И много можно написать на тьюринг-полном языке шаблонов цепепе, кроме какой-нибудь реализации вычисления ряда фибоначчи и классов-стратегий? :-) А то на фоне кода генерации строчки в компайл-тайме на цепепе-17 книжка Александреску может показаться детским букварём :-)

anonymous
()
Ответ на: комментарий от anonymous

Дорогой юный друг! Зарегистрируйся, пожалуйста, чтобы твою шизофазию можно было игнорировать. Сейчас очень неудобно тебя идентифицировать автоматическими способами.

Заранее спасибо за понимание.

E ★★★
()
Ответ на: комментарий от E

твою шизофазию

Когда сей термин станет не популярным, ты будешь пользоваться другим, чтобы не отставать от остальных :-) Но пока что ты пользуешься этим, потому что сейчас это модно в твоей среде :-) Лол :-)

Сейчас очень неудобно тебя идентифицировать автоматическими способами.

Ой, ну какие у тебя то ещё автоматические способы идентификации? :-) Скрипт на питоне, подсчитывающий смайлики что-ли? :-) Лол :-)

anonymous
()
Ответ на: комментарий от crarkie

Ну, например, такое можно.

Во-первых, там демонстрируются возможности constexpr, а не про язык шаблонов :-) Во-вторых, это такая же никому не нужная потуга, как строки в компайл-тайме на цепепе :-) Компиляция хеллоуворлда на C в течении 3-х минут с помощью лишь только g++ 6.2 (The version of g++ is important!) - ну и кто будет этим пользоваться? :-) Правильно, никто :-) Лол :-)

anonymous
()
Ответ на: комментарий от anonymous

Во-первых, там демонстрируются возможности constexpr, а не про язык шаблонов :-)

Шаблоны-таки частично там есть. Ну а во вторых - constexpr - такие же вычисления в compile-time, как и шаблоны.

ну и кто будет этим пользоваться? :-) Правильно, никто :-) Лол :-)

Вопрос был таки в том, что можно на шаблонах написать, кроме всякого простого, а не в том, что можно сделать на них полезного. Нужно более полезные примеры - Boost. Спорная библиотека, да. Однако полезного там дофига всего. И при том многие фичи оттуда активно продвигают в новые стандарты C++.

crarkie
()
Ответ на: комментарий от crarkie

Шаблоны-таки частично там есть. Ну а во вторых - constexpr - такие же вычисления в compile-time, как и шаблоны.
Вопрос был таки в том, что можно на шаблонах написать, кроме всякого простого, а не в том, что можно сделать на них полезного.

Чего ты съезжаешь? :-) Говорилось про язык шаблонов и что на нём больше чем «классы стратегий» или тормозных и весьма ограниченных компайл-тайм фибоначчей ничего полезного не сделать :-) Ты приволок сюда зачем-то какую-то никому ненужную лабуду с инклюдами в несколько мегабайт, которая зачем-то компилирует сишный хеллоуворлд с помощью constexpr в течении 3-х минут и рассказываешь про constexpr что «это же компайл-тайм, как и шаблоны, поэтому я это сюда принёс» :-) Хотя чего ещё было ждать :-) Лол :-)

Там один выше распинался, что программирование на шаблонах - это чистая функциональщина вместе с иммутабельностью и паттерн-матчингом :-) Т.е. он сравнивает таким заявлением язык шаблонов цепепе с каким-нибудь Clojure :-) Ну пусть напишет что-нибудь дельное на шаблонах цепепе, приложив те же усилия и с тем же результатом, который можно получить на Clojure :-) Будет такое уже унылое поделие, как и компилятор хэллоуворлда на constexpr, который компилирует хэллоуворлд 3 минуты :-) Лол :-)

anonymous
()
Ответ на: комментарий от anonymous

Чего ты съезжаешь? :-) Говорилось про язык шаблонов и что на нём больше чем «классы стратегий» или тормозных и весьма ограниченных компайл-тайм фибоначчей ничего полезного не сделать :-) Ты приволок сюда зачем-то какую-то никому ненужную лабуду с инклюдами в несколько мегабайт, которая зачем-то компилирует сишный хеллоуворлд с помощью constexpr в течении 3-х минут и рассказываешь про constexpr что «это же компайл-тайм, как и шаблоны, поэтому я это сюда принёс» :-) Хотя чего ещё было ждать :-) Лол :-)

Там один выше распинался, что программирование на шаблонах - это чистая функциональщина вместе с иммутабельностью и паттерн-матчингом :-) Т.е. он сравнивает таким заявлением язык шаблонов цепепе с каким-нибудь Clojure :-) Ну пусть напишет что-нибудь дельное на шаблонах цепепе, приложив те же усилия и с тем же результатом, который можно получить на Clojure :-) Будет такое уже унылое поделие, как и компилятор хэллоуворлда на constexpr, который компилирует хэллоуворлд 3 минуты :-) Лол :-)

Таки вторую часть про Boost ты проигнорил. Он-то чем тебе не угодил? Или тоже скажешь, что ничего из себя не представляет?

Там один выше распинался, что программирование на шаблонах - это чистая функциональщина вместе с иммутабельностью и паттерн-матчингом :-) Т.е. он сравнивает таким заявлением язык шаблонов цепепе с каким-нибудь Clojure :-)

Не совсем. В C++ шаблоны compile-time. В то время как в функциональных языках все это нет. В том же Haskell есть и pure функии, которые похожи по принципу на шаблоны C++(иммутабельность, отсутсвие побочных эффектов(красноглазие от шаблонов не в счет:) ), а есть монады, которые позволяют отделить pure от всего остального. Но во многом таки да - шаблоны очень сильно напоминают функциональщину, ибо и там, и тут иммутабельность и программирование через рекурсию.

crarkie
()
Ответ на: комментарий от crarkie

Использование рекурсии, кстати, сокращают, в С++14 ввели integer_sequence, в C++17 - fold expressions.

Begemoth ★★★★★
()
Последнее исправление: Begemoth (всего исправлений: 1)
Ответ на: комментарий от crarkie

Он-то чем тебе не угодил? Или тоже скажешь, что ничего из себя не представляет?

Он себя представляет старое скопище кода на шаблонах цепепе гигантских размеров, которое большинство стараются обходить за три версты :-) Актуальным это скопище было лет 10 тому назад :-) Вот буст то как раз и является демонстрацией предела того, что можно полезного выжать из шаблонов цепепе :-)

Не совсем. В C++ шаблоны compile-time. В то время как в функциональных языках все это нет.

Лол :-) Я говорил за Clojure :-) Ну если ты так хочешь, я могу и Common Lisp упомянуть :-) Ты не поверишь, но и в том и в другом случае весь язык доступен в макрах, которые раскрываются в компайл-тайме :-) Никакой язык шаблонов и рядом не стоял с макрами :-) Лол :-)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.