Re[3]: Метапрограммисты надоели
От: Patalog Россия  
Дата: 06.10.14 09:38
Оценка:
Здравствуйте, kurchatov, Вы писали:

[]

K>У spirit-a нет никаких преимуществ перед бизоном. Оба делают одно и то же, только первый — во время компиляции с нечитаемыми ошибками.


Я что-то пропустил и бизон умеет embedded?

есть возможность (желание) использовать препроцессинг — никто не воспрешает, берите теплый ламповый bison

Почетный кавалер ордена Совка.
Re[3]: Метапрограммисты надоели
От: Patalog Россия  
Дата: 06.10.14 09:52
Оценка: +1
Здравствуйте, Kswapd, Вы писали:

P>>spirit — это либа, предоставляющая такие возможности (embedded EBNF), которые просто невозможно достичь иными способами.


K>Да вот только не EBNF она предоставляет, а нечитаемую пародию на него.


Дело скорее вкуса. Достаточно быстро адаптируешься, а для задач, под которые, как я считаю он более всего подходит (см. ниже) — большего и не надо.

K>На практике от использования спирита возникает больше проблем, чем решается.


Ниша спирита — небольшие встроенные парсеры, в местах где не хватает регекспов.
Если пытаться написать на нем парсер плюсов — проблемы несомненно будут =)

K>Самое оптимальное почти во всех случаях — сделать прототип на ANTLR и написать рабочий парсер вручную по мотивам сгенерированного кода.


Это ваш опыт. Возможно вам так удобнее. Мой опыт — либо полностью автогенереный код, куда смотреть вообще не нужно, либо достаточно спирита.
То что я видел "по мотивам сгенерированного кода" — нечитаемое говно, единственное "достоинство" которого — нет шаблонов =)
Почетный кавалер ордена Совка.
Re: Метапрограммисты надоели
От: neFormal Россия  
Дата: 06.10.14 09:59
Оценка: +2 -1
Здравствуйте, kurchatov, Вы писали:

K>Но в последние годы появился какой-то особенный класс С++ программистов, которые пихают шаблоны везде, делая код и ошибки компиляции нечитаемыми.


об этом предупреждали несколько лет назад, когда экстаз от буста поразил многих.

K>Ну или просто может я лох, а другие умные. Наболело, в общем.


годы идут, а плюсеры всё ещё меряются, кто знает буст больше, и кто более извращённо использует шаблоны с макросами.
...coding for chaos...
Re[6]: Метапрограммисты надоели
От: Patalog Россия  
Дата: 06.10.14 10:00
Оценка: +5 -3
Здравствуйте, kurchatov, Вы писали:

хъ

K>о да. Лучше тратить драгоценное время на разработку с бустом, чем на оптимизацию дизайна и алгоритмов. Отличная позиция.


На практике получается, что нежелающие "тратить драгоценное время на разработку с бустом" — тратят его на написание каких-то своих убогих велосипедов, вместо "оптимизации дизайна и алгоритмов".
Почетный кавалер ордена Совка.
Re[7]: Метапрограммисты надоели
От: Patalog Россия  
Дата: 06.10.14 10:04
Оценка: 7 (1)
Здравствуйте, PM, Вы писали:

хъ

X>>по поводу boost.proto — я как-то не особо присматривался к этой либе, и толком не знаю, какие задачи она решает...


PM>Вроде как с ней можно нагородить DSL в С++ на шаблонах. Но реальных применений я не видел, потому и спросил


Дык спирит же! Или вот boost.simd, его нет в самом бусте, но товариши вроде собираются его продвинуть.
Почетный кавалер ордена Совка.
Re[3]: Метапрограммисты надоели
От: Patalog Россия  
Дата: 06.10.14 10:08
Оценка:
Здравствуйте, flаt, Вы писали:

Название либы доставляет. =)
Почетный кавалер ордена Совка.
Re[5]: Метапрограммисты надоели
От: Evgeny.Panasyuk Россия  
Дата: 06.10.14 10:17
Оценка: +2
Здравствуйте, kurchatov, Вы писали:

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


Вот посложнее
Автор: Evgeny.Panasyuk
Дата: 03.10.14
:
function   = string("def")   >> +space >> expression >> '(' >> expression >> ')' >> block;
while_     = string("while") >> +space >> expression >> block;
if_        = string("if")    >> +space >> expression >> block >> string("else") >> block;

block      = ':' >> ((eol >> '{' >> statements >> '}') | (+space >> statement));
statement  = (expression >> eol) | while_ | if_ | function;
expression = *alnum;
statements = *statement;
Тут даже не нужно знать Boost.Spirit, чтобы понять что происходит
Re: Метапрограммисты надоели
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 06.10.14 10:22
Оценка: +1 -4
Здравствуйте, kurchatov, Вы писали:

K>Откуда пошла эта мода на обмазывание шаблонами к месту и не к месту? Нет, я ничего не имею против шаблонов, если действительно надо — только приветствую.

Многие не приветствуют потому, что не понимают.
K>Ну или просто может я лох, а другие умные. Наболело, в общем.
Просто ты не осилил. В шаблонной "магии" используются простые принципы языка. ты их не знаешь, отсюда и непонимание того как оно всё работает.
Sic luceat lux!
Re[4]: Метапрограммисты надоели
От: Evgeny.Panasyuk Россия  
Дата: 06.10.14 10:32
Оценка: 7 (1)
Здравствуйте, alex_public, Вы писали:

_>Да, это как мне кажется самый большой недостаток языка (ну про сложность мы упоминать не будем) в данный момент. Но в данном случае boost.fusion — это всё же на мой взгляд уж слишком костыльное решение.


Недостаток языка — это отсутствие compile-time reflection, Boost.Fusion для этого предлагает макросы BOOST_FUSION_DEFINE_STRUCT и подобные.
А вот те методы работы, которые предлагает Boost.Fusion с уже адаптированными структурами (то есть для которые есть необходимые гетерогенные итераторы) — вполне себе, ничего костыльного.

Даже как-то сравнивали в этом отношении Boost.Fusion vs Nemerle vs D (Fusion
Автор: Evgeny.Panasyuk
Дата: 24.10.13
, Nemerle
Автор: VladD2
Дата: 24.10.13
, D
Автор: D. Mon
Дата: 24.10.13
, all
Автор: Evgeny.Panasyuk
Дата: 25.10.13
) получилось вот так (даже без использования полиморфных лямбд):
struct Hasher
{
    template<typename T>
    size_t operator()(size_t hash, T x)
    {
        boost::hash_combine(hash, x);
        return hash;
    }
};

template<typename Struct>
size_t hash_it(const Struct &x)
{
    return boost::fusion::fold(x, size_t(0), Hasher{});
}
versus
[MacroUsage(MacroPhase.WithTypedMembers, MacroTargets.Class)]
macro ImplementGetHeshCode(typeBuilder : TypeBuilder)
{
  def fields = typeBuilder.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
  def make(field)
  {
    if (field.GetMemType().Equals(<[ ttype: int ]>))
      <[ result ^= this.$(field.Name : usesite) ]>
    else
      <[ result ^= this.$(field.Name : usesite).GetHashCode(); ]>
  }
      
  typeBuilder.Define(<[ decl: 
    public override GetHashCode() : int
    {
      mutable result = 0;
      ..$(fields.Map(make));
      result
    }
  ]>);
}
versus
mixin template ImplementGetSheeshCode() { 
    size_t GetSheeshCode()
    {
        alias T = typeof(this);
        size_t h = 123;        
        foreach(m; __traits(allMembers, T))
            static if (m!="Monitor") {             
                static if (isIntegral!(typeof(__traits(getMember, T, m))))
                    h ^= __traits(getMember, T, m);
                else static if (__traits(hasMember, typeof(__traits(getMember, T, m)), "toHash"))
                    h ^= __traits(getMember, T, m).toHash;
            }            
        return h;
    }
}

Re[7]: Метапрограммисты надоели
От: Kernighan СССР  
Дата: 06.10.14 10:53
Оценка:
Здравствуйте, Patalog, Вы писали:

P>Здравствуйте, kurchatov, Вы писали:


K>>о да. Лучше тратить драгоценное время на разработку с бустом, чем на оптимизацию дизайна и алгоритмов. Отличная позиция.


P>На практике получается, что нежелающие "тратить драгоценное время на разработку с бустом" — тратят его на написание каких-то своих убогих велосипедов, вместо "оптимизации дизайна и алгоритмов".


Ну, это лозунг.
А нельзя ли что-нибудь сказать про то, как буст помогает вести разработку алгоритмов?
Потому что на первый взгляд "алгоритм" — вообще вещь внеязыковая.
Re[2]: Метапрограммисты надоели
От: NeoCode  
Дата: 06.10.14 11:06
Оценка: -1
Здравствуйте, niXman, Вы писали:

K>>Откуда пошла эта мода на обмазывание шаблонами к месту и не к месту? Нет, я ничего не имею против шаблонов, если действительно надо — только приветствую.

K>>Но в последние годы появился какой-то особенный класс С++ программистов, которые пихают шаблоны везде, делая код и ошибки компиляции нечитаемыми.
K>>Такие люди пишут код, обмазанный шаблонами — и говорят "смотрите, как просто и красиво!". Да нихрена не просто и не красиво! Разбор такого кода вызывает у меня только головную боль.
X>ну... а у меня хобби — астрофизика, и это для меня дико сложно. но мне что, всех астрофизиков называть идиотами все усложняющими? посыл понятен?

Я тоже не очень с этими шаблонами... вот прямо сейчас сижу разбираюсь. Просто раньше я как-то избегал излишнего метапрограммирования, а тут попался проект с достаточно глубоким уровнем применения матапрограммирования. Понемногу разбираюсь.
Но считаю что врага надо знать в лицо У меня тоже есть хобби — разработка своего языка программирования, не менее (и даже гораздо более) мощного чем С++, но без всей этой головной боли. И для того чтобы это сделать наилучшим образом, считаю что нужно знать и С++ в совершенстве, в особенности все подводные камни и грабли, связанные с шаблонами и метапрограммированием. Также очень интересны "библиотечные языковые расширения", которые предлагает Буст и подобные ему библиотеки... интересна мотивация программистов которые это придумывают.
Re[6]: Метапрограммисты надоели
От: uzhas Ниоткуда  
Дата: 06.10.14 11:21
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Тут даже не нужно знать Boost.Spirit, чтобы понять что происходит


ну это лукавство
для режима
1) почитай и прикинь насколько сложный питон-код мы умеем парсить
2) удали к чертям
действительно знать spirit не надо

для режимов
1) добавь новую питон-фичу
2) пофикси парсинг вот на таком волосатом питон-скрипте

уже надо
1) манулы spirit шерстить
2) плясать с бубном / гуглить / спращивать на рсдн почему же эта гадость не компилируется ???
3) почему же волосатый питон-скрипт все равно не парсится ???
Re[5]: Метапрограммисты надоели
От: uzhas Ниоткуда  
Дата: 06.10.14 11:24
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:


EP>Даже как-то сравнивали


 hash_it

versus
ImplementGetHeshCode

versus
 GetSheeshCode()


EP>


предвзятость налицо
Re[2]: Метапрограммисты надоели
От: kurchatov  
Дата: 06.10.14 11:26
Оценка:
Здравствуйте, Kernan, Вы писали:

K>Здравствуйте, kurchatov, Вы писали:


K>>Откуда пошла эта мода на обмазывание шаблонами к месту и не к месту? Нет, я ничего не имею против шаблонов, если действительно надо — только приветствую.

K>Многие не приветствуют потому, что не понимают.
K>>Ну или просто может я лох, а другие умные. Наболело, в общем.
K>Просто ты не осилил. В шаблонной "магии" используются простые принципы языка. ты их не знаешь, отсюда и непонимание того как оно всё работает.

Ого! Ну ладно, кто-то должен был это сказать.
Re[3]: Метапрограммисты надоели
От: kurchatov  
Дата: 06.10.14 11:34
Оценка:
Шаблоны изначально придумывались для предоставления статического полиморфизма (Object-то нет в С++). Здесь и прирост производительности, если можно юзать шаблон вместо иерархии классов.
Остальное — горе от ума.
Re[8]: Метапрограммисты надоели
От: Evgeny.Panasyuk Россия  
Дата: 06.10.14 11:36
Оценка: +1 :)
Здравствуйте, Kernighan, Вы писали:

K>>>о да. Лучше тратить драгоценное время на разработку с бустом, чем на оптимизацию дизайна и алгоритмов. Отличная позиция.

P>>На практике получается, что нежелающие "тратить драгоценное время на разработку с бустом" — тратят его на написание каких-то своих убогих велосипедов, вместо "оптимизации дизайна и алгоритмов".
K>Ну, это лозунг.
K>А нельзя ли что-нибудь сказать про то, как буст помогает вести разработку алгоритмов?
K>Потому что на первый взгляд "алгоритм" — вообще вещь внеязыковая.

Не разработку алгоритмов в широком "теоретическом" смысле, а скорее реализацию. И не только алгоритмов, но и структур данных.
Примеры библиотек Boost'а непосредственно упрощающих реализацию алгоритмов и структур данных: Graph, Geometry, Polygon, GIL, Interval, Multiprecision, Math*, Odeint, Accumulators, Container, Intrusive, Heap, ICL, Coroutine и т.д., не говоря уже об таких вспомогательных библиотеках как Iterator, Operators, Range и т.п.

Boost это же не только "shared_ptr и Spirit"
Re[6]: Метапрограммисты надоели
От: Evgeny.Panasyuk Россия  
Дата: 06.10.14 11:39
Оценка:
Здравствуйте, uzhas, Вы писали:

U>предвзятость налицо


В чём? В том что пишется шаблон функции работающий со всеми типами (адаптированными к Boost.Fusion), а не инлайнится код для каждой отдельной структуры?
Re[7]: Метапрограммисты надоели
От: Evgeny.Panasyuk Россия  
Дата: 06.10.14 11:43
Оценка:
Здравствуйте, 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) почему же волосатый питон-скрипт все равно не парсится ???

Согласен, но это же также, в той или иной степени, относится к любому генератору парсеров
Отредактировано 06.10.2014 11:44 Evgeny.Panasyuk . Предыдущая версия .
Re[7]: Метапрограммисты надоели
От: uzhas Ниоткуда  
Дата: 06.10.14 12:44
Оценка: :)
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>В чём?

в typos
Re[8]: Метапрограммисты надоели
От: Evgeny.Panasyuk Россия  
Дата: 06.10.14 12:53
Оценка: :)
Здравствуйте, uzhas, Вы писали:

EP>>В чём?

U>в typos

Так это к авторам-евангелистам фрагментов D и Nemerle, а не ко мне
Или ты имеешь в виду, что в этих языках есть нечто метафизическое, заставляющее делать typos?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.