Здравствуйте, WolfHound, Вы писали:
EP>>Возможен вот такой вариантАвтор: Evgeny.Panasyuk
Дата: 12.10.14
:
WH>Раза в 2-3 больше кода это такая мелочь...
1. В этом примере ad-hoc парсинг. С использованием готового комбинатора парсеров (например Metaparse принятого на днях в Boost) кода будет существенно меньше.
2. Это узко-специализированный библиотечный код — пишется намного реже чем используется. Тот же hi_octane, на которого ты ссылаешься, судя по всему сам форматирование не писал, а использовал.
3. В Nemerle мета-программирование действительно удобнее — я с этим и не спорил.
EP>>Такое было в C++98 — помечаешь метод ключевым словом, и компилятор не даст вызывать его без лока.
WH>Чего?
Alexandrescu 2001:
volatile: The Multithreaded Programmer's Best Friend.
EP>>В Nemerle есть вывод типов через использование, но не нужно забывать/умалчивать что сами типы-то несравнимо примитивнее — например higher-rank polymorphism'а нет, и соответствующего вывода типов тоже
WH>Точно нет?
ЕМНИП, Об этом даже VladD2 говорил в своей презентации.
WH>WH>public abstract class Foo
WH>{
WH> public abstract Bar[T](value : T) : T;
WH>}
WH>
Это не то, тут сигнатура прибита гвоздями в базовом классе. В общем случае она может быть сильно разной. И сама функция принимающая эти templates/generics может ничего не знать об этих сигнатурах, а всего лишь передавать результат в другой generic полученный через параметры — типичная ситуация в коде с ФВП, а-ля всякие apply.
EP>>Без проблем: live demo.
WH>Тормоза и выделение памяти.
В подобном случае выделения памяти скорей всего не будет — во многих реализациях std::function используется small object optimization.
Используя же
function_non_owningАвтор: Evgeny.Panasyuk
Дата: 26.02.15
— аллокаций не будет даже для больших объектов.
WH>>>Но никто не делает. Ибо ад.
EP>>Делают, например смотри ODB:
WH>0.00001% пользователей это никто.
Нет

И ODB не единственный пример.
EP>>Я использовал Clang ASTMatcher — никакого ада.
WH>Вот это ад:
WH>WH>binaryOperator(hasOperatorName("+"), hasLHS(integerLiteral(equals(0))))
WH>
Для редкого использования (там где не хватает встроенного MP) вполне приемлемо. Но в целом согласен что можно сделать проще, на что я им и
указывал ранее.
WH>Для сравнения аналог на немерле.
WH>WH><[ $r + 0 ]>
WH>
А это может использоваться для определения грамматики syntax extensions? Или хотя бы как условие PM?
EP>>С чем? С Nemerle? Почему?
WH>Слишком долго объяснять,
Да, да, "Нет времени объяснять,
действуй юзай Nemerle!"