Goの進化に追いつかない
プログラミング言語のGoについては、軽く以下の記事で触れたのですが、なかなか便利なのでツールとして使うコードなんかをときどきは書いています。
Go っていう名前のプログラミング言語
先日、久しぶりにGoの処理系をアップデートしたらどうもおかしな挙動を示すようになり、慌ててドキュメントを読み直しました。
Go1.22のリリース
【Go 1.22】for ループの2つの仕様変更
まあ今までちょっとばかり持って回ったコードを書いていたところが書きやすくなったわけですし、Go言語の方針として後方互換性は大切にされていて、環境変数GODEBUGを使えばとりあえず以前のコードをそのまま動かすことも出来ます。
最近のGoの後方互換性について(2024年も積極的にバージョンアップしよう)
自分で使うコードなので、とてもヒトに見せられるようなものはなく、あまり丁寧なテストコードは書いていないので、問題点は意識していないところで見つかったのですが、ちょっとビックリしました。イテレータに関しては、パフォーマンスやセキュリティに直結しているところもあるので、どうしても仕様を変更する必要があったのでしょうね。
そんなことを考えていたら、つい先日、さらに1.23がリリースされました。
Go 1.23 is released
イテレータはさらに進化して yield をより使いこなす必要性があるようです。普通は決まった使い方ばかりしているので、新機能を上手に使うためには設計というか頭の方を切り替える必要があるようです。
Go1.23で導入予定のイテレータを完全理解する✌️
Go1.23のイテレータを動かして学ぶ
Go1.23で導入予定のイテレータ機能の概要と新機能の利点
21世紀のプログラミング言語は、このイテレータの概念が重要になっているわけですが、処理系によって微妙に実装が違っていて、その概念(と実装)を理解するのはちょっと難しいところもあります。特に型制約の厳しい言語ではイテレータ型をちゃんと使いこなさないとならず表記も長くなりがちでときどき「許して」という気持ちになることもあります。
イテレータ
最近はひとつのチップに多くのCPUが搭載されていますし、プログラムのパフォーマンスはループを効率よく回すかというか、回さずに済ますかにかかっていて、可能であれば複数のCPUで分担できることが望ましいです。その鍵になるのがイテレータの使い方なんです。気がつけばベースとなるCPUの機能が大きく進化しているので、昔覚えたやり方に拘っているとダメな例でもあります。まあ当時も大型機なんかではこの手の苦労がいろいろあったことを思い出します。
もう少し上手にGoを使いこなせるようにならねば。
ヘッダ画像は、以下のものを使わせていただきました。https://commons.wikimedia.org/wiki/File:Go_Logo_Aqua.svg
The Go Authors - blog.golang.org/go-brand, パブリック・ドメイン, https://commons.wikimedia.org/w/index.php?curid=68591297による