-
Notifications
You must be signed in to change notification settings - Fork 10
Open
Description
golang/go#61897 がacceptedになりました。
これに伴い、コレクションを返すAPIではiter.Seqを返すことがおそらく一般的になっていくと思います。
例えばGo標準ライブラリのproposal golang/go#53987 (comment) は、最終的にiter.Seqを返すAPIとしてacceptされました。
同様に、synchroでコレクションを返すAPIをiter.Seqに対応させるプランはあるでしょうか?(もしあれば、実装することに興味があります)
具体的には以下のようなものです。
細かいところが十分考えられていないのですが、少し見ていただいた印象としてもしポジティブであればより具体的に考えたいと思っています。
Proposal
synchroではコレクションを返すメソッドとしてPeriod[T]などがunexportedな型periodical[T]を返しており、これの実体は<-chan Time[T]になっていると思います。これの代わりに、iter.Seqを返すようにするというProposalです。
func (Period[T]) Periodic() iter.Seq[Time[T]]Edit: 最初aliasを使う形で書いていたのですが、言語仕様上できないことに気づき、修正しました。
メリット
- proposal: x/exp/xiter: new package with iterator adapters golang/go#61898 のような
iter.Seqを前提としたAPIと組み合わせられるようになること - 将来的に標準的になりそうなAPIに合わせられること
実は具体的なユースケースが手元にあるわけではなく、これを提供することで大きいメリットがあるかどうかはわかっていません。
互換性などについてのノート
nobishino@1fd8814 でテストを書きましたが、少なくとも一部で後方互換性がありません。
- もともとは
periodical型がchannelなので、channel型の変数に代入できるという性質(テストのProperty 1)があった。periodicalの型定義をiter.Seqに置き換えると、この代入はできなくなる。 - もともと
periodical型がchannelなので、for ~ range文で直接使うこともできた(テストのProperty 2)。この性質はrange over funcが実装された後のGoバージョンでは維持される。 Sliceメソッドを削除する必要が生じる。- ※
Sliceメソッドを定義できるようにtype periodical[T TimeZone] iter.Seq[Time[T]]を戻り値とした場合、戻り値の値をiter.Seq[Time[T]]型の変数(関数の引数も含む)にそのままでは代入できなくなる。(型変換をすればできると思われる)
- ※
Code-Hex
Metadata
Metadata
Assignees
Labels
No labels