Здравствуйте, eao197, Вы писали:
E>Кстати, если сравнить реализацию compile-time вычисления факториала на C++:
...
E>то мне кажется, что она получается в более функциональном стиле, что ли
Думаешь? В Nemerle я тоже заюзал матчинг, на самом деле. И какая разница, выглядит матчинг так:
fun(x)
{
| 0 => ...
| 1 => ...
| _ => ...
}
Или так:
fun(0) = ...
fun(1) = ...
fun(x) = ...
E>И не на много длиннее в реализации.
E>Вот только синтаксический оверхэд в виде template<> struct под ногами путается
E>Зато компилятор не дает вычислять факториал нуля
На Nemerle тоже не даст, естественно, — посмотри, что случится при вызове Oyster.Macro.Fact(0)
В общем-то, главное преимущество Nemerle тут в том, что можно проворачивать более сложные вычисления в compile-time, чем на шаблонах.
Ну и ещё преимущество _имхо_ в том, что фактически пишется тот же код на Nemerle, а не на каком-то другом подъязыке, — просто он выполнится во время компиляции.