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

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

このコミットは、Go言語の仕様書において、ImportPathの文字に関するUnicodeバージョンの参照をUnicode 6.0.0からUnicode 6.2.0に更新するものです。これは、Go言語がサポートするUnicodeのバージョンが更新されたことに伴う仕様書の修正です。

コミット

commit 002103f51cf5a448933cf4d4f97707da029786f1
Author: Oling Cat <olingcat@gmail.com>
Date:   Thu Nov 1 22:57:01 2012 -0700

    spec: we're now at Unicode 6.2.0
    
    R=golang-dev
    CC=golang-dev
    https://golang.org/cl/6818083
---
 doc/go_spec.html | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n
diff --git a/doc/go_spec.html b/doc/go_spec.html
index c5b1c42629..c14d662f8b 100644
--- a/doc/go_spec.html
+++ b/go_spec.html
@@ -5265,7 +5265,7 @@ package and may be relative to a repository of installed packages.
 <p>
 Implementation restriction: A compiler may restrict ImportPaths to
 non-empty strings using only characters belonging to
-<a href="http://www.unicode.org/versions/Unicode6.0.0/">Unicode's</a>
+<a href="http://www.unicode.org/versions/Unicode6.2.0/">Unicode's</a>
 L, M, N, P, and S general categories (the Graphic characters without
 spaces) and may also exclude the characters
 <code>!"#$%&amp;'()*,:;&lt;=&gt;?[\\]^`{|}</code>

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

https://github.com/golang/go/commit/002103f51cf5a448933cf4d4f97707da029786f1

元コミット内容

spec: we're now at Unicode 6.2.0

R=golang-dev
CC=golang-dev
https://golang.org/cl/6818083

変更の背景

この変更の背景には、Go言語のUnicodeサポートの進化があります。Go 1.1のリリースにおいて、Go言語のunicodeパッケージがUnicodeバージョン6.0.0から6.2.0に更新されました。これに伴い、Go言語の仕様書も、ImportPathに使用できる文字の定義において参照するUnicodeのバージョンを最新のものに合わせる必要がありました。

この更新は、Go言語がより堅牢で正確なUnicode処理を提供するための取り組みの一環です。特に、サロゲートペアのより厳密な処理や、無効なUnicodeコードポイントの拒否など、Unicodeの整合性を高めるための変更が含まれています。

前提知識の解説

Unicode

Unicode(ユニコード)は、世界中の文字をコンピュータで扱うために開発された文字コードの国際標準です。異なる言語や記号を統一的に表現することを目的としており、各文字に一意の番号(コードポイント)を割り当てています。これにより、異なるシステム間での文字化けを防ぎ、多言語対応のソフトウェア開発を容易にします。Unicodeは定期的に新しいバージョンがリリースされ、新しい文字や絵文字、スクリプトなどが追加されます。

Go言語のImportPath

Go言語では、パッケージをインポートする際に使用するパスを「ImportPath」と呼びます。これは、パッケージのソースコードがどこにあるかを示す識別子であり、通常はリポジトリのURLやファイルシステムのパスに似た形式を取ります。例えば、"fmt"は標準ライブラリのフォーマットパッケージを、"github.com/user/repo/package"はGitHub上のリポジトリにあるパッケージを指します。

Go言語の仕様では、ImportPathに使用できる文字に制限があります。これは、ImportPathがファイルシステムパスやURLの一部として機能するため、特定の文字が問題を引き起こす可能性があるためです。このコミットで言及されている「L, M, N, P, and S general categories」は、Unicodeの文字カテゴリの一部であり、それぞれ「Letter(文字)」「Mark(結合文字)」「Number(数字)」「Punctuation(句読点)」「Symbol(記号)」を指します。これらのカテゴリに属する文字は、通常、ImportPathとして安全に使用できると見なされます。

Unicode 6.0.0と6.2.0の違い

Unicodeのバージョンアップは、新しい文字の追加だけでなく、既存の文字のプロパティの変更や、文字処理に関する規則の改善を含むことがあります。Unicode 6.0.0から6.2.0への更新では、特に以下の点がGo言語のUnicode処理に影響を与えました。

  • サロゲートペアの厳密な処理: UTF-16エンコーディングで使用されるサロゲートペア(U+D800からU+DFFFの範囲のコードポイント)は、単独で有効なUnicode文字ではありません。Go 1.1(Unicode 6.2.0への更新を含む)では、これらのサロゲートペアが単独のルーン(Go言語におけるUnicodeコードポイント)として扱われることが不正とされ、コンパイラによって拒否されるようになりました。これにより、無効なUnicodeシーケンスの処理がより厳密になりました。
  • ValidRune関数の追加: unicode/utf8パッケージにValidRune関数が追加され、与えられたルーンが有効なUnicodeコードポイントであるか(有効な範囲内であり、サロゲートペアではないか)をチェックできるようになりました。
  • バイトオーダーマーク (BOM) の扱い: UTF-8エンコードされたBOM (U+FEFF) が、Goのソースファイルの最初の文字として許可されるようになりました。

これらの変更は、Go言語がUnicodeをより正確かつ安全に扱うための重要なステップでした。

技術的詳細

このコミットは、Go言語の仕様書doc/go_spec.html内の記述を修正するものです。具体的には、ImportPathに使用できる文字の定義において、参照しているUnicodeのバージョンを「Unicode 6.0.0」から「Unicode 6.2.0」に変更しています。

Go言語のコンパイラは、ImportPathが空でない文字列であり、かつUnicodeの特定の文字カテゴリ(L, M, N, P, S)に属する文字のみを使用するように制限する場合があります。また、特定の記号(!"#$%&'()*,:;<=>?[\\]^{|} `)は除外される可能性があります。この制限は、ImportPathの移植性と互換性を確保するために設けられています。

Unicode 6.2.0への更新は、Go言語の内部的なUnicode処理ライブラリ(unicodeパッケージやunicode/utf8パッケージ)がこの新しいバージョンに対応したことを反映しています。これにより、Go言語は最新のUnicode標準に準拠し、より広範な文字セットとより厳密な文字処理規則をサポートできるようになりました。

この仕様書の変更自体は、Go言語の動作に直接的な影響を与えるものではなく、あくまでGo言語の現在のUnicodeサポート状況を正確に反映するためのドキュメントの更新です。しかし、この変更の背後には、Go言語のランタイムとコンパイラにおけるUnicode処理の改善という重要な技術的進展があります。

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

--- a/doc/go_spec.html
+++ b/doc/go_spec.html
@@ -5265,7 +5265,7 @@ package and may be relative to a repository of installed packages.
 <p>
 Implementation restriction: A compiler may restrict ImportPaths to
 non-empty strings using only characters belonging to
-<a href="http://www.unicode.org/versions/Unicode6.0.0/">Unicode's</a>
+<a href="http://www.unicode.org/versions/Unicode6.2.0/">Unicode's</a>
 L, M, N, P, and S general categories (the Graphic characters without
 spaces) and may also exclude the characters
 <code>!"#$%&amp;'()*,:;&lt;=&gt;?[\\]^`{|}</code>

コアとなるコードの解説

この変更は、doc/go_spec.htmlファイル内のHTMLリンクのURLを更新するものです。

変更前: <a href="http://www.unicode.org/versions/Unicode6.0.0/">Unicode's</a>

変更後: <a href="http://www.unicode.org/versions/Unicode6.2.0/">Unicode's</a>

この一行の変更は、Go言語の仕様書がImportPathの文字に関する制限を説明する際に参照するUnicodeのバージョンを、Unicode 6.0.0からUnicode 6.2.0に更新したことを示しています。これは、Go言語のコンパイラとランタイムが実際にUnicode 6.2.0をサポートするようになったことを反映した、ドキュメントの整合性を保つための修正です。

この変更自体がGo言語の動作を変更するものではありませんが、Go言語がどのUnicodeバージョンに準拠しているかという重要な情報を提供し、開発者がImportPathの文字制限を理解する上で参照すべき正確な情報源を示しています。

関連リンク

参考にした情報源リンク