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

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

このコミットは、Go言語の仕様書ドキュメントである doc/go_spec.html の大幅な改訂に関するものです。主な目的は、HTMLエラーの修正、導入部分の削除、そして仕様書全体の書き直しを開始することでした。

コミット

commit 4501d348e89b7287a4a4d9b27534ff620d1bf19f
Author: Rob Pike <r@golang.org>
Date:   Thu Feb 19 17:31:36 2009 -0800

    Fix most HTML errors.
    Cut introduction.
    Start rewrite.
    
    R=gri
    DELTA=201  (20 added, 118 deleted, 63 changed)
    OCL=25226
    CL=25229

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

https://github.com/golang/go/commit/4501d348e89b7287a4a4d9b27534ff620d1bf19f

元コミット内容

Fix most HTML errors.
Cut introduction.
Start rewrite.

R=gri
DELTA=201  (20 added, 118 deleted, 63 changed)
OCL=25226
CL=25229

変更の背景

Go言語は2009年にGoogleで開発が始まり、初期段階ではその仕様を定義するドキュメントが作成されていました。このコミットが行われた2009年2月は、Go言語がまだ一般に公開される前の、活発な開発と仕様策定が行われていた時期にあたります。

doc/go_spec.html はGo言語の公式仕様書であり、言語の設計思想、構文、セマンティクスなどを詳細に記述する重要なドキュメントです。初期のドキュメントには、HTMLの記述ミスや、言語仕様の進化に伴う内容の陳腐化、あるいはより簡潔で正確な表現への改善の必要性があったと考えられます。

このコミットの背景には、以下の目的があったと推測されます。

  1. ドキュメント品質の向上: HTMLエラーを修正し、ドキュメントの可読性とアクセシビリティを向上させる。
  2. 内容の洗練: 言語仕様の初期の「導入」部分が、その後の言語設計の変更や、より詳細な記述の必要性から、適切でなくなったため削除された。これは、より技術的で厳密な仕様記述に焦点を移すためのステップであると考えられる。
  3. 継続的な改訂: 「Start rewrite」というメッセージから、このコミットが仕様書全体の包括的な見直しと書き直しプロセスの始まりであったことが示唆されます。これは、言語の成熟と安定化に向けて、ドキュメントもそれに合わせて進化させる必要があったためです。

前提知識の解説

このコミットを理解するためには、以下の前提知識が役立ちます。

  • Go言語の歴史と初期開発: Go言語は、GoogleのRob Pike、Ken Thompson、Robert Griesemerによって設計されました。初期の目標は、大規模なソフトウェア開発における生産性の向上、マルチコアプロセッサの活用、ネットワークプログラミングの容易化などでした。このコミットは、その初期の設計段階におけるドキュメント整備の一環です。
  • HTML (HyperText Markup Language): ウェブページの構造を定義するためのマークアップ言語です。このコミットでは、doc/go_spec.html 内のHTML構文エラーが修正されています。これには、タグの閉じ忘れ、不正な属性、不適切なネストなどが含まれる可能性があります。
  • EBNF (Extended Backus-Naur Form): プログラミング言語の構文を記述するためのメタ言語です。Go言語の仕様書では、言語の構文規則をEBNFで表現しています。このコミットの変更箇所にもEBNFの記述が含まれており、その表記方法が修正・改善されています。
    • Production = production_name "=" Expression "."
    • Expression = Alternative { "|" Alternative } "."
    • Alternative = Term { Term } "."
    • Term = production_name | token [ "..." token ] | Group | Option | Repetition "."
    • Group = "(" Expression ")" "."
    • Option = "[" Expression ")" "."
    • Repetition = "{" Expression "}" "." これらの定義は、Go言語の構文規則を形式的に記述するために使用されます。
  • Go言語の基本的な特徴(初期の設計思想):
    • システムプログラミング言語: C++の代替として設計され、サーバーや分散システムなどの開発に適しています。
    • 高速なコンパイル: 開発サイクルを短縮するために、コンパイル速度が重視されました。
    • 静的型付け: 型安全性を確保します。
    • ガベージコレクション: メモリ管理の負担を軽減します。
    • 並行処理のサポート: ゴルーチンとチャネルによる組み込みの並行処理モデルが特徴です。
    • パッケージシステム: コードのモジュール化と依存関係管理を効率的に行います。
    • シンプルな構文: 繰り返しを避け、直交性の高い概念で構成されています。 このコミットで削除された「Introduction」セクションには、これらの初期の設計原則が記述されていました。

技術的詳細

このコミットは、doc/go_spec.html ファイルに対して以下の具体的な変更を加えています。

  1. HTMLエラーの修正:

    • 差分を見ると、<p> タグの追加や削除、<tt> タグの使用など、HTMLの構造とセマンティクスを改善するための変更が見られます。例えば、EBNFの記述部分で、以前は単にテキストとして記述されていた部分に <p> タグが追加され、より適切な段落構造が与えられています。
    • また、Production = production_name "="" Expression . のようなEBNFの定義において、以前は Production = production_name "="" Expression . となっていた部分が Production = production_name "=" Expression . のように、引用符の表現が修正されています。これは、HTMLエンティティの誤用や、より正確な表現への変更を示唆しています。
  2. 導入部分の削除:

    • <h2>Introduction</h2> の下に存在していた、Go言語の「Guiding principles(設計原則)」、「Program structure(プログラム構造)」、「Modularity, identifiers and scopes(モジュール性、識別子、スコープ)」、「Typing, polymorphism, and object-orientation(型付け、多態性、オブジェクト指向)」、「Pointers and garbage collection(ポインタとガベージコレクション)」、「Values and references(値と参照)」、「Multithreading and channels(マルチスレッドとチャネル)」といった詳細なサブセクションが丸ごと削除されています。
    • これらのセクションは、Go言語の初期の設計思想や特徴を説明していましたが、コミットメッセージにある「Cut introduction. Start rewrite.」の通り、より簡潔な導入文に置き換えられ、詳細な説明は仕様書の他の適切なセクションに移動されたか、あるいは後の改訂で再構成される予定であったと考えられます。削除された導入文は、Go言語の初期の設計思想を垣間見ることができる貴重な情報源でもあります。
  3. EBNF表記の改善:

    • <h2>Notation</h2> セクションにおいて、EBNFの演算子に関する説明がより明確に、かつHTMLの <pre> タグ内で整形されて記述されています。
    • 特に、|, (), [], {} といった演算子の説明が、以前は箇条書きで簡潔に書かれていたものが、より詳細な説明文(例: | alternation)に修正されています。
    • また、Lower-case production names are used to identify productions that cannot be broken by white space or comments; they are tokens. Other production names are in CamelCase. のような説明が削除され、より簡潔な Lower-case production names are used to identify lexical tokens. Non-terminals are in CamelCase. Lexical symbols are enclosed in double quotes <tt>""</tt> (the double quote symbol is written as <tt>'\"'</tt>). に変更されています。これは、EBNFの表記規則に関する説明をより正確かつ簡潔にするための変更です。
  4. 全体的なリライトの開始:

    • このコミットは、単なる修正に留まらず、仕様書全体の「リライト」の始まりと位置づけられています。これは、言語の進化に合わせてドキュメントも継続的に更新していくというGo開発チームの姿勢を示しています。

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

doc/go_spec.html ファイルの変更は多岐にわたりますが、特に以下の部分がコアとなる変更箇所です。

  1. 導入セクションの削除と簡略化:

    --- a/doc/go_spec.html
    +++ b/doc/go_spec.html
    @@ -288,171 +282,68 @@ Timeline (9/5/08):
     
     <h2>Introduction</h2>
     
    -Go is a new systems programming language intended as an alternative to C++ at
    -Google. Its main purpose is to provide a productive and efficient programming
    -environment for compiled programs such as servers and distributed systems.
    -... (中略:Guiding principles, Program structure, Modularity, Typing, Pointers, Values, Multithreading の各セクションが削除) ...
    -
    +<p>
    +This is a reference manual for the Go programming language. For
    +more information and other documents, see <a
    +href="/">the Go home page</a>.
    +</p>
    ...
    

    この変更により、Go言語の初期の設計思想や特徴を詳細に説明していた導入部分が大幅に削除され、より簡潔な「Go言語のリファレンスマニュアルである」という記述に置き換えられています。

  2. EBNF表記の説明の修正:

    --- a/doc/go_spec.html
    +++ b/doc/go_spec.html
    @@ -3538,7 +3439,6 @@ base type and may be forward-declared.
     
     
     <h3>Predeclared functions</h3>
    -<p>
      <ul>
      	<li>cap
      	<li>convert
    

    この差分は、Predeclared functions のセクションで、不要な <p> タグが削除されていることを示しています。これはHTMLエラー修正の一例です。

    --- a/doc/go_spec.html
    +++ b/doc/go_spec.html
    @@ -288,171 +282,68 @@ Timeline (9/5/08):
     
     <h2>Introduction</h2>
     
    -...
    -
    -<h3>Guiding principles</h3>
    -...
    -
    -<h3>Program structure</h3>
    -...
    -
    -<h3>Modularity, identifiers and scopes</h3>
    -...
    -
    -<h3>Typing, polymorphism, and object-orientation</h3>
    -...
    -
    -<h3>Pointers and garbage collection</h3>
    -...
    -
    -<h3>Values and references</h3>
    -...
    -
    -<h3>Multithreading and channels</h3>
    -...
    -<hr>
    +<p>
    +This is a reference manual for the Go programming language. For
    +more information and other documents, see <a
    +href="/">the Go home page</a>.
    +</p>
    ...
    

    この部分では、Introduction セクション全体が削除され、新しい簡潔な導入文に置き換えられています。

    --- a/doc/go_spec.html
    +++ b/doc/go_spec.html
    @@ -300,17 +282,11 @@ Timeline (9/5/08):
      
      
      <h2>Contents</h2>
    +<p>
    +TODO: This should be autogenerated but that will take work to make h3s appear in this list
    +</p>
      <ul>
      <li>Introduction
    -	<ul>
    -	<li>Guiding principles
    -	<li>Program structure
    -	<li>Modularity, identifiers and scopes
    -	<li>Typing, polymorphism, and object-orientation
    -	<li>Pointers and garbage collection
    -	<li>Values and references
    -	<li>Multithreading and channels
    -	</ul>
      	
      <li>Notation
      
    

    Contents セクションの Introduction のサブ項目が削除され、TODO コメントが追加されています。これは、導入部分の削除と、目次生成の自動化への意図を示しています。

コアとなるコードの解説

このコミットの主要な変更は、Go言語の仕様書 doc/go_spec.html の内容と構造の整理にあります。

  1. 導入部分の削除: 最も大きな変更は、Go言語の設計原則、プログラム構造、型システム、並行処理モデルなどについて詳細に説明していた「Introduction」セクションが丸ごと削除されたことです。これは、初期のドキュメントが持つ「説明書」としての側面を減らし、より厳密な「仕様書」としての役割に特化させる意図があったと考えられます。削除された内容は、Go言語の初期の思想を理解する上で非常に興味深いものでしたが、仕様書としては冗長であったり、言語の進化に伴い古くなったりした可能性があります。

  2. EBNF表記の改善: 言語の構文を定義するEBNFのセクションでは、その表記規則に関する説明がより正確かつ簡潔に修正されています。特に、演算子(|, (), [], {})の意味が明確化され、HTMLの整形も改善されています。これは、仕様書の正確性と可読性を高めるための重要な変更です。

  3. HTMLエラーの修正: ドキュメント全体にわたって、HTMLの構文エラーや不適切なマークアップが修正されています。これには、<p> タグの適切な使用、<tt> タグ(テレタイプテキスト、通常は等幅フォントで表示される)の導入によるコードや記号の強調、引用符の正しいエスケープなどが含まれます。これにより、ブラウザでの表示品質が向上し、ドキュメントのアクセシビリティと保守性が高まります。

これらの変更は、Go言語の仕様書が、単なる説明書から、より厳密で形式的なリファレンスマニュアルへと進化していく過程を示しています。初期の段階では、言語の概念を広く伝えるための導入が必要でしたが、言語が成熟するにつれて、その厳密な定義に焦点を当てる必要が出てきたため、このような改訂が行われたと考えられます。

関連リンク

参考にした情報源リンク

  • Go言語の公式ドキュメント
  • GitHubのコミット履歴
  • HTMLおよびEBNFに関する一般的な知識
  • Go言語の初期開発に関する公開情報(Rob Pikeの講演など)