ZigでシンプルなIteratorライブラリを作っている

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なので、 メタプログラミングっぽいこともできるし、エコシステムも比較的充実しているのでコードを書いていて楽しい。