Здравствуйте, Kswapd, Вы писали:
P>>spirit — это либа, предоставляющая такие возможности (embedded EBNF), которые просто невозможно достичь иными способами.
K>Да вот только не EBNF она предоставляет, а нечитаемую пародию на него.
Дело скорее вкуса. Достаточно быстро адаптируешься, а для задач, под которые, как я считаю он более всего подходит (см. ниже) — большего и не надо.
K>На практике от использования спирита возникает больше проблем, чем решается.
Ниша спирита — небольшие встроенные парсеры, в местах где не хватает регекспов.
Если пытаться написать на нем парсер плюсов — проблемы несомненно будут =)
K>Самое оптимальное почти во всех случаях — сделать прототип на ANTLR и написать рабочий парсер вручную по мотивам сгенерированного кода.
Это ваш опыт. Возможно вам так удобнее. Мой опыт — либо полностью автогенереный код, куда смотреть вообще не нужно, либо достаточно спирита.
То что я видел "по мотивам сгенерированного кода" — нечитаемое говно, единственное "достоинство" которого — нет шаблонов =)
Здравствуйте, kurchatov, Вы писали:
K>Но в последние годы появился какой-то особенный класс С++ программистов, которые пихают шаблоны везде, делая код и ошибки компиляции нечитаемыми.
об этом предупреждали несколько лет назад, когда экстаз от буста поразил многих.
K>Ну или просто может я лох, а другие умные. Наболело, в общем.
годы идут, а плюсеры всё ещё меряются, кто знает буст больше, и кто более извращённо использует шаблоны с макросами.
хъ
K>о да. Лучше тратить драгоценное время на разработку с бустом, чем на оптимизацию дизайна и алгоритмов. Отличная позиция.
На практике получается, что нежелающие "тратить драгоценное время на разработку с бустом" — тратят его на написание каких-то своих убогих велосипедов, вместо "оптимизации дизайна и алгоритмов".
хъ
X>>по поводу boost.proto — я как-то не особо присматривался к этой либе, и толком не знаю, какие задачи она решает...
PM>Вроде как с ней можно нагородить DSL в С++ на шаблонах. Но реальных применений я не видел, потому и спросил
Дык спирит же! Или вот boost.simd, его нет в самом бусте, но товариши вроде собираются его продвинуть.
Здравствуйте, kurchatov, Вы писали:
K>Пример тривиальный. И это мы с вами знаем, как оно работает. А придет новичок в вашу команду, и сколько времени ему потребуется врубиться в грамматику посложнее?
Здравствуйте, kurchatov, Вы писали:
K>Откуда пошла эта мода на обмазывание шаблонами к месту и не к месту? Нет, я ничего не имею против шаблонов, если действительно надо — только приветствую.
Многие не приветствуют потому, что не понимают. K>Ну или просто может я лох, а другие умные. Наболело, в общем.
Просто ты не осилил. В шаблонной "магии" используются простые принципы языка. ты их не знаешь, отсюда и непонимание того как оно всё работает.
Здравствуйте, alex_public, Вы писали:
_>Да, это как мне кажется самый большой недостаток языка (ну про сложность мы упоминать не будем) в данный момент. Но в данном случае boost.fusion — это всё же на мой взгляд уж слишком костыльное решение.
Недостаток языка — это отсутствие compile-time reflection, Boost.Fusion для этого предлагает макросы BOOST_FUSION_DEFINE_STRUCT и подобные.
А вот те методы работы, которые предлагает Boost.Fusion с уже адаптированными структурами (то есть для которые есть необходимые гетерогенные итераторы) — вполне себе, ничего костыльного.
Даже как-то сравнивали в этом отношении Boost.Fusion vs Nemerle vs D (Fusion
Здравствуйте, Patalog, Вы писали:
P>Здравствуйте, kurchatov, Вы писали:
K>>о да. Лучше тратить драгоценное время на разработку с бустом, чем на оптимизацию дизайна и алгоритмов. Отличная позиция.
P>На практике получается, что нежелающие "тратить драгоценное время на разработку с бустом" — тратят его на написание каких-то своих убогих велосипедов, вместо "оптимизации дизайна и алгоритмов".
Ну, это лозунг.
А нельзя ли что-нибудь сказать про то, как буст помогает вести разработку алгоритмов?
Потому что на первый взгляд "алгоритм" — вообще вещь внеязыковая.
Здравствуйте, niXman, Вы писали:
K>>Откуда пошла эта мода на обмазывание шаблонами к месту и не к месту? Нет, я ничего не имею против шаблонов, если действительно надо — только приветствую. K>>Но в последние годы появился какой-то особенный класс С++ программистов, которые пихают шаблоны везде, делая код и ошибки компиляции нечитаемыми. K>>Такие люди пишут код, обмазанный шаблонами — и говорят "смотрите, как просто и красиво!". Да нихрена не просто и не красиво! Разбор такого кода вызывает у меня только головную боль. X>ну... а у меня хобби — астрофизика, и это для меня дико сложно. но мне что, всех астрофизиков называть идиотами все усложняющими? посыл понятен?
Я тоже не очень с этими шаблонами... вот прямо сейчас сижу разбираюсь. Просто раньше я как-то избегал излишнего метапрограммирования, а тут попался проект с достаточно глубоким уровнем применения матапрограммирования. Понемногу разбираюсь.
Но считаю что врага надо знать в лицо У меня тоже есть хобби — разработка своего языка программирования, не менее (и даже гораздо более) мощного чем С++, но без всей этой головной боли. И для того чтобы это сделать наилучшим образом, считаю что нужно знать и С++ в совершенстве, в особенности все подводные камни и грабли, связанные с шаблонами и метапрограммированием. Также очень интересны "библиотечные языковые расширения", которые предлагает Буст и подобные ему библиотеки... интересна мотивация программистов которые это придумывают.
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Тут даже не нужно знать Boost.Spirit, чтобы понять что происходит
ну это лукавство
для режима
1) почитай и прикинь насколько сложный питон-код мы умеем парсить
2) удали к чертям
действительно знать spirit не надо
для режимов
1) добавь новую питон-фичу
2) пофикси парсинг вот на таком волосатом питон-скрипте
уже надо
1) манулы spirit шерстить
2) плясать с бубном / гуглить / спращивать на рсдн почему же эта гадость не компилируется ???
3) почему же волосатый питон-скрипт все равно не парсится ???
Здравствуйте, Kernan, Вы писали:
K>Здравствуйте, kurchatov, Вы писали:
K>>Откуда пошла эта мода на обмазывание шаблонами к месту и не к месту? Нет, я ничего не имею против шаблонов, если действительно надо — только приветствую. K>Многие не приветствуют потому, что не понимают. K>>Ну или просто может я лох, а другие умные. Наболело, в общем. K>Просто ты не осилил. В шаблонной "магии" используются простые принципы языка. ты их не знаешь, отсюда и непонимание того как оно всё работает.
Шаблоны изначально придумывались для предоставления статического полиморфизма (Object-то нет в С++). Здесь и прирост производительности, если можно юзать шаблон вместо иерархии классов.
Остальное — горе от ума.
Здравствуйте, Kernighan, Вы писали:
K>>>о да. Лучше тратить драгоценное время на разработку с бустом, чем на оптимизацию дизайна и алгоритмов. Отличная позиция. P>>На практике получается, что нежелающие "тратить драгоценное время на разработку с бустом" — тратят его на написание каких-то своих убогих велосипедов, вместо "оптимизации дизайна и алгоритмов". K>Ну, это лозунг. K>А нельзя ли что-нибудь сказать про то, как буст помогает вести разработку алгоритмов? K>Потому что на первый взгляд "алгоритм" — вообще вещь внеязыковая.
Не разработку алгоритмов в широком "теоретическом" смысле, а скорее реализацию. И не только алгоритмов, но и структур данных.
Примеры библиотек Boost'а непосредственно упрощающих реализацию алгоритмов и структур данных: Graph, Geometry, Polygon, GIL, Interval, Multiprecision, Math*, Odeint, Accumulators, Container, Intrusive, Heap, ICL, Coroutine и т.д., не говоря уже об таких вспомогательных библиотеках как Iterator, Operators, Range и т.п.
Здравствуйте, uzhas, Вы писали:
U>предвзятость налицо
В чём? В том что пишется шаблон функции работающий со всеми типами (адаптированными к Boost.Fusion), а не инлайнится код для каждой отдельной структуры?
Здравствуйте, uzhas, Вы писали:
EP>>Тут даже не нужно знать Boost.Spirit, чтобы понять что происходит U>ну это лукавство U>для режима U>1) почитай и прикинь насколько сложный питон-код мы умеем парсить U>[censored] U>действительно знать spirit не надо
Так вроде же о таком варианте и шла речь?
K>А придет новичок в вашу команду, и сколько времени ему потребуется врубиться в грамматику посложнее?
U>для режимов U>1) добавь новую питон-фичу U>2) пофикси парсинг вот на таком волосатом питон-скрипте U>уже надо U>1) манулы spirit шерстить U>2) плясать с бубном / гуглить / спращивать на рсдн почему же эта гадость не компилируется ??? U>3) почему же волосатый питон-скрипт все равно не парсится ???
Согласен, но это же также, в той или иной степени, относится к любому генератору парсеров
Здравствуйте, uzhas, Вы писали:
EP>>В чём? U>в typos
Так это к авторам-евангелистам фрагментов D и Nemerle, а не ко мне
Или ты имеешь в виду, что в этих языках есть нечто метафизическое, заставляющее делать typos?