[インデックス 16261] ファイルの概要
このコミットは、Go言語の公式ドキュメント doc/go1.1.html
におけるUnicodeバイトオーダーマーク (BOM) に関する記述を修正するものです。具体的には、Goのソースファイルの先頭で許可されるBOMが U+FEFF
のみであり、U+FFFE
はBOMではないという点を明確にするための変更です。これにより、ドキュメントがUnicode標準に準拠し、より正確な情報を提供するようになります。
コミット
commit a941491b4eb3e877f64ba5dba24c1c3550e9d872
Author: Russ Cox <rsc@golang.org>
Date: Thu May 2 15:01:31 2013 -0400
doc: only U+FEFF is a byte-order mark; U+FFFE is not
R=golang-dev, r
CC=golang-dev
https://golang.org/cl/9103046
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/a941491b4eb3e877f64ba5dba24c1c3550e9d872
元コミット内容
doc: only U+FEFF is a byte-order mark; U+FFFE is not
このコミットは、Go 1.1のドキュメントにおいて、Unicodeのバイトオーダーマーク(BOM)に関する記述を修正し、U+FEFF
のみがBOMであり、U+FFFE
はBOMではないことを明確にしています。
変更の背景
Go言語のソースファイルはUTF-8エンコーディングで記述されることが推奨されており、一部のエディタはUTF-8ファイルの識別のためにファイルの先頭にバイトオーダーマーク (BOM) を追加することがあります。Go 1.1のリリースノートでは、このBOMがGoソースファイルの最初の文字として許可されることが言及されていました。
しかし、元のドキュメントでは「Unicodeバイトオーダーマーク U+FFFE
と U+FEFF
」と誤って記述されていました。Unicode標準において、U+FEFF
はバイトオーダーマークとして定義されていますが、U+FFFE
は非文字(Noncharacter)であり、バイトオーダーマークとしては使用されません。U+FFFE
は主にUTF-16エンコーディングにおいてバイト順が逆になっていることを示すために内部的に使用されることがありますが、これはBOMとは異なる概念です。
このコミットは、ドキュメントの正確性を保ち、Unicode標準に準拠するために、この誤解を招く記述を修正することを目的としています。
前提知識の解説
UnicodeとUTF-8
- Unicode: 世界中の文字を統一的に扱うための文字コードの国際標準です。各文字に一意の番号(コードポイント)を割り当てます。
- UTF-8: Unicodeの文字をバイト列にエンコード(符号化)するための方式の一つです。可変長エンコーディングであり、ASCII文字は1バイトで表現され、他の文字は2バイト以上で表現されます。UTF-8はバイトオーダーフリー(バイト順序に依存しない)であるという特徴があります。
バイトオーダーマーク (BOM)
- BOM (Byte Order Mark): Unicodeのテキストファイルの先頭に付加される特殊な文字で、そのファイルがどのUnicodeエンコーディング(UTF-8, UTF-16, UTF-32など)でエンコードされているか、またUTF-16やUTF-32の場合はバイト順序(ビッグエンディアンかリトルエンディアンか)を示すために使用されます。
- U+FEFF: これはUnicodeのコードポイントで、正式なバイトオーダーマークとして定義されています。UTF-8でエンコードされた場合、
EF BB BF
という3バイトのシーケンスになります。UTF-8はバイトオーダーフリーであるため、技術的にはBOMは不要ですが、一部のエディタやシステムがファイルのエンコーディングを識別するための「マジックナンバー」として付加することがあります。 - U+FFFE: これはUnicodeの「非文字(Noncharacter)」コードポイントの一つです。これは文字としては使用されず、主にUTF-16エンコーディングにおいて、バイト順が逆になっていることを示すために内部的に使用されることがあります。
U+FFFE
はBOMとして定義されておらず、ファイルのエンコーディングを示す目的でファイルの先頭に置かれるべきではありません。
技術的詳細
Go言語のコンパイラやツールチェーンは、Goソースファイルを処理する際に、ファイルのエンコーディングを正しく解釈する必要があります。Go 1.1の時点では、UTF-8エンコードされたファイルで、先頭に U+FEFF
のBOMが付加されている場合でも、それを正しくスキップしてソースコードの解析を開始できるようになっていました。
このコミットの技術的なポイントは、ドキュメントがUnicode標準の厳密な定義に準拠するように修正された点です。
U+FFFE
の除外: 元のドキュメントではU+FFFE
もBOMとして許可されているかのように記述されていましたが、これは誤りです。U+FFFE
はBOMではなく、Goのソースファイルの先頭に現れるべきではありません。この修正により、GoのドキュメントがUnicodeの仕様と一致するようになりました。- 単数形への変更:
U+FFFE
がBOMのリストから削除されたため、関連する文章も「バイトオーダーマークU+FEFF
」のように単数形に修正されました。これにより、文章の整合性が保たれています。
この変更はGoコンパイラの動作に直接的な影響を与えるものではなく、あくまでドキュメントの正確性を向上させるためのものです。しかし、開発者がGoソースファイルのエンコーディングやBOMの扱いについて誤解するのを防ぐ上で重要な修正と言えます。
コアとなるコードの変更箇所
変更は doc/go1.1.html
ファイル内で行われています。
--- a/doc/go1.1.html
+++ b/doc/go1.1.html
@@ -272,10 +272,10 @@ values.
</p>
<p>
-The Unicode byte order marks U+FFFE and U+FEFF, encoded in UTF-8, are now permitted as the first
+The Unicode byte order mark U+FEFF, encoded in UTF-8, is now permitted as the first
character of a Go source file.
-Even though their appearance in the byte-order-free UTF-8 encoding is clearly unnecessary,\n-some editors add them as a kind of \"magic number\" identifying a UTF-8 encoded file.
+Even though its appearance in the byte-order-free UTF-8 encoding is clearly unnecessary,\n+some editors add the mark as a kind of \"magic number\" identifying a UTF-8 encoded file.
</p>
<p>
コアとなるコードの解説
変更された箇所は、Go 1.1のリリースノートの一部である doc/go1.1.html
のHTMLコンテンツです。
-
U+FFFE
の削除:-The Unicode byte order marks U+FFFE and U+FEFF, encoded in UTF-8, are now permitted as the first +The Unicode byte order mark U+FEFF, encoded in UTF-8, is now permitted as the first
この行では、Goソースファイルの先頭で許可されるBOMのリストから
U+FFFE
が削除され、U+FEFF
のみが明示されています。これは、U+FFFE
がUnicode標準においてBOMではないという事実を反映したものです。 -
単数形への修正:
-Even though their appearance in the byte-order-free UTF-8 encoding is clearly unnecessary,\n-some editors add them as a kind of \"magic number\" identifying a UTF-8 encoded file. +Even though its appearance in the byte-order-free UTF-8 encoding is clearly unnecessary,\n+some editors add the mark as a kind of \"magic number\" identifying a UTF-8 encoded file.
前の行でBOMが
U+FEFF
の一つに限定されたため、それに合わせて「それらの出現 (their appearance)」が「その出現 (its appearance)」に、「それらを (them)」が「そのマークを (the mark)」に修正されています。これにより、文章全体の文法的な整合性が保たれています。
これらの変更は、Go言語のドキュメントがUnicodeの文字エンコーディングに関する正確な情報を提供するようにするための、シンプルながらも重要な修正です。
関連リンク
- Go CL 9103046: https://golang.org/cl/9103046
参考にした情報源リンク
- Unicode Standard Annex #15: Unicode Normalization Forms (U+FEFF and U+FFFE): https://www.unicode.org/reports/tr15/ (特に、BOMと非文字に関するセクション)
- UTF-8 Byte Order Mark: https://en.wikipedia.org/wiki/Byte_order_mark#UTF-8
- Go 1.1 Release Notes: https://go.dev/doc/go1.1 (このコミットが修正している元のドキュメント)