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

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

このコミットは、Go言語の組み込み型である rune のドキュメントを更新するものです。具体的には、runeint のエイリアスであるという記述を int32 のエイリアスであるという記述に修正し、将来的に int32 のエイリアスに変更されるという記述を削除しています。

コミット

commit e8de8b58caf52115be0d5d11282c504da8642238
Author: Anthony Eufemio <anthony.eufemio@gmail.com>
Date:   Tue Sep 18 11:01:10 2012 -0700

    builtin: Changed documentation for rune type.
    Fixes #4093.
    
    R=golang-dev, bradfitz, r
    CC=golang-dev
    https://golang.org/cl/6536047

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

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

元コミット内容

builtin: Changed documentation for rune type.
Fixes #4093.

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

変更の背景

このコミットの背景には、Go言語における rune 型の定義に関する歴史的な経緯と、それに対するドキュメントの正確性の問題があります。コミットメッセージにある Fixes #4093 が示すように、この変更はGoのIssue 4093に対応するものです。

Go言語の初期のバージョンでは、runeint のエイリアスとして定義されていました。しかし、rune はUnicodeコードポイントを表すために設計されており、Unicodeコードポイントは通常32ビットの符号なし整数で表現されます。Go言語の int 型は、システムアーキテクチャ(32ビットまたは64ビット)によってサイズが異なるため、runeint のエイリアスであるという定義は、rune の本来の目的と整合性が取れていませんでした。

この不整合を解消するため、Go 1.0.3のリリースで runeint32 のエイリアスとして正式に定義されることになりました。この変更は、rune が常に32ビットの符号付き整数として扱われることを保証し、Unicodeコードポイントの表現に適した型であることを明確にしました。

このコミットは、その実際の型定義の変更に合わせて、builtin パッケージ内の rune 型に関するドキュメントを修正し、正確な情報を提供する目的で行われました。特に、rune が将来的に int32 のエイリアスに変更されるという記述は、既に変更が完了しているため不要となり、削除されました。

前提知識の解説

Go言語の型システム

Go言語は静的型付け言語であり、変数は使用前に型を宣言する必要があります。Goには、以下のような基本的な組み込み型があります。

  • 数値型:
    • 整数型: int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64, uintptrintuint は、実行環境のCPUアーキテクチャ(32ビットまたは64ビット)に依存してサイズが変わります。int32 は常に32ビットの符号付き整数です。
    • 浮動小数点型: float32, float64
    • 複素数型: complex64, complex128
  • 真偽値型: bool
  • 文字列型: string

byte 型と rune

Go言語には、特に文字や文字列を扱うための特別なエイリアス型が2つあります。

  • byte: uint8 のエイリアスです。Go言語において、文字列はUTF-8エンコードされたバイトのシーケンスとして扱われます。byte 型は、このUTF-8エンコードされたバイト列の個々のバイトを表現するのに使用されます。
  • rune: int32 のエイリアスです。rune は、Unicodeコードポイント(文字)を表すために使用されます。Goの文字列を range ループでイテレートすると、各要素は rune 型として返され、これはUTF-8でエンコードされた文字のUnicodeコードポイントに対応します。

UnicodeとUTF-8

  • Unicode: 世界中のほとんどの文字体系を統一的に扱うための文字コード標準です。各文字には一意の「コードポイント」と呼ばれる数値が割り当てられています。
  • UTF-8: Unicodeコードポイントをバイト列にエンコードするための可変長エンコーディング方式です。ASCII文字は1バイトで表現され、他の多くの文字は2バイト以上で表現されます。Go言語の文字列は内部的にUTF-8でエンコードされています。

runeint32 のエイリアスであることは、Unicodeコードポイントが最大で 0x10FFFF (1,114,111) までの値を持ち、これが32ビットの符号付き整数で十分に表現できるためです。

技術的詳細

このコミットは、Go言語の標準ライブラリの一部である src/pkg/builtin/builtin.go ファイル内のドキュメントコメントを修正しています。このファイルは、Go言語に組み込まれている基本的な型や関数(例: len, cap, make, new, panic, recover など)の定義とドキュメントが含まれています。

変更の核心は、rune 型の定義に関するコメントの正確性を向上させることです。

変更前:

// rune is an alias for int and is equivalent to int in all ways. It is
// used, by convention, to distinguish character values from integer values.
// In a future version of Go, it will change to an alias of int32.
type rune rune

変更後:

// rune is an alias for int32 and is equivalent to int32 in all ways. It is
// used, by convention, to distinguish character values from integer values.
type rune rune

この変更により、以下の2点が修正されました。

  1. int から int32 への変更: runeint のエイリアスであるという記述が、int32 のエイリアスであるという記述に修正されました。これは、Go 1.0.3で実際に rune の基底型が int32 に変更された事実を反映しています。
  2. 将来の変更に関する記述の削除: 「In a future version of Go, it will change to an alias of int32.」という記述が削除されました。これは、既にその「将来のバージョン」が到来し、変更が適用済みであるため、この記述が不要になったためです。

このドキュメントの修正は、Go言語のユーザーが rune 型の正確な性質と、それがUnicodeコードポイントをどのように表現するかを理解する上で非常に重要です。

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

変更は src/pkg/builtin/builtin.go ファイルの以下の部分です。

--- a/src/pkg/builtin/builtin.go
+++ b/src/pkg/builtin/builtin.go
@@ -81,9 +81,8 @@ type uintptr uintptr
 // integer values.
 type byte byte
 
-// rune is an alias for int and is equivalent to int in all ways. It is
+// rune is an alias for int32 and is equivalent to int32 in all ways. It is
 // used, by convention, to distinguish character values from integer values.
-// In a future version of Go, it will change to an alias of int32.
 type rune rune
 
 // Type is here for the purposes of documentation only. It is a stand-in

コアとなるコードの解説

このコミットは、Go言語の builtin パッケージ内の rune 型のドキュメントコメントを修正しています。

  • - // rune is an alias for int and is equivalent to int in all ways. It is
    • この行は削除されました。以前のドキュメントでは runeint のエイリアスであると記述されていましたが、これはGo 1.0.3以降の実際の定義とは異なっていました。
  • + // rune is an alias for int32 and is equivalent to int32 in all ways. It is
    • この行が追加されました。これにより、runeint32 のエイリアスであり、すべての点で int32 と同等であるという正確な情報が提供されます。
  • - // In a future version of Go, it will change to an alias of int32.
    • この行は削除されました。この記述は、rune が将来的に int32 のエイリアスに変更されることを示唆していましたが、このコミットが適用される時点では既にその変更が完了していたため、不要となりました。

この変更は、コードの動作には影響を与えません。これは純粋にドキュメントの正確性を向上させるための修正であり、Go言語のユーザーが rune 型について誤解するのを防ぐことを目的としています。

関連リンク

参考にした情報源リンク