標準愚痴出力

個人的なIT作業ログです。もしかしたら一般的に参考になることが書いているかもしれません(弱気

もう一つだけ、小さな optional パッケージを作った

以前:

というパッケージを作ったが、別の方式で、もう一つ作ってみた。

README にだいたい書いてあるけれども、go-minimal-optional では

type Value[T any] []T

と表現していた構造を

type Value[T any] struct {
    value T
    ok    bool
}

という安直な形で再実装してみた。メモリアローケーションが改善されるのではないかと期待してのことだが… 結果は

go-minimal-optional

BenchmarkIfSome-4       656701584                1.790 ns/op           0 B/op          0 allocs/op
BenchmarkIfNone-4       1000000000               0.7019 ns/op          0 B/op          0 allocs/op

go-tiny-optional

BenchmarkIfSome-4       675800485                1.787 ns/op           0 B/op          0 allocs/op
BenchmarkIfNone-4       1000000000               0.7008 ns/op          0 B/op          0 allocs/op

ほんの少しだけ速いけど、微粒子レベルの差にすぎず、あまり変わりませんねぇ。それよりも、allocation 回数がどっちでもゼロだったのに驚いた。Go の最適化がうまいこと効いていたみたい。

まぁ、これくらいなら、1.22 でなくとも「rangefunc もどき」が使える go-minimal-optional でいいかもしれませんねぇ。