The Go Blog
Go 2 に向けた次のステップ
現状
Go 1.13 のリリースに向けて順調に進んでおり、今年の8月上旬にはリリースされる予定です。これは、これまで長期間にわたって言語への変更が凍結されていた後、言語に具体的な変更(仕様の微調整だけでなく)が含まれる最初のリリースとなります。
これらの言語変更に至るために、「Go 2, here we come!」というブログ記事で概説された新しい提案評価プロセスに従い、より大きなGo 2 の提案のリストの中から、実現可能な提案を少数選びました。最初の提案の選択は、比較的マイナーでほとんど論争の余地がないものとし、プロセスを通過する可能性がかなり高いものにしたいと考えました。モジュール(最終的にはモジュール固有の言語バージョン選択を可能にする)がまだデフォルトのビルドモードではないため、提案された変更は最小限の混乱で済むよう、後方互換性がある必要がありました。要するに、この最初の変更のラウンドは、大きな問題に取り組むというよりも、再び動き出し、新しいプロセスで経験を積むことに重点を置きました。
私たちの当初の提案リスト — 一般的なUnicode識別子、バイナリ整数リテラル、数値リテラルのセパレーター、符号付き整数シフトカウント — は、一部が削除され、一部が拡張されました。一般的なUnicode識別子は、時間内に具体的な設計ドキュメントが用意できなかったため、採用されませんでした。バイナリ整数リテラルの提案は大幅に拡張され、Go の数値リテラル構文の包括的な見直しと近代化につながりました。そして、エラー検査に関するGo 2 のドラフト設計提案を追加しました。これは部分的に受け入れられています。
Go 1.13 にこれらの初期変更が適用されたので、次は Go 1.14 に目を向け、次に何に取り組むべきかを決定する時が来ました。
Go 1.14 への提案
Go に向けた今日の目標は、2007年と同じく、ソフトウェア開発をスケール可能にすることです。Go のスケーラビリティ向上への道のりで最大の3つの障害は、パッケージとバージョン管理、より良いエラーハンドリングサポート、そしてジェネリクスです。
Go モジュールのサポートがますます強化されているため、パッケージとバージョン管理のサポートは対処されています。これにより、より良いエラーハンドリングサポートとジェネリクスが残ります。私たちはこれら両方に取り組んでおり、昨年のデンバーで開催された GopherCon でドラフトデザインを発表しました。それ以来、これらのデザインを繰り返し検討してきました。エラーハンドリングについては、具体的な、大幅に改訂・簡素化された提案を公開しました(下記参照)。ジェネリクスについては、今年のサンディエゴで開催される GopherCon で Ian Lance Taylor による講演(「Generics in Go」)が予定されていますが、まだ具体的な提案段階には達していません。
また、言語への小規模な改善も継続したいと考えています。Go 1.14 では、以下の提案を選択しました。
#32437. Go の組み込みエラーチェック関数「try」(設計ドキュメント)。
これは、エラー処理を改善するための具体的な提案です。提案された完全に後方互換性のある言語拡張は最小限ですが、エラー処理コードに多大な影響を与えると予想しています。この提案はすでに膨大な量のコメントを集めており、フォローアップが容易ではありません。簡単な概要については最初のコメントから読み始め、その後詳細な設計ドキュメントを読むことをお勧めします。最初のコメントには、これまでのフィードバックの概要へのリンクがいくつか含まれています。投稿する前に、フィードバックの推奨事項(以下の「次のステップ」セクションを参照)に従ってください。
#6977. 重複するインターフェースの埋め込みを許可する(設計ドキュメント)。
これは、インターフェースの埋め込みをより寛容にするための、古い後方互換性のある提案です。
#32479 go vet で string(int) 変換を診断する。
string(int) 変換は、Go の初期に利便性のために導入されましたが、初心者には混乱を招き(string(10) は "10" ではなく "\n")、unicode/utf8 パッケージで変換が利用可能になった現在では正当化されません。この変換を削除することは後方互換性のない変更であるため、代わりに vet エラーから開始することを提案します。
これは、私たちが採用したいと考えている暗号ライブラリの設計原則に関するフィードバックの要請です。関連するcrypto/tls からの SSLv3 サポートの削除提案も参照してください。
次のステップ
これらの提案すべてについて、積極的にフィードバックを募っています。特に、提案が実際にうまく機能しない可能性を示す事実に基づいた証拠や、設計で見落としていた問題点に関心があります。提案を支持する説得力のある例も非常に役立ちます。一方、個人的な意見のみを含むコメントは、対応が困難です。私たちはそれを認識できますが、建設的な方法で対処することはできません。投稿する前に、詳細な設計ドキュメント、以前のフィードバック、またはフィードバックの要約を時間をかけてお読みください。特に長い議論では、あなたの懸念はすでに以前のコメントで提起され、議論されている可能性があります。
特定の提案を実験段階に進めないという強い理由がない限り、これらのすべてをGo 1.14 サイクルの開始時(2019年8月上旬)に実装し、実際に評価できるようにする予定です。提案評価プロセスに従って、最終決定は開発サイクルの終了時(2019年11月上旬)に行われます。
Go をより良い言語にするためにご協力いただきありがとうございます!
次の記事:新しい Go Store の発表
前の記事:Go 2018 サーベイ結果
ブログインデックス