[インデックス 11607] ファイルの概要
このコミットは、Go言語の公式仕様書(doc/go_spec.html
)内の配列、スライス、マップのリテラルの例において、誤った素数のリストを修正するものです。具体的には、素数ではない9
が含まれている点と、非常に大きな数値の最後の桁が誤っていた点を修正しています。
コミット
commit 6513e195324f53c25cad08072f5537189a37443d
Author: Christopher Wedgwood <cw@f00f.org>
Date: Sat Feb 4 10:34:31 2012 +1100
spec: correct primes
R=r
CC=golang-dev
https://golang.org/cl/5627048
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/6513e195324f53c25cad08072f5537189a37443d
元コミット内容
spec: correct primes
このコミットメッセージは、Go言語の仕様書(specification)における素数の記述を修正したことを簡潔に示しています。
変更の背景
Go言語の公式仕様書 doc/go_spec.html
には、Go言語の様々な構文や機能の使用例が記載されています。このコミットが行われる前、doc/go_spec.html
内の配列、スライス、マップのリテラルの例を示すセクションに、素数のリストを初期化するGoコードの例がありました。しかし、このリストには以下の誤りが含まれていました。
9
の誤り:9
は素数ではありません(3 × 3 = 9
)。- 巨大な素数の誤り: リストの最後に含まれる非常に大きな数値の最後の桁が誤っていました。これはおそらくタイプミスによるものです。
これらの誤りは、Go言語の仕様書という公式ドキュメントの正確性を損なうものであり、読者に対して誤った情報を提供する可能性がありました。そのため、これらの誤りを修正し、ドキュメントの品質と正確性を向上させる目的でこのコミットが作成されました。
前提知識の解説
Go言語の仕様書 (go_spec.html
)
Go言語の仕様書は、Go言語の構文、セマンティクス、標準ライブラリの動作などを厳密に定義した公式ドキュメントです。開発者はこの仕様書を参照することで、Goプログラムがどのように動作すべきかを正確に理解できます。doc/go_spec.html
は、この仕様書のHTML形式のバージョンであり、Goのソースコードリポジトリ内に含まれています。
素数
素数とは、1とその数自身以外に正の約数を持たない自然数で、1より大きい数のことです。例えば、2, 3, 5, 7, 11, 13, 17, 19などが素数です。9
は3
で割り切れるため素数ではありません。
Go言語のスライスリテラル
Go言語では、スライス(slice)は同じ型の要素のシーケンスを表すデータ構造です。スライスリテラルは、スライスを初期化するための構文で、以下のように記述します。
[]Type{value1, value2, ..., valueN}
このコミットで修正されたコードは、[]int
型のスライスリテラルを使用して整数のリストを初期化する例でした。
巨大な素数
数学の世界では、非常に大きな素数が存在し、暗号技術など様々な分野で利用されます。このコミットで修正された数値は、そのような巨大な素数の一つを例として使用していたと考えられます。このような大きな数値の誤りは、手動での入力ミスやコピー&ペーストの際に発生しやすいものです。
技術的詳細
このコミットの技術的詳細は、doc/go_spec.html
ファイル内の特定のHTML要素(<pre>
タグ内のコード例)に対するテキストの置換に集約されます。
変更前は以下の行でした。
primes := []int{2, 3, 5, 7, 9, 11, 13, 17, 19, 991, 1174250539803415390440702411831137627109439}
変更後、この行は以下のように修正されました。
primes := []int{2, 3, 5, 7, 11, 13, 17, 19, 991, 1174250539803415390440702411831137627109479}
具体的な変更点は以下の2点です。
9
の削除: 素数ではない9
がリストから削除されました。これにより、リストは正しい素数のシーケンスになりました。- 巨大な数値の修正:
1174250539803415390440702411831137627109439
の最後の桁が39
から79
に変更されました。これにより、この巨大な数値が正しい素数になりました。
この修正は、Go言語のコンパイラやランタイムの動作に影響を与えるものではなく、あくまでドキュメントの正確性を保つためのものです。しかし、公式仕様書という性質上、このような小さな誤りでも修正されることは、ドキュメントの信頼性を高める上で重要です。
コアとなるコードの変更箇所
--- a/doc/go_spec.html
+++ b/doc/go_spec.html
@@ -2143,7 +2143,7 @@ Examples of valid array, slice, and map literals:
<pre>
// list of prime numbers
-primes := []int{2, 3, 5, 7, 9, 11, 13, 17, 19, 991, 1174250539803415390440702411831137627109439}
+primes := []int{2, 3, 5, 7, 11, 13, 17, 19, 991, 1174250539803415390440702411831137627109479}
// vowels[ch] is true if ch is a vowel
vowels := [128]bool{'a': true, 'e': true, 'i': true, 'o': true, 'u': true, 'y': true}
コアとなるコードの解説
上記の差分は、doc/go_spec.html
ファイル内のGoコードの例が変更されたことを示しています。
-
で始まる行は削除された行、+
で始まる行は追加された行です。- 変更されたのは、
primes := []int{...}
というGoのスライスリテラルの初期化部分です。 - 元の行では、素数のリストに
9
が含まれており、また最後の巨大な数値の末尾が39
でした。 - 修正後の行では、
9
が削除され、巨大な数値の末尾が79
に修正されています。
この変更は、Go言語の仕様書に記載されているコード例の正確性を保証するためのものであり、Go言語そのものの動作には影響を与えません。しかし、仕様書は言語の「真実の源」であるため、その内容が正確であることは極めて重要です。
関連リンク
- Go言語の公式ウェブサイト: https://go.dev/
- Go言語の仕様書: https://go.dev/ref/spec (このコミットで修正された
go_spec.html
の最新版) - Goのコードレビューシステム (Gerrit): https://go.googlesource.com/go/+/refs/heads/master/
- このコミットのGerrit上の変更リスト: https://golang.org/cl/5627048
参考にした情報源リンク
- Go言語の公式ドキュメント
- 素数に関する一般的な数学的知識
- Gitの差分表示の解釈方法