Re[17]: За счет чего выстреливают языки?
От: Evgeny.Panasyuk Россия  
Дата: 13.07.15 18:03
Оценка:
Здравствуйте, 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!"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.