ニュース

ジェネリクスを導入した「Go 1.18」が公開 ~「Go」言語の仕様変更としては過去最大級

ファジングの標準対応やApple M1/ARM64でのパフォーマンスアップにも注目

「Go 1.18」がリリース

 プログラミング言語「Go」の最新版「Go 1.18」が、3月15日にリリースされた。本バージョンでは、「ジェネリクス」がサポートされた。「Go」言語の仕様変更としては、過去最大級といえるものだ。

 静的型付け言語で関数やメソッドを定義するには、一般的に引数のデータ型を記述する必要がある。しかし、データ型が異なるだけで内容がほぼ同じの処理のために、データ型と同じ数だけ専用の関数を用意するのはあまり効率的ではない。キャストやリフレクションを用いて解決することもできるが、パフォーマンス面でペナルティがあったり、不具合混入の原因になることもある。

 ジェネリクス(Generics:総称型)は、こうした問題を解決するために編み出されたプログラミング手法。多くの静的型付け言語で採用されているが、「Go」では言語仕様が複雑になったり、基本構文で対応できるなどの理由で、長らく採用されていなかった。一方で、ジェネリックスがないことを「Go」言語の弱点とみなす意見も根強くあり、ようやく基本的な実装が行われた格好だ。「Go 1.18」のジェネリクスにはまだいくつかの制約があるが、これは今後のアップデートで改善されていくとのこと。

 「Go 1.18」ではジェネリクス以外にも、いくつかの重要な改善が盛り込まれている。

 なかでもまず挙げるべきは、ファジング(Fuzzing)のサポートだろう。ファジングとはプログラムが想定していなさそうなデータを送り、その挙動から不具合を検出するテスト手法。「Go」言語に限ったテスト手法ではないが、標準のツールチェーンに統合され、手軽に利用できるようになった点が魅力だ。

ファジングを標準でサポート

 また、ワークスペースモードにも注目したい。これは複数のモジュール(マルチモジュール)にまたがった開発を容易にする仕組みで、これまで使われていたreplaceディレクティブの不満点を解決している。

 そのほかにも、「Go 1.17」で導入されたABI呼び出し規約の改善がApple M1、ARM64、PowerPC64といったアーキテクチャーに拡大された。CPUパフォーマンスが最大で20%向上するという。

 「Go」言語のバイナリは現在、公式サイト「golang.org」から無償でダウンロード可能。Windows/Mac/Linux版などに対応しており、Windows版は64bit版のWindows 7以降で利用できる。