Очень часто слышу мнение о невероятной полезности MPL (было дело, пару раз нашел ей применение) подобный библиотек. Сейчас вот Hana подоспела, которая тоже невероятно полезна. Так вот, а не видел ли кто некого труда, можно по аналогии с творением от GoF о реальных или более-менее похожих на реальность вариантах использования этих библиотек? Ну, так что бы десяток-другой примеров, хотя бы, в духе "была пробелема Ы, в при помощи замечательной MPL/Hana мы её очень эффективно решили". Лично я, когда читаю приложенную документацию и/или тесты, понимаю что "все очень круто", но вопрос "а нахрена?" меня никак не покидает уже многие годы
Здравствуйте, kaa.python, Вы писали:
KP>Очень часто слышу мнение о невероятной полезности MPL (было дело, пару раз нашел ей применение) подобный библиотек. Сейчас вот Hana подоспела, которая тоже невероятно полезна. Так вот, а не видел ли кто некого труда, можно по аналогии с творением от GoF о реальных или более-менее похожих на реальность вариантах использования этих библиотек?
Нужны примеры именно с использованием MPL/Fusion/Hana? Или подойдут любые TMP примеры?
Здравствуйте, kaa.python, Вы писали:
KP>Очень часто слышу мнение о невероятной полезности MPL (было дело, пару раз нашел ей применение) подобный библиотек. Сейчас вот Hana подоспела, которая тоже невероятно полезна. Так вот, а не видел ли кто некого труда, можно по аналогии с творением от GoF о реальных или более-менее похожих на реальность вариантах использования этих библиотек? Ну, так что бы десяток-другой примеров, хотя бы, в духе "была пробелема Ы, в при помощи замечательной MPL/Hana мы её очень эффективно решили". Лично я, когда читаю приложенную документацию и/или тесты, понимаю что "все очень круто", но вопрос "а нахрена?" меня никак не покидает уже многие годы
А нет ли какого-нибудь труда, который бы понятным языком разъяснял что это вообще такое? Я в бусте (в его "языковой", "неприкладной" части, то есть не касающейся фукнций ОС и матана) около половины библиотек вполне понимаю что оно и для чего, но вот есть такие о которых вообще сказать что-то сложно — что оно и зачем, не говоря уже о "как работает".
Из доступных книг — http://theboostcpplibraries.com (но там как раз в основном понятные), книга Полухина (в которой тоже в основном простые библиотеки) и загадочная книжка в двух томах "Introduction to the Boost C++ Libraries", на которую есть единственная ссылка — https://skladchik.com/threads/introduction-to-the-boost-c-libraries-volume-i-foundations.11775
Правда они немного устарели в связи с выходом C++11/C++14 — некоторые техники уже не актуальны в связи с новыми языковыми возможностями. Тем не менее общее понимание они дадут на хорошем уровне.
Здравствуйте, kaa.python, Вы писали:
EP>>Нужны примеры именно с использованием MPL/Fusion/Hana? Или подойдут любые TMP примеры? KP>Именно по MPL/Fusion/Hana. В общем случае польза шаблонов и варианты их использования вопросов не вызывают.
Шаблоны используются не только для метапрограммирования. А метапрограммирование возможно и без MPL/Fusion/Hana.
Топик же называется "Метапрограммирование в примерах", а не "MPL/Fusion/Hana в примерах" — поэтому и уточняю.
Например библиотека Eigen — там сплошное метапрограммирование, но MPL/Proto они не использовали по каким-то организационным причинам, о чём и пишут в комментариях:
/** \internal
* \file Meta.h
* This file contains generic metaprogramming classes which are not specifically related to Eigen.
* \note In case you wonder, yes we're aware that Boost already provides all these features,
* we however don't want to add a dependency to Boost.
*/
Здравствуйте, kaa.python, Вы писали:
KP>Очень часто слышу мнение о невероятной полезности MPL (было дело, пару раз нашел ей применение) подобный библиотек. Сейчас вот Hana подоспела, которая тоже невероятно полезна. Так вот, а не видел ли кто некого труда, можно по аналогии с творением от GoF о реальных или более-менее похожих на реальность вариантах использования этих библиотек? Ну, так что бы десяток-другой примеров, хотя бы, в духе "была пробелема Ы, в при помощи замечательной MPL/Hana мы её очень эффективно решили". Лично я, когда читаю приложенную документацию и/или тесты, понимаю что "все очень круто", но вопрос "а нахрена?" меня никак не покидает уже многие годы
именно MPL, или списки типов и алгоритмы работы с ними в принципе?
ну, например, недавно делал обертку для работы с бд. там параметры упаковывал в подобные списки:
struct Type {
typedef Type ( construct )( optional<int>, uuid_t ); // не знаю, как по другому сообщить компилятору, какие типы принимает конструктор :(
Type ( optional<int>, uuid_t );
};
db::result r = db::query( m_link, "select * from table where field_1 = {0} and field_2 = {1}", value1, value2 );
for ( db::result::const_iterator< Type > it = r.begin( ), end = r.end( ); it != end; ++it ) {
Type record( *it );
// ...
}
без техник, описанных в MPL, работать со списками было бы очень не удобно.
Здравствуйте, kaa.python, Вы писали:
KP> Лично я, когда читаю приложенную документацию и/или тесты, понимаю что "все очень круто", но вопрос "а нахрена?" меня никак не покидает уже многие годы
Прочитать книжки — 20% ответа. Остальные 80% — найти задачу, требующую MPL, и решить ее (мне помогло).
Здравствуйте, kaa.python, Вы писали:
KP>Очень часто слышу мнение о невероятной полезности MPL (было дело, пару раз нашел ей применение) подобный библиотек. Сейчас вот Hana подоспела, которая тоже невероятно полезна. Так вот, а не видел ли кто некого труда, можно по аналогии с творением от GoF о реальных или более-менее похожих на реальность вариантах использования этих библиотек? Ну, так что бы десяток-другой примеров, хотя бы, в духе "была пробелема Ы, в при помощи замечательной MPL/Hana мы её очень эффективно решили". Лично я, когда читаю приложенную документацию и/или тесты, понимаю что "все очень круто", но вопрос "а нахрена?" меня никак не покидает уже многие годы
ну прямо как будто первый день в С++
берешь буст, и грепаешь там "/mpl/", находишь 2000+ файлов которые используют MPL, читаешь как она используется.
— реальные примеры использования MPL для создания реальных библиотек
Здравствуйте, Abyx, Вы писали:
A>ну прямо как будто первый день в С++
Ты как будто первый раз текст на русском читаешь. Я не хочу читать 2000+ файлов и анализировать их, BOOST мало чем отличается от любой другой бибилиотеки и основная его часть решает проблемы существующие в исключительно в голове авторов. Я же хочу некий труд: заметку, статью, которая покажет на примерах полезные практики и варианты использования. Не зря же в качестве примера я упомянул GoF.
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Шаблоны используются не только для метапрограммирования. А метапрограммирование возможно и без MPL/Fusion/Hana. EP>Топик же называется "Метапрограммирование в примерах", а не "MPL/Fusion/Hana в примерах" — поэтому и уточняю.
Ты прав, переименовал.
EP>Это считается примером или нет?
Потенциально, это то, что мне нужно.
Глянул еще раз. Не опознал английские версии когда-то прочитанных книг. Тот же "Шаблоны C++" мне показались более полезными.
Спасибо!
Здравствуйте, kaa.python, Вы писали:
KP>Очень часто слышу мнение о невероятной полезности MPL (было дело, пару раз нашел ей применение) подобный библиотек. Сейчас вот Hana подоспела, которая тоже невероятно полезна. Так вот, а не видел ли кто некого труда, можно по аналогии с творением от GoF о реальных или более-менее похожих на реальность вариантах использования этих библиотек? Ну, так что бы десяток-другой примеров, хотя бы, в духе "была пробелема Ы, в при помощи замечательной MPL/Hana мы её очень эффективно решили". Лично я, когда читаю приложенную документацию и/или тесты, понимаю что "все очень круто", но вопрос "а нахрена?" меня никак не покидает уже многие годы
Один я вижу противоречие между "а нахрена?" и "было дело, пару раз нашел ей применение"?
Здравствуйте, jazzer, Вы писали:
J>Один я вижу противоречие между "а нахрена?" и "было дело, пару раз нашел ей применение"?
Вообще-то да. Противоречия нет, т.к. пару раз найти применение паре функций из огромной библиотеки как раз и говорит о "а нахрена оно все". Как минимум для меня. Но ведь не зря люди столько написали, может я просто что-то не понимаю
Метапрограммирование вообще и сабжи в частности в основном применяются для производства других библиотек, которые и служат для "была пробелема Ы"решения конкретных прикладных задач, либо в свою очередь, служат основой для опять же библиотек, которые ... =)
Пример — boost.proto\boost.mpl -> boost.simd -> nt2 -> HPC
Здравствуйте, kaa.python, Вы писали:
KP>Здравствуйте, jazzer, Вы писали:
J>>Один я вижу противоречие между "а нахрена?" и "было дело, пару раз нашел ей применение"?
KP>Вообще-то да. Противоречия нет, т.к. пару раз найти применение паре функций из огромной библиотеки как раз и говорит о "а нахрена оно все". Как минимум для меня. Но ведь не зря люди столько написали, может я просто что-то не понимаю
Очевидно, зависит от задач. У тебя задачи вот такие, что MPL в полный рост не понадобился.
Мне вот бесселевы функции ни разу не понадобились, и чего теперь Есть же люди, которые считают тяжелую математику, им оно нужно. То же с MPL — когда ты пишешь шаблонную библиотеку, которая должна работать с кучей разных типов разных свойств — тебе неизбежно понадобятся какие-то средства, чтоб со всем этим управляться. А если не пишешь — то тебе оно и не надо
Сначала подумал что ты про SAP Hana, вот это, думаю, вопросы пошли в С++ разделе.
KP>"была пробелема Ы, в при помощи замечательной MPL/Hana мы её очень эффективно решили"
я как-то раз применил, так код этот наверняка до сих пор живет без изменений из версии в версию, так как никто его не может изменить кроме меня (: