[インデックス 16272] ファイルの概要
このコミットは、Go言語の公式FAQドキュメント doc/go_faq.html
に、言語変更に関する新しいエントリを追加するものです。Go言語に対する改善提案が頻繁に寄せられる中で、なぜそれらの提案の多くが受け入れられないのか、その理由と背景を明確に説明することを目的としています。特に、Go 1の互換性保証と、Go言語の設計思想が変更の受け入れにどのように影響するかについて言及しています。
コミット
commit 61dbc3401a1af9feb0bbcf782adddd867bc3110f
Author: Andrew Gerrand <adg@golang.org>
Date: Mon May 6 15:02:56 2013 -0700
doc: add FAQ entry about language changes
R=golang-dev, dsymonds, r
CC=golang-dev
https://golang.org/cl/9244043
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/61dbc3401a1af9feb0bbcf782adddd867bc3110f
元コミット内容
doc: add FAQ entry about language changes
R=golang-dev, dsymonds, r
CC=golang-dev
https://golang.org/cl/9244043
変更の背景
Go言語はオープンソースプロジェクトであり、その設計思想や機能について多くのユーザーや開発者から様々な提案が寄せられます。しかし、Go言語の開発チームは、言語の安定性と後方互換性を非常に重視しています。特にGo 1のリリース以降、その互換性保証はGoエコシステム全体の健全性を保つ上で極めて重要な要素となっています。
このコミットが追加された2013年5月という時期は、Go 1がリリースされてから約1年が経過し、Go言語が広く採用され始めた時期と重なります。この段階で、言語仕様に対する変更提案が活発に行われるようになったと考えられます。このような状況において、開発チームは、なぜ多くの言語変更提案が受け入れられないのか、その理由を公式ドキュメントで明確に説明する必要性を感じたのでしょう。これにより、ユーザーの期待値を適切に管理し、不必要な議論を減らし、Go言語の安定した進化を促進する狙いがあったと推測されます。
前提知識の解説
- Go 1 互換性保証 (Go 1 Compatibility Promise): Go 1は、Go言語の最初の安定版リリースであり、そのリリース時に「Go 1互換性保証」が発表されました。これは、Go 1で書かれたプログラムは、将来のGoのバージョンでもコンパイルされ、動作し続けることを保証するものです。この保証は、Go言語が企業や大規模プロジェクトで安心して採用されるための重要な基盤となっています。この保証があるため、既存のプログラムを破壊するような言語仕様の変更は、原則として受け入れられません。
- Go言語の設計目標: Go言語は、Google社内で「大規模なソフトウェアエンジニアリング」の課題を解決するために設計されました。その設計目標には、シンプルさ、効率性、並行処理の容易さ、高速なコンパイル、そして保守性の高さなどが含まれます。これらの目標は、言語の機能追加や変更の判断基準となります。提案された変更がこれらの設計目標に合致しない場合、たとえ技術的に優れていても採用されないことがあります。
- メーリングリスト (golang-nuts):
golang-nuts
は、Go言語に関する一般的な議論が行われる公式メーリングリストです。言語の機能提案や設計に関する議論もここで行われることが多く、本コミットのメッセージにも言及されています。 - Go at Google: Language Design in the Service of Software Engineering: これは、Go言語の設計思想と、それがGoogleでのソフトウェアエンジニアリングの課題にどのように貢献しているかを説明する記事(またはトーク)です。Go言語の「なぜ」を理解するための重要なリソースであり、言語変更の提案を評価する際の背景知識として参照されます。
技術的詳細
このコミットは、HTMLドキュメント doc/go_faq.html
に新しい <h3>
セクションと複数の <p>
タグを追加することで、FAQエントリを挿入しています。
追加されたセクションのIDは language_changes
であり、これによりFAQ内の特定のアンカーリンクとして機能します。内容は以下の主要なポイントに焦点を当てています。
- 言語変更提案の多さ: Goコミュニティから多くの改善提案があることを認識しています。
- 受け入れの少なさ: しかし、実際に受け入れられる変更はごくわずかであることを明言しています。
- Go 1 互換性保証の重要性: 最も重要な理由として、Go 1互換性保証を挙げています。既存のプログラムを破壊するような変更は、そのメリットに関わらず検討すらされないと強調しています。
- 将来のメジャーリリース: 将来的にGo 1と互換性のないメジャーリリースがある可能性を示唆していますが、その議論は時期尚早であるとしています。
- 設計目標との整合性: 互換性保証に違反しない提案であっても、Goの設計目標に合致しない場合は受け入れられない可能性があることを説明しています。
- 参照資料: Goの設計思想を理解するための参考資料として、
Go at Google: Language Design in the Service of Software Engineering
を挙げています。
このFAQエントリは、Go言語の進化に対する開発チームの厳格なアプローチと、安定性および設計原則へのコミットメントを明確に示しています。
コアとなるコードの変更箇所
--- a/doc/go_faq.html
+++ b/doc/go_faq.html
@@ -454,6 +454,34 @@ as when hosting an untrusted program, the implementation could interlock
map access.
</p>
+<h3 id="language_changes">
+Will you accept my language change?</h3>
+
+<p>
+People often suggest improvements to the language—the
+<a href="http://groups.google.com/group/golang-nuts">mailing list</a>
+contains a rich history of such discussions—but very few of these changes have
+been accepted.
+</p>
+
+<p>
+Although Go is an open source project, the language and libraries are protected
+by a <a href="/doc/go1compat.html">compatibility promise</a> that prevents
+changes that break existing programs.
+If your proposal violates the Go 1 specification we cannot even entertain the
+idea, regardless of its merit.
+A future major release of Go may be incompatible with Go 1, but we're not ready
+to start talking about what that might be.
+</p>
+
+<p>
+Even if your proposal is compatible with the Go 1 spec, it may be
+not be in the spirit of Go's design goals.
+The article <i><a href="http://talks.golang.org/2012/splash.article">Go
+at Google: Language Design in the Service of Software Engineering</a></i>
+explains Go's origins and the motivation behind its design.
+</p>
+
<h2 id="types">Types</h2>
<h3 id="Is_Go_an_object-oriented_language">
コアとなるコードの解説
変更は doc/go_faq.html
ファイルに対して行われています。具体的には、既存の <p>
タグの後に、新しい <h3>
ヘッダーと3つの <p>
段落が追加されています。
<h3 id="language_changes">Will you accept my language change?</h3>
:- これは新しいFAQエントリのタイトルであり、HTMLのアンカーとして機能する
id="language_changes"
が設定されています。これにより、他のドキュメントやページから直接このセクションにリンクできるようになります。
- これは新しいFAQエントリのタイトルであり、HTMLのアンカーとして機能する
- 最初の
<p>
タグ:- Go言語への改善提案が頻繁にあること、そして
golang-nuts
メーリングリストがその議論の歴史を含んでいることに触れています。しかし、これらの変更のほとんどが受け入れられていないことを明確に述べています。 <a href="http://groups.google.com/group/golang-nuts">mailing list</a>
の部分で、golang-nuts
メーリングリストへのリンクが提供されています。
- Go言語への改善提案が頻繁にあること、そして
- 2番目の
<p>
タグ:- Goがオープンソースプロジェクトであるにもかかわらず、言語とライブラリがGo 1互換性保証によって保護されていることを説明しています。
- この保証が、既存のプログラムを破壊する変更を防ぐ役割を果たすことを強調しています。
- 提案がGo 1仕様に違反する場合、そのメリットに関わらず検討すらされないという厳格な姿勢を示しています。
- 将来のメジャーリリースでGo 1との非互換性が発生する可能性に言及していますが、その議論はまだ早いとしています。
<a href="/doc/go1compat.html">compatibility promise</a>
の部分で、Go 1互換性保証に関する詳細なドキュメントへの内部リンクが提供されています。
- 3番目の
<p>
タグ:- 提案がGo 1仕様と互換性がある場合でも、Goの設計目標に合致しない場合は受け入れられない可能性があることを説明しています。
- Goの起源と設計の動機を説明する記事
Go at Google: Language Design in the Service of Software Engineering
へのリンクを提供し、読者がGoの設計思想を深く理解するためのリソースを示しています。 <a href="http://talks.golang.org/2012/splash.article">Go at Google: Language Design in the Service of Software Engineering</a>
の部分で、関連する記事への外部リンクが提供されています。
これらの変更は、Go言語の安定性と設計原則に対する開発チームの強いコミットメントを、公式ドキュメントを通じてユーザーに伝えるためのものです。
関連リンク
- Go 1 Compatibility Promise: https://go.dev/doc/go1compat
- golang-nuts メーリングリスト: https://groups.google.com/g/golang-nuts
- Go at Google: Language Design in the Service of Software Engineering: https://go.dev/talks/2012/splash.article
参考にした情報源リンク
- Go言語の公式ドキュメント (特にFAQとGo 1互換性保証に関するセクション)
- Go言語のメーリングリストアーカイブ (golang-nuts)
- Go言語の設計思想に関する公式ブログ記事やトーク
- GitHubのコミット履歴と関連するIssue/Pull Request (もしあれば)
- Go言語の歴史に関する一般的な情報源