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

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

このコミットは、Go言語の公式ドキュメントにおける複数のタイポ(誤字)を修正し、序数(例: "n'th")からアポストロフィを削除することで、ドキュメントの正確性と可読性を向上させることを目的としています。具体的には、doc/code.htmldoc/debugging_with_gdb.htmldoc/gccgo_install.htmldoc/go_mem.htmldoc/go_spec.html の5つのファイルが変更されています。

コミット

commit 7e054266c94462be87277367ec59f1d27ed78ab0
Author: Jeremy Jackins <jeremyjackins@gmail.com>
Date:   Mon Mar 19 08:26:36 2012 +1100

    doc: various typos, remove apostrophes from ordinals
    
    R=golang-dev, r, r
    CC=golang-dev
    https://golang.org/cl/5845059

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

https://github.com/golang/go/commit/7e054266c94462be87277367ec59f1d27ed78ab0

元コミット内容

doc: various typos, remove apostrophes from ordinals

R=golang-dev, r, r
CC=golang-dev
https://golang.org/cl/5845059

変更の背景

このコミットの背景には、Go言語の公式ドキュメントの品質向上という明確な意図があります。ドキュメントは、プログラミング言語の学習者や開発者にとって非常に重要なリソースであり、誤字や不明瞭な表現は理解の妨げとなる可能性があります。

具体的には、以下の点が変更の動機となっています。

  1. タイポの修正: "assuimg"を"assuming"、"represntation"を"representation"、"ellipis"を"ellipsis"に修正するなど、単純なスペルミスを訂正することで、ドキュメントのプロフェッショナルな印象を高め、読者の混乱を防ぎます。
  2. 序数表記の統一と改善: "n'th"のような序数表記からアポストロフィを削除し、"call n of"のように表現を修正することで、より簡潔で一般的な英語の慣用表現に合わせ、特にGoのメモリモデルに関する記述の明確性を向上させています。これは、技術文書における正確性と一貫性を保つ上で重要です。
  3. 専門用語の正確な表記: "nul terminated string"を"NUL-terminated string"に修正することで、コンピュータサイエンスにおける標準的な用語の表記に合わせ、専門的な文脈での誤解を防ぎます。

これらの変更は、Go言語のドキュメントが常に最新かつ正確な情報を提供し、最高の学習体験を保証するための継続的な努力の一環です。

前提知識の解説

このコミットの変更内容を理解するために、いくつかの前提知識を解説します。

序数 (Ordinals) とアポストロフィ

序数とは、順序を示す数字のことで、「1番目 (1st)」「2番目 (2nd)」「3番目 (3rd)」「4番目 (4th)」のように表現されます。英語では、数字の後に "st", "nd", "rd", "th" を付けて表記するのが一般的です。

かつては「n'th」のようにアポストロフィを付けて表記する慣習もありましたが、現代の英語の文法では、序数にアポストロフィを使用することは稀であり、特に技術文書や公式文書では推奨されません。このコミットでは、この古い慣習を排除し、より現代的で一般的な表記に統一しています。

NUL終端文字列 (NUL-terminated string)

NUL終端文字列(またはヌル終端文字列)は、C言語などのプログラミング言語で広く用いられる文字列の表現形式です。文字列の終端に、値がゼロであるバイト(NUL文字、ASCIIコードで0x00)を配置することで、文字列の終わりを示します。これにより、文字列の長さを明示的に保持する必要がなく、NUL文字に到達するまで文字を読み進めることで文字列全体を処理できます。

このコミットでは、「nul terminated string」の「nul」を大文字の「NUL」に修正しています。これは、NUL文字がASCIIコードの特定の制御文字を指すため、専門用語として大文字で表記するのが一般的であるためです。

Go言語のメモリモデル (Go Memory Model)

Go言語のメモリモデルは、複数のゴルーチン(Goの軽量スレッド)が共有データにアクセスする際の振る舞いを定義する一連のルールです。これは、並行処理におけるデータ競合(data race)を防ぎ、プログラムの予測可能な動作を保証するために非常に重要です。

Goのメモリモデルは、"happens before" という概念に基づいています。これは、あるイベントが別のイベントの前に発生することが保証される関係を指します。この関係が確立されている場合、コンパイラやプロセッサは命令の順序を入れ替えることができず、並行処理における予期せぬ結果を防ぎます。

このコミットで修正されている sync.Mutexsync.RWMutex は、Go言語の sync パッケージで提供される同期プリミティブです。

  • sync.Mutex: 排他ロック(mutual exclusion lock)を提供します。一度に一つのゴルーチンだけがロックを取得でき、共有リソースへのアクセスを保護します。Lock() メソッドでロックを取得し、Unlock() メソッドでロックを解放します。
  • sync.RWMutex: 読み書きロック(reader-writer mutex)を提供します。複数のゴルーチンが同時に読み取りロックを取得できますが、書き込みロックは一度に一つのゴルーチンしか取得できません。読み取りロックがアクティブな間は書き込みロックは取得できず、書き込みロックがアクティブな間は読み取りロックも書き込みロックも取得できません。RLock() / RUnlock() で読み取りロック、Lock() / Unlock() で書き込みロックを操作します。

このコミットでは、これらのロックに関するメモリモデルのルール記述が、より明確で一般的な表現に修正されています。

技術的詳細

このコミットは、Go言語の公式ドキュメントにおける複数の種類の修正を含んでいます。

  1. スペルミスの修正:

    • doc/code.html で "assuimg" を "assuming" に修正。
    • doc/debugging_with_gdb.html で "represntation" を "representation" に修正。
    • doc/go_spec.html で "ellipis" を "ellipsis" に修正。 これらの修正は、単純なタイポであり、ドキュメントの読みやすさと正確性を向上させます。
  2. 専門用語の表記統一:

    • doc/gccgo_install.html で "nul terminated string" を "NUL-terminated string" に修正。 これは、コンピュータサイエンスの文脈で「NUL終端文字列」を指す場合、NUL文字が特定の制御文字であるため、大文字で表記するのが慣例であることに合わせたものです。
  3. 序数表記の改善と文の明確化:

    • doc/go_mem.html において、sync.Mutex および sync.RWMutex に関するメモリモデルのルール記述が変更されています。
      • "the n'th call to l.Unlock()""call n of l.Unlock()" に変更。
      • "the n'th call to""call n to" に変更。
      • "the n+1'th call to""call n+1 to" に変更。 これらの変更は、序数表記からアポストロフィを削除し、より自然で簡潔な英語表現にすることで、Goメモリモデルの複雑なルールをより明確に伝えることを目的としています。特に、"happens before" 関係を説明する際に、文の構造を改善し、読者が概念をより正確に把握できるようにしています。

これらの修正は、コードの機能には影響を与えませんが、Go言語のドキュメントの品質と信頼性を高める上で重要な役割を果たします。

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

このコミットでは、以下のファイルの特定の行が変更されています。

  • doc/code.html:

    --- a/doc/code.html
    +++ b/doc/code.html
    @@ -245,7 +245,7 @@ $ go install
     </pre>
     
     <p>
    -The resulting workspace directory tree (assuimg we\'re running Linux on a 64-bit
    +The resulting workspace directory tree (assuming we\'re running Linux on a 64-bit
     system) looks like this:
     </p>
    
  • doc/debugging_with_gdb.html:

    --- a/doc/debugging_with_gdb.html
    +++ b/doc/debugging_with_gdb.html
    @@ -351,7 +351,7 @@ $3 = struct hchan<*testing.T>
     </pre>
     
     <p>
    -That <code>struct hchan<*testing.T></code> is the runtime-internal represntation of a channel.  It is currently empty, or gdb would have pretty-printed it\'s contents.
    +That <code>struct hchan<*testing.T></code> is the runtime-internal representation of a channel.  It is currently empty, or gdb would have pretty-printed it\'s contents.
     </p>
    
  • doc/gccgo_install.html:

    --- a/doc/gccgo_install.html
    +++ b/doc/gccgo_install.html
    @@ -342,7 +342,7 @@ func c_open(name *byte, mode int, perm int) int __asm__ ("open");
     </pre>
     
     <p>
    -The C function naturally expects a nul terminated string, which in
    +The C function naturally expects a NUL-terminated string, which in
     Go is equivalent to a pointer to an array (not a slice!) of
     <code>byte</code> with a terminating zero byte. So a sample call
     from Go would look like (after importing the <code>os</code> package):
    
  • doc/go_mem.html:

    --- a/doc/go_mem.html
    +++ b/doc/go_mem.html
    @@ -283,7 +283,7 @@ The <code>sync</code> package implements two lock data types,
     
     <p class="rule">
     For any <code>sync.Mutex</code> or <code>sync.RWMutex</code> variable <code>l</code> and <i>n</i> &lt; <i>m</i>,
    -the <i>n</i>\'th call to <code>l.Unlock()</code> happens before the <i>m</i>\'th call to <code>l.Lock()</code> returns.
    +call <i>n</i> of <code>l.Unlock()</code> happens before call <i>m</i> of <code>l.Lock()</code> returns.
     </p>
     
     <p>
    @@ -316,9 +316,9 @@ which happens before the <code>print</code>.
     
     <p class="rule">
     For any call to <code>l.RLock</code> on a <code>sync.RWMutex</code> variable <code>l</code>,
    -there is an <i>n</i> such that the <code>l.RLock</code> happens (returns) after the <i>n</i>\'th call to
    +there is an <i>n</i> such that the <code>l.RLock</code> happens (returns) after call <i>n</i> to
     <code>l.Unlock</code> and the matching <code>l.RUnlock</code> happens
    -before the <i>n</i>+1\'th call to <code>l.Lock</code>.
    +before call <i>n</i>+1 to <code>l.Lock</code>.
     </p>
    
  • doc/go_spec.html:

    --- a/doc/go_spec.html
    +++ b/doc/go_spec.html
    @@ -75,7 +75,7 @@ double quotes <code>\"\"</code> or back quotes <code>``</code>.
     <p>
     The form <code>a … b</code> represents the set of characters from
     <code>a</code> through <code>b</code> as alternatives. The horizontal
    -ellipis <code>…</code> is also used elsewhere in the spec to informally denote various
    +ellipsis <code>…</code> is also used elsewhere in the spec to informally denote various
     enumerations or code snippets that are not further specified. The character <code>…</code>
     (as opposed to the three characters <code>...</code>) is not a token of the Go
     language.
    

コアとなるコードの解説

このコミットにおける「コアとなるコード」は、Go言語のドキュメントを構成するHTMLファイル群です。これらのファイルは、Go言語の仕様、ツールの使い方、メモリモデルなど、多岐にわたる情報を提供しています。

変更された各ファイルにおける具体的な修正内容とその意図は以下の通りです。

  • doc/code.html:

    • assuimgassuming
    • 解説: これは単純なスペルミス修正です。「assuimg」(誤字)を「assuming」(仮定する、〜とすれば)に訂正することで、文の意味が明確になり、読者の誤解を防ぎます。
  • doc/debugging_with_gdb.html:

    • represntationrepresentation
    • 解説: これもスペルミス修正です。「represntation」(誤字)を「representation」(表現、表示)に訂正することで、GDBがチャネルをどのように内部的に表現するかについての記述が正確になります。
  • doc/gccgo_install.html:

    • nul terminated stringNUL-terminated string
    • 解説: 「nul」を大文字の「NUL」に修正しています。これは、コンピュータサイエンスの文脈において、文字列の終端を示す特定のバイト(値がゼロのバイト)を指す場合、慣例として「NUL」と大文字で表記するためです。これにより、専門用語の正確性が向上します。
  • doc/go_mem.html:

    • the n'th call to l.Unlock()call n of l.Unlock()
    • the n'th call tocall n to
    • the n+1'th call tocall n+1 to
    • 解説: このファイルでは、Go言語のメモリモデル、特にsync.Mutexsync.RWMutexに関するルール記述が修正されています。変更の主な目的は、序数表記(例: "n'th")からアポストロフィを削除し、より自然で簡潔な英語表現にすることです。
      • 例えば、「n番目のl.Unlock()呼び出し」という表現を「l.Unlock()のn番目の呼び出し」のように変更することで、文の構造が改善され、"happens before"関係のような抽象的な概念がより理解しやすくなります。これは、技術文書における明確性と一貫性を高めるための重要な改善です。
  • doc/go_spec.html:

    • ellipisellipsis
    • 解説: 「ellipis」(誤字)を「ellipsis」(省略記号、三点リーダー)に訂正しています。Go言語の仕様書において、(三点リーダー)が非公式な列挙やコードスニペットを示すために使用されることについての記述が正確になります。

これらの変更は、Go言語のドキュメント全体の品質を向上させ、読者がより正確で理解しやすい情報を得られるようにするための細かな、しかし重要な改善です。

関連リンク

参考にした情報源リンク