Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 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コードの例がありました。しかし、このリストには以下の誤りが含まれていました。

  1. 9の誤り: 9は素数ではありません(3 × 3 = 9)。
  2. 巨大な素数の誤り: リストの最後に含まれる非常に大きな数値の最後の桁が誤っていました。これはおそらくタイプミスによるものです。

これらの誤りは、Go言語の仕様書という公式ドキュメントの正確性を損なうものであり、読者に対して誤った情報を提供する可能性がありました。そのため、これらの誤りを修正し、ドキュメントの品質と正確性を向上させる目的でこのコミットが作成されました。

前提知識の解説

Go言語の仕様書 (go_spec.html)

Go言語の仕様書は、Go言語の構文、セマンティクス、標準ライブラリの動作などを厳密に定義した公式ドキュメントです。開発者はこの仕様書を参照することで、Goプログラムがどのように動作すべきかを正確に理解できます。doc/go_spec.html は、この仕様書のHTML形式のバージョンであり、Goのソースコードリポジトリ内に含まれています。

素数

素数とは、1とその数自身以外に正の約数を持たない自然数で、1より大きい数のことです。例えば、2, 3, 5, 7, 11, 13, 17, 19などが素数です。93で割り切れるため素数ではありません。

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点です。

  1. 9の削除: 素数ではない9がリストから削除されました。これにより、リストは正しい素数のシーケンスになりました。
  2. 巨大な数値の修正: 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言語の公式ドキュメント
  • 素数に関する一般的な数学的知識
  • Gitの差分表示の解釈方法