Goイテレーター:純粋性と不純性の狭間

2025-05-31

Go 1.23は、強力な関数であり、クロージャとして使用できる標準化されたイテレーターを導入しました。しかし、公式ドキュメントにおけるイテレーターの分類は曖昧です。著者は、「純粋」イテレーターと「不純」イテレーターのより明確な区別を提案しています。「純粋」イテレーターは毎回呼び出されるたびに最初から開始する一方、「不純」イテレーターは状態を保持する場合があります。この記事では、さまざまなイテレーターの種類と、パフォーマンスと一貫性の間のトレードオフについて検討し、Goのイテレーターの状況はまだ進化しており、慣習と用語のさらなる洗練が必要であると結論付けています。

続きを読む
開発

Goのpanic/recoverの乱用によるパフォーマンスコスト

2025-03-04

この記事では、Goの`panic`と`recover`を使った配列の反復処理と従来のループによる反復処理のパフォーマンスの違いをベンチマークしています。その結果、小さいデータセットにおいて、制御フローに`panic`/`recover`を乱用すると、パフォーマンスに大きなペナルティが生じることを示しています。これは、インライン化や境界チェックの削除などのコンパイラの最適化が阻害されることによるものです。`panic`/`recover`は内部エラー処理において効率の向上をもたらす可能性がありますが、著者は乱用を戒め、そのようなメカニズムをパッケージ内部に限定し、公開APIからは遠ざけることの重要性を強調しています。

続きを読む
開発