Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
А что вы имеете в виду под «разделение типов и значений»?
(++) : Vect n a -> Vect m a -> Vect (n + m) a
(++) Nil ys = ys
(++) (x :: xs) ys = x :: xs ++ ys
Там есть «макросы» — специальные функции, начинающиеся с ключевого слова «macro». По сути это функции, выполняющиеся во время компиляции. В них можно обычным императивным способом выполнять код, который имеет доступ к API компилятора. Этим функциям можно передать объекты кода в виде AST-деревьев. С одной стороны, никаких строк — с другой стороны, никакой шаблонной магии.
template Tuple(T...)
{
alias Tuple = T;
}
/// Alias for vector of 2 elements
alias vec2(T) = Vector!(T, 2);
/// Alias for vector of 3 elements
alias vec3(T) = Vector!(T, 3);
struct Predmet { int x; }
Predmet globalPredmet = Predmet(15);
unittest
{
std.stdio.writeln(globalPredmet);
}
struct Predmet { int x; }
Predmet globalPredmet;
static this()
{
globalPredmet = Predmet(15);
}
unittest
{
std.stdio.writeln(globalPredmet);
}
Compile-time функциональное программирование в D