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

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

このコミットは、Go言語の仕様書 doc/go_spec.html におけるUnicodeバージョンの参照を更新するものです。具体的には、Go言語がサポートするUnicodeのバージョンを6.2から6.3に引き上げています。

コミット

commit e6863e7d5b22c7711d0f950981fa3673e9e160f5
Author: Rob Pike <r@golang.org>
Date:   Tue Feb 25 14:15:49 2014 -0800

    spec: libraries and implementation are now at Unicode 6.3
    
    LGTM=gri
    R=gri
    CC=golang-codereviews
    https://golang.org/cl/68760043

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

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

元コミット内容

spec: libraries and implementation are now at Unicode 6.3

LGTM=gri
R=gri
CC=golang-codereviews
https://golang.org/cl/68760043

変更の背景

Go言語は、その仕様においてUnicode標準に準拠しています。これは、識別子(変数名、関数名など)や文字列リテラルにおける文字の扱い、正規表現、その他のテキスト処理機能に影響を与えます。Unicode標準は定期的に新しいバージョンがリリースされ、新しい文字の追加、既存の文字のプロパティの変更、スクリプトのサポートの改善などが行われます。

このコミットの背景には、Go言語の標準ライブラリと実装が、より新しいUnicodeバージョンである6.3に対応したという事実があります。Go言語の仕様書は、その言語の振る舞いを正確に記述するものであるため、実装が新しいUnicodeバージョンをサポートするようになったことに合わせて、仕様書もその変更を反映させる必要がありました。これにより、Go言語のユーザーは、GoプログラムがどのUnicodeバージョンに基づいて文字を処理するかを正確に理解できるようになります。

前提知識の解説

Unicodeとは

Unicode(ユニコード)は、世界中のあらゆる文字をコンピュータで扱えるようにするために開発された文字コードの国際標準です。従来の文字コードが特定の言語や地域に特化していたのに対し、Unicodeは多言語環境での文字処理を統一的に行うことを目指しています。各文字には一意の「コードポイント」が割り当てられ、これにより異なるシステム間での文字化けを防ぎ、多様な言語のテキストを正確に表現・処理することが可能になります。

Unicodeのバージョン管理

Unicode標準は、新しい文字の追加や既存の文字プロパティの更新のために定期的に改訂されます。各改訂版はバージョン番号(例: Unicode 6.2, Unicode 6.3)で識別され、新しいバージョンがリリースされるたびに、サポートされる文字セットや文字の分類(例: 文字、数字、記号など)が拡張または変更される可能性があります。

Go言語とUnicode

Go言語は、その設計当初からUnicodeを強く意識しており、言語仕様の多くの部分でUnicodeの概念が取り入れられています。例えば、Goの文字列はUTF-8エンコードされたUnicodeコードポイントのシーケンスとして扱われます。また、識別子にはUnicode文字を使用できるなど、多言語対応が考慮されています。

Go言語の仕様書 doc/go_spec.html は、Go言語の正式な定義であり、その中でUnicodeのどのバージョンに準拠しているかを明記することは、言語の振る舞いを明確にする上で非常に重要です。特に、文字の分類(例:文字、数字、句読点など)は、Goのパーサーや標準ライブラリの動作に直接影響を与えるため、参照するUnicodeのバージョンが明確である必要があります。

技術的詳細

このコミットの技術的な詳細は、Go言語の仕様書 doc/go_spec.html 内のUnicodeバージョンへの参照を更新することにあります。具体的には、以下の2箇所で参照されているUnicodeのバージョン番号が6.2から6.3に変更されています。

  1. 識別子におけるUnicode文字の分類: Go言語の識別子(変数名、関数名など)に使用できる文字は、Unicodeの特定のカテゴリに属する文字と定義されています。以前は「The Unicode Standard 6.2」を参照していましたが、このコミットにより「The Unicode Standard 6.3」を参照するようになりました。これにより、Unicode 6.3で追加された新しい文字や、既存の文字のカテゴリ変更が、Goの識別子の有効性に影響を与える可能性があります。

  2. ImportPathsの制限: Go言語のImportPaths(パッケージのインポートパス)に使用できる文字にも制限があり、これもUnicodeの特定のカテゴリに属する文字に限定されています。ここでも、参照するUnicodeのバージョンが6.2から6.3に更新されました。これは、インポートパスの構文解析や検証に影響を与える可能性があります。

この変更は、Go言語のコンパイラや標準ライブラリが既にUnicode 6.3に対応していることを反映したものです。仕様書を更新することで、Go言語の公式な定義と実際の動作との間に整合性を持たせています。これにより、Go言語のユーザーやツール開発者は、GoがどのUnicodeバージョンに準拠しているかを正確に把握し、それに基づいてコードを記述したり、ツールを開発したりすることができます。

Unicodeのバージョンアップは、通常、新しい絵文字、記号、歴史的な文字、または少数言語の文字の追加を含みます。また、既存の文字のプロパティ(例:大文字・小文字の対応、文字幅、スクリプトなど)が微調整されることもあります。Go言語がUnicode 6.3に準拠することで、これらの新しい文字や変更されたプロパティがGoプログラム内で正しく扱われるようになります。

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

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

--- a/doc/go_spec.html
+++ b/doc/go_spec.html
@@ -120,7 +120,7 @@ unicode_digit  = /* a Unicode code point classified as \"Decimal Digit\" */ .\
 </pre>
 
 <p>
-In <a href=\"http://www.unicode.org/versions/Unicode6.2.0/\">The Unicode Standard 6.2</a>,\
+In <a href=\"http://www.unicode.org/versions/Unicode6.3.0/\">The Unicode Standard 6.3</a>,\
 Section 4.5 \"General Category\"\
 defines a set of character categories.  Go treats\
 those characters in category Lu, Ll, Lt, Lm, or Lo as Unicode letters,\
@@ -5683,7 +5683,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.2.0/\">Unicode\'s</a>\
+<a href=\"http://www.unicode.org/versions/Unicode6.3.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>\

コアとなるコードの解説

このコミットは、Go言語の仕様書 doc/go_spec.html 内のハイパーリンクとテキストを更新するものです。

  1. 120行目付近の変更: In <a href="http://www.unicode.org/versions/Unicode6.2.0/">The Unicode Standard 6.2</a>,In <a href="http://www.unicode.org/versions/Unicode6.3.0/">The Unicode Standard 6.3</a>, に変更されています。 これは、Go言語の識別子(変数名、関数名など)に使用できるUnicode文字のカテゴリを定義している箇所です。この変更により、Go言語が識別子の文字分類においてUnicode 6.3の定義に準拠することが明示されます。

  2. 5683行目付近の変更: non-empty strings using only characters belonging to <a href="http://www.unicode.org/versions/Unicode6.2.0/">Unicode's</a>non-empty strings using only characters belonging to <a href="http://www.unicode.org/versions/Unicode6.3.0/">Unicode's</a> に変更されています。 これは、Go言語のImportPaths(パッケージのインポートパス)に使用できる文字の制限を定義している箇所です。この変更により、インポートパスに使用できる文字がUnicode 6.3の定義に基づいて評価されることが明示されます。

これらの変更は、Go言語の仕様書が、Go言語の実際のライブラリと実装がサポートするUnicodeバージョンと一致するようにするためのものです。これにより、Go言語の動作に関する公式なドキュメントが常に最新かつ正確な情報を提供するようになります。

関連リンク

参考にした情報源リンク