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

[インデックス 13905] ファイルの概要

このコミットは、Goプログラミング言語の仕様書(doc/go_spec.html)に対する軽微な修正です。具体的には、インポートセクションの記述をより明確にするための文言調整と、例で使用されているパッケージ名の表記をGoの慣習に合わせる変更が含まれています。

コミット

commit b51ad9cf457744d9e2feb6ada239a1078ba4540a
Author: Rob Pike <r@golang.org>
Date:   Sun Sep 23 05:03:43 2012 +1000

    spec: a couple of minor tweaks to the wording of the import section
    - remove ambiguous 'it'
    - use a lower-case PackageName in the example
    
    R=golang-dev, dsymonds
    CC=golang-dev
    https://golang.org/cl/6552057

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/b51ad9cf457744d9e2feb6ada239a1078ba4540a

元コミット内容

コミットメッセージは以下の通りです。

spec: a couple of minor tweaks to the wording of the import section
- remove ambiguous 'it'
- use a lower-case PackageName in the example

これは、「Go言語仕様書のインポートセクションにおける文言の軽微な調整」を意味します。具体的には、以下の2点が挙げられています。

  1. 曖昧な「it」の削除。
  2. 例におけるパッケージ名(PackageName)を小文字に変更。

変更の背景

このコミットの背景には、Go言語の仕様書という、言語の挙動を厳密に定義する公式ドキュメントの正確性と明確性を高めるという目的があります。

  1. 曖昧な「it」の削除: 技術文書、特に仕様書においては、曖昧な表現は誤解を招く可能性があります。Go言語のインポートに関する記述で「it」という代名詞が使われていた箇所があり、それが「ソースファイル」を指すのか、「インポートされたパッケージ」を指すのかが文脈上不明瞭であったため、より直接的な表現に修正することで、読者の理解を助け、誤読を防ぐことを意図しています。
  2. パッケージ名の慣習への準拠: Go言語では、パッケージ名は通常、小文字で記述するという慣習があります。これは、Goのコードベース全体で一貫性を保ち、可読性を向上させるための重要なガイドラインです。仕様書の例がこの慣習に沿っていない場合、新規のGo開発者が誤った命名規則を学習してしまう可能性があります。仕様書自体がGoのベストプラクティスを反映するように修正することで、言語の教育的な側面も強化されています。

これらの変更は、Go言語の仕様書が、開発者にとってより正確で、理解しやすく、かつGoの慣習に沿ったものとなるようにするための、継続的な改善の一環です。

前提知識の解説

このコミットを理解するためには、以下のGo言語に関する基本的な知識が必要です。

  1. Go言語仕様書 (The Go Programming Language Specification):

    • Go言語の文法、セマンティクス、標準ライブラリの挙動などを厳密に定義した公式ドキュメントです。Go言語の「憲法」とも言える存在であり、コンパイラやツールの実装者、そしてGo開発者にとっての最終的な参照元となります。このドキュメントに記述されている内容が、Go言語の「正しい」挙動を決定します。
    • このコミットで修正されているのは、この仕様書のHTML版(doc/go_spec.html)です。
  2. Goのパッケージとインポート (Packages and Imports):

    • Go言語は、コードを「パッケージ」という単位で整理します。パッケージは、関連する機能や型、関数などをまとめたものです。
    • 他のパッケージで定義された機能を利用するためには、import宣言を使用します。import宣言は、ソースファイルが特定のパッケージの機能に依存していることを示し、そのパッケージからエクスポートされた識別子(関数、変数、型など)へのアクセスを可能にします。
    • インポートパス (ImportPath): import "path/to/package" のように、パッケージの場所を示す文字列です。
    • パッケージ名 (PackageName): インポートされたパッケージの識別子にアクセスするために使用される名前です。通常、インポートパスの最後の要素がデフォルトのパッケージ名となります。例えば、"lib/math" をインポートすると、デフォルトでは math という名前でアクセスします(例: math.Sin)。
    • エイリアスインポート: import M "lib/math" のように、デフォルトのパッケージ名とは異なるエイリアス(この場合は M)を付けてインポートすることも可能です。この場合、M.Sin のようにアクセスします。
    • ドットインポート: import . "lib/math" のように、パッケージ名をドット(.)にすることで、パッケージ名を省略して直接識別子にアクセスできます(例: Sin)。これは、名前の衝突を避けるため、通常は推奨されません。
  3. Goの命名規則 (Naming Conventions):

    • Go言語には、変数、関数、型、パッケージなどの命名に関する明確な慣習があります。
    • パッケージ名: 通常、小文字で記述され、単一の単語で構成されます(例: fmt, net/http, math)。アンダースコアやハイフンは使用しません。
    • エクスポートされた識別子: パッケージ外からアクセス可能な識別子(関数、変数、型など)は、先頭が大文字で始まります(例: Println, Error, HTTPClient)。
    • エクスポートされない識別子: パッケージ内でのみ使用される識別子は、先頭が小文字で始まります(例: printLine, errorString, httpClient)。

これらの知識があることで、コミットがGo言語の仕様の正確性と、Goコミュニティで広く受け入れられているコーディング慣習の遵守にどのように貢献しているかを深く理解できます。

技術的詳細

このコミットは、Go言語仕様書のHTMLドキュメント(doc/go_spec.html)内の2つの特定の箇所を修正しています。

  1. 仕様書の日付更新:

    • 変更前: <Subtitle>: "Version of September 18, 2012"
    • 変更後: <Subtitle>: "Version of September 22, 2012"
    • これは、仕様書の内容が更新されたことを示すための、単なる日付の更新です。コミットの日付(2012年9月23日)と整合性が取れています。
  2. 曖昧な「it」の削除:

    • 変更前: and it enables access to <a href="#Exported_identifiers">exported</a> identifiers
    • 変更後: and enables access to <a href="#Exported_identifiers">exported</a> identifiers
    • この変更は、An import declaration states that the source file containing the declaration depends on functionality of the imported package ... and it enables access to exported identifiers of that package. という文脈で行われています。
    • 元の文では、「it」が「import declaration(インポート宣言)」を指すのか、「source file(ソースファイル)」を指すのか、あるいは「imported package(インポートされたパッケージ)」を指すのかが、文法的にやや不明瞭でした。
    • 「it」を削除し、「and enables access...」とすることで、文の主語が「An import declaration」であることが明確になり、インポート宣言がエクスポートされた識別子へのアクセスを可能にするという事実が直接的に表現されます。これにより、仕様書の記述がより正確かつ簡潔になります。
  3. パッケージ名の例の小文字化:

    • 変更前: import M "lib/math" M.Sin
    • 変更後: import m "lib/math" m.Sin
    • この変更は、インポート宣言の様々な形式を示す例の中で行われています。
    • Go言語の慣習では、パッケージのエイリアス名も通常は小文字で記述されます。例えば、"lib/math" パッケージを M というエイリアスでインポートする例は、Goの一般的なコーディングスタイルとは異なります。
    • これを m に変更することで、仕様書がGoの推奨される命名規則を反映し、読者(特にGoを学習中の開発者)に正しい慣習を示すことになります。これは、Goの「Goらしい」コードを書くための重要な指針となります。

これらの変更は、いずれもGo言語の仕様書の品質向上に寄与するものであり、特に技術文書における明確性と、言語の慣習への準拠という点で重要です。

コアとなるコードの変更箇所

変更は doc/go_spec.html ファイルのみです。

--- a/doc/go_spec.html
+++ b/doc/go_spec.html
@@ -1,6 +1,6 @@
 <!--{
  	"Title": "The Go Programming Language Specification",
- 	"Subtitle": "Version of September 18, 2012",
+ 	"Subtitle": "Version of September 22, 2012",
  	"Path": "/ref/spec"
  }-->
  
@@ -5177,7 +5177,7 @@ An implementation may require that all source files for a package inhabit the sa
  An import declaration states that the source file containing the declaration
  depends on functionality of the <i>imported</i> package
  (<a href="#Program_initialization_and_execution">§Program initialization and execution</a>)
-and it enables access to <a href="#Exported_identifiers">exported</a> identifiers
+and enables access to <a href="#Exported_identifiers">exported</a> identifiers
  of that package.
  The import names an identifier (PackageName) to be used for access and an ImportPath
  that specifies the package to be imported.
@@ -5231,7 +5231,7 @@ various types of import declaration.\n Import declaration          Local name of Sin
  
  import   "lib/math"         math.Sin
-import M "lib/math"         M.Sin
+import m "lib/math"         m.Sin
  import . "lib/math"         Sin
  </pre>
  

コアとなるコードの解説

上記のdiffは、doc/go_spec.html ファイルに対する3つの変更を示しています。

  1. 行 3-4 (Subtitle の変更):

    • - "Subtitle": "Version of September 18, 2012",
    • + "Subtitle": "Version of September 22, 2012",
    • これは、Go言語仕様書のバージョン日付を2012年9月18日から2012年9月22日に更新したものです。これは、ドキュメントの内容がこの日付で最新化されたことを示すメタデータ的な変更です。
  2. 行 5180-5181 (it の削除):

    • - and it enables access to <a href="#Exported_identifiers">exported</a> identifiers
    • + and enables access to <a href="#Exported_identifiers">exported</a> identifiers
    • この変更は、インポート宣言がエクスポートされた識別子へのアクセスを可能にするという文脈において、曖昧な代名詞「it」を削除しています。これにより、文の主語が「An import declaration」であることが明確になり、文の意図がより直接的かつ明確に伝わるようになります。
  3. 行 5234-5235 (パッケージ名の例の小文字化):

    • - import M "lib/math" M.Sin
    • + import m "lib/math" m.Sin
    • この変更は、インポート宣言の例において、エイリアスインポートのパッケージ名を大文字の「M」から小文字の「m」に変更しています。これは、Go言語の一般的な命名規則(パッケージ名は小文字で記述する)に仕様書の例を合わせるための修正です。これにより、仕様書がGoのベストプラクティスを反映し、読者に正しいコーディングスタイルを提示します。

これらの変更はすべて、Go言語仕様書の正確性、明確性、およびGoの慣習への準拠を向上させることを目的としています。

関連リンク

参考にした情報源リンク

  • Go言語仕様書 (上記「関連リンク」に記載)
  • Effective Go (上記「関連リンク」に記載)
  • Git diff の読み方に関する一般的な知識
  • Go言語のインポートメカニズムに関する一般的な知識
  • 技術文書における明確性の重要性に関する一般的な知識
  • GitHubのコミットページ: https://github.com/golang/go/commit/b51ad9cf457744d9e2feb6ada239a1078ba4540a
  • Go CL 6552057: https://golang.org/cl/6552057 (Goのコードレビューシステムにおけるこの変更のページ)