маленькие радости
Jun. 25th, 2014 11:40 pmЕсть вещи, которые совершенно тривиальны в динамически типизированных и в зависимотипизированных языках, но вот в куче промежуточных - привычных нам статически типизированных - или не делаются вовсе, или требуют страшных слов на букву "м" (нет, не монад). К счастью, бывают исключения. Пара примеров из свеженаписанного кода:
1.
Тут функция вызывается с 81 комбинацией типов.
2.
Эта функция помимо целого числа num принимает произвольное количество функций, производящих значения указанных при ее вызове типов. Тип каждой конкретной ф-ии из тупла makers формируется применением type-level ф-ии MakerType к переданному типу из тупла Hs. В теле ее имеется цикл, проходящий по этому набору функций, на разных итерациях вызываются разные ф-ии из этого набора, получаются значения разных типов, и дальше используются как сами эти значения, так и имена их типов.
Что приятно, что тут не возникает раздумий о макросах и метапрограммировании, все пишется довольно естественно и органично, это просто код.
1.
...
alias types = TypeTuple!(bool, int, double, char, string,
TestStruct!false, TestStruct!true, TestClass!false, TestClass!true);
foreach(t1; types)
foreach(t2; types)
testRB!(t1, t2, false)(num);
Тут функция вызывается с 81 комбинацией типов.
2.
alias MakerType(T) = T delegate();
void testHashesHisto(K, V, Hs...)(size_t num, staticMap!(MakerType, Hs) makers) {
...
foreach(i, H; Hs) {
auto h = makers[i]();
measure("# " ~ H.stringof ~ ".make_histo", (){
...
Эта функция помимо целого числа num принимает произвольное количество функций, производящих значения указанных при ее вызове типов. Тип каждой конкретной ф-ии из тупла makers формируется применением type-level ф-ии MakerType к переданному типу из тупла Hs. В теле ее имеется цикл, проходящий по этому набору функций, на разных итерациях вызываются разные ф-ии из этого набора, получаются значения разных типов, и дальше используются как сами эти значения, так и имена их типов.
Что приятно, что тут не возникает раздумий о макросах и метапрограммировании, все пишется довольно естественно и органично, это просто код.
no subject
Date: 2014-06-25 05:31 pm (UTC)