Go 1.23のrange over func

Go言語の話題はお久しぶりです。

リリースノートくらいは眺めていたのですが1.22リリース時の興味は以下のところでした。

 

bleu48.hatenablog.com

 

同時にrange over funcがプレビュー実装されているとのリリースノートでした。

雰囲気分かりませんでしたがリリース実装にはギリギリ間に合わなかった感じでしょうか。

 

Go 1.23 Release Notes - The Go Programming Language

で,1.23で正式実装されたのが話題です。

他言語をメインに扱う方に簡単な言葉で説明すると「イテレータ関数」というものが言語仕様に入ったと言えば伝わると思います。yieldを使った特殊な形式の関数をもって,イテレータの代わりとすることができるようになりました。

 

他に詳しく説明されているので参考のリンクを並べておきます。

Go1.22で登場するかも!?開発中の新機能イテレータを使ってみる!

Go 1.23リリース連載 range over funcとiterパッケージ | フューチャー技術ブログ

Go 1.23のイテレータについて知っておくべきこと

PythonのitertoolsをGoに移植してみた

 

特に最後の記事でPythonユーザには何ができるようになるか伝わると思います。

コンピュータ将棋界隈だと合法手生成のイテレータに使えそうです。つまり,合法手生成を一度に行うのではなく必要になったときに次の合法手を生成するというイテレータ関数を作ることが出来ます。全合法手を一度に生成する場合と比べて,不要な合法手を生成しないので随分と計算コストが下がることと思いますのでそのうち実装しようとToDoに入れておきましょう。

先日やったオセロも(真面目に探索するとすれば)同様でしょうか。

計算コストばかり気にしていますが表記上プログラマが楽になるのも大きいものと思います。

 

これらは昨日(8/31)に台風でスケジュールがアレになったところで,岩田プロを見かけたという理由だけでKyoto.goの以下のオンラインイベントに飛び込んでみたのが元凶です。

Kyoto.go remote #53 Go 1.23 リリースノートもくもく輪読会 - connpass

ミニPCだったのでカメラはもちろんマイクも無いという酷い状況で短時間イベントだったこともありチャットを少しする程度で聞き手になっておりました。

それでも普段知らない人達が高いモチベーションで学ぶ場ってのは刺激になるもんですね。

 

ということで,刺激は伝播して岡山でもリリースパーティを行うことになりました。

私も間に合うかどうかは分かりませんが善処しようと思います。

 

okayamago.connpass.com

 

---

追記:

Go言語の初期の頃はループが遅いことがあり,詳しい方によるとループ変数が取る値のリストを完全に生成してからループを回している風に聞きました。0から9のループを回す際にはそのリストをメモリ上に生成していたってことですね。

そこから考えると今回の変更は随分と変わったということになります。

無駄なメモリコピーも無くなったのでしょうね。もちろんそうしておかないとイテレータをネストすると当然大変なことになります。