https://github.com/Drumato/ziter というのを作っている。 これはZigでRustっぽいIteratorインタフェースとコア関数を提供するライブラリで、 今のところ以下のような機能が動く。
fn map_fn(v: i64) i64 {
return v * 2;
}
fn filter_fn(v: i64) i64 {
return v > 2;
}
fn fold_left_fn(acc: i64, v: i64) i64 {
return acc + v;
}
test "Iterator" {
const I = array.ArrayIterator(i64, 3);
var iter = Iterator(I, i64).init(I.init([_]i64{ 1, 2, 3 }));
const result = try iter.map(i64, map_fn).filter(filter_fn).fold_left(i64, 0, fold_left_fn);
try std.testing.expectEqual(10, result);
}
Zig, 個人的にはすごく良い言語だと思っている。 プログラムでメモリアロケータから何からカスタマイズして使いたいなど、 基本的にすべてなプログラマブルな環境下でコードを書きたいときはとても良いと思っている。
特に、 comptime T: type
という感じで型がfirst-classなので、
メタプログラミングっぽいこともできるし、エコシステムも比較的充実しているのでコードを書いていて楽しい。