сегодня состоялся релиз двух проектов: Epilepsy и datatype99
Epilepsy
Это функциональный язык программирования, реализованный полностью на препроцессорных макросах (аналог Boost/Preprocessor). он идёт вместе с
формальной спецификацией.
интересный пример —
обход двоичного дерева во время компиляции.
datatype99
Это header-only библиотека, дополняющая C99 тип-суммами (такими, как в Rust enums). Реализована на Epilepsy. выглядит примерно так:
datatype(
BinaryTree,
(Leaf, int),
(Node, struct BinaryTree *, int, struct BinaryTree *)
);
int sum(const BinaryTree *tree) {
match(*tree) {
of(Leaf, x) {
return *x;
}
of(Node, lhs, x, rhs) {
return sum(*lhs) + *x + sum(*rhs);
}
}
}