[インデックス 14343] ファイルの概要
このコミットは、Go言語の標準ライブラリの次期バージョン(Go 1.1またはそれ以降)で導入される予定のAPI変更を記録する api/next.txt
ファイルを更新するものです。このファイルは、GoのAPI互換性ポリシーに則り、将来のリリースで追加される可能性のあるAPI要素を事前にリストアップし、コミュニティに透明性を提供するために使用されます。
コミット
commit ccef88c56f8b80e2e2c3aea9dd19be6527fb93f8
Author: Russ Cox <rsc@golang.org>
Date: Wed Nov 7 15:26:41 2012 -0500
api: refresh next.txt
R=golang-dev, iant
CC=golang-dev
https://golang.org/cl/6811092
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/ccef88c56f8b80e2e2c3aea9dd19be6527fb93f8
元コミット内容
api: refresh next.txt
変更の背景
Go言語は、後方互換性を非常に重視しており、特に標準ライブラリのAPI変更には厳格なポリシーを設けています。api/next.txt
ファイルは、このポリシーの一環として機能します。Goの新しいリリースサイクルにおいて、開発中に導入される可能性のある新しいAPI要素(関数、メソッド、型、定数など)は、まずこのファイルにリストアップされます。これにより、Goの開発チームは、APIの追加や変更を計画的に行い、将来のリリースで実際に導入される前に、コミュニティからのフィードバックを受けたり、潜在的な影響を評価したりする機会を得ます。
このコミットは、Go 1.1のリリースに向けて、開発中に蓄積された新しいAPIの追加を api/next.txt
に反映させるための定期的な更新です。これにより、GoのAPIがどのように進化しているかを明確にし、Goユーザーが将来の変更に備えることができるようになります。
前提知識の解説
- Go言語のAPI互換性ポリシー: Go言語は、バージョン1以降、後方互換性を維持することを強く約束しています。これは、既存のGoプログラムが新しいバージョンのGoコンパイラでコンパイルでき、期待通りに動作することを意味します。APIの追加は許可されますが、既存のAPIの変更や削除は厳しく制限されます。
api/next.txt
は、このポリシーを遵守しつつ、新しい機能や改善を導入するためのメカニズムの一部です。 api/next.txt
: Goプロジェクト内で使用される特殊なファイルで、次期リリースで追加される予定の標準ライブラリのAPI要素が記述されています。このファイルは、Goのビルドプロセスの一部としてチェックされ、ここに記載されていないAPIが追加された場合、ビルドエラーとなることがあります。これにより、APIの追加が意図的かつ計画的に行われることが保証されます。- Goのリリースサイクル: Goは通常、年に2回のメジャーリリース(例: Go 1.x)を行います。各リリースでは、言語の改善、標準ライブラリの拡張、パフォーマンスの最適化などが行われます。
技術的詳細
このコミットの技術的詳細は、api/next.txt
ファイルに追加された具体的なAPI要素に集約されます。以下に、主要な変更点をパッケージごとに分類して解説します。
archive/zip
:FileHeader
構造体にCompressedSize64
とUncompressedSize64
フィールドが追加されました。これは、ZIPアーカイブ内の非常に大きなファイル(4GB以上)を扱うための64ビットサイズ対応を導入するものです。従来のZIPフォーマットでは32ビットのサイズ制限がありましたが、これにより現代の大容量データに対応できるようになります。
bufio
:Reader
およびWriter
型にWriteTo
およびReadFrom
メソッドが追加されました。これらはio.WriterTo
およびio.ReaderFrom
インターフェースの実装であり、バッファリングされたI/Oにおいて、直接データ転送を行うことで効率を向上させます。例えば、io.Copy
のような操作で中間バッファを介さずにデータをコピーできるようになります。
bytes
:Buffer
型にGrow
メソッドが追加されました。これは、bytes.Buffer
の内部バッファを事前に拡張するためのもので、連続した書き込み操作において再割り当ての回数を減らし、パフォーマンスを向上させることができます。Reader
型にWriteTo
メソッドが追加されました。これもio.WriterTo
インターフェースの実装で、bytes.Reader
の内容を効率的に別のio.Writer
に書き出すことを可能にします。
crypto/hmac
:Equal
関数が追加されました。これは、HMAC(Keyed-Hash Message Authentication Code)の比較をサイドチャネル攻撃に対して安全に行うためのものです。通常のバイト列比較では、比較にかかる時間から秘密鍵に関する情報が漏洩する可能性がありますが、この関数は一定時間で比較を行うことでそのリスクを軽減します。
crypto/tls
:Config
構造体にSessionTicketKey
とSessionTicketsDisabled
フィールドが追加されました。これらはTLSセッションチケットのサポートを強化するためのものです。セッションチケットを使用すると、TLSハンドシェイクのオーバーヘッドを削減し、再接続時のパフォーマンスを向上させることができます。ConnectionState
構造体にDidResume
フィールドが追加されました。これは、現在のTLS接続がセッション再開によって確立されたかどうかを示すものです。
crypto/x509
:DecryptPEMBlock
関数とIsEncryptedPEMBlock
関数が追加されました。これらは、PEMエンコードされた秘密鍵などのブロックが暗号化されているかどうかを判断し、復号化するための機能を提供します。これにより、暗号化されたPEMブロックの取り扱いが容易になります。IncorrectPasswordError
変数が追加されました。これは、PEMブロックの復号化に失敗した場合に返されるエラーです。
debug/pe
:- WindowsのPE(Portable Executable)ファイル形式のデバッグ情報に関する多くの型とフィールドが追加されました。これには
COFFSymbol
構造体とそのフィールド、File
構造体のSymbols
フィールド、およびSymbol
構造体が含まれます。これにより、GoのツールがPEファイル内のシンボル情報をより詳細に解析できるようになります。
- WindowsのPE(Portable Executable)ファイル形式のデバッグ情報に関する多くの型とフィールドが追加されました。これには
go/ast
:CommentMap
のUpdate
メソッドのシグネチャが変更され、Node
型の引数が2つになりました。これは、AST(Abstract Syntax Tree)のノードが更新された際に、コメントマップも適切に更新できるようにするための変更です。ChanType
構造体にArrow
フィールドが追加されました。これは、チャネル型の構文(<-chan T
やchan<- T
)における矢印の位置を保持するためのものです。ChainNode
、DotNode
、FieldNode
、IdentifierNode
、NilNode
など、ASTの様々なノード型にPosition()
メソッドが追加されました。これにより、ASTノードがソースコード内のどの位置に対応するかを正確に取得できるようになり、ツール開発やエラー報告の精度が向上します。
go/build
:Context
構造体にInstallTag
フィールドが追加されました。これは、Goのビルドプロセスにおいて、特定のビルドタグに基づいてパッケージのインストールを制御するためのものです。
go/doc
:Example
構造体にPlay
フィールドが追加されました。これは、Goのドキュメント生成ツールが、実行可能なコード例(Go Playgroundで実行できる形式)をより適切に扱うためのものです。
io
:ByteWriter
インターフェースが追加されました。これは、バイト単位で書き込みを行うためのシンプルなインターフェースです。
net
:LookupNS
関数とNS
型が追加されました。これらは、DNSのネームサーバ(NS)レコードをルックアップするための機能を提供します。IPConn
およびUDPConn
型にReadMsgIP
およびWriteMsgIP
メソッドが追加されました。これらは、IPレベルのメッセージ(IPヘッダや補助データを含む)を送受信するためのもので、より低レベルなネットワークプログラミングを可能にします。
net/http
:ParseTime
関数が追加されました。これは、HTTPヘッダで使用される日付/時刻文字列を解析するためのものです。ServeMux
にHandler
メソッドが追加されました。これは、特定のリクエストに対するハンドラとパスを返すものです。
net/mail
:ParseAddress
関数とParseAddressList
関数が追加されました。これらは、RFC 5322に準拠したメールアドレス文字列を解析するためのものです。
reflect
:Select
関数、SelectCase
型、SelectDir
型、および関連する定数が追加されました。これらは、Goのselect
ステートメントの機能をリフレクションAPIを通じて利用するためのものです。これにより、実行時に動的にチャネル操作を選択できるようになり、より柔軟な並行処理の構築が可能になります。MakeFunc
関数が追加されました。これは、リフレクションを使って新しい関数を作成するためのものです。Value
型にConvert
メソッドが追加されました。これは、リフレクションを使って値を別の型に変換するためのものです。Type
インターフェースにConvertibleTo
メソッドが追加されました。これは、ある型が別の型に変換可能かどうかをチェックするためのものです。
runtime
:BlockProfile
関数、SetBlockProfileRate
関数、BlockProfileRecord
型、および関連するフィールドが追加されました。これらは、Goプログラムのブロッキングプロファイル(goroutineがブロッキング操作で費やした時間)を収集するための機能を提供します。これにより、並行処理におけるパフォーマンスボトルネックの特定が容易になります。
syscall
:- Darwin (macOS)、Linux、Windowsなど、様々なOSおよびアーキテクチャ向けの
syscall
パッケージに多数の変更が加えられています。これには、特定のシステムコール(例:GetsockoptUcred
,Getxattr
,Setxattr
,Removexattr
,PtraceSyscall
)、構造体(例:Inet4Pktinfo
,Ucred
,AddrinfoW
,RawSockaddrInet6
)、および定数(例:AI_CANONNAME
,ERROR_NOT_FOUND
)の追加が含まれます。これらの変更は、Goがより多くのOS固有の機能や低レベルなシステム操作をサポートするためのものです。
- Darwin (macOS)、Linux、Windowsなど、様々なOSおよびアーキテクチャ向けの
testing
:BenchmarkResult
型にAllocedBytesPerOp
、AllocsPerOp
、MemString
メソッド、およびMemAllocs
、MemBytes
フィールドが追加されました。これらは、Goのベンチマークテストにおいて、メモリ割り当てに関する詳細な統計情報を取得するためのものです。これにより、メモリ使用量の最適化がより容易になります。
text/template/parse
:- テンプレートのパースツリーにおけるノードの位置情報(
Pos
)を扱うための多くの変更が加えられました。様々なノード型にPosition()
メソッドが追加され、Tree
構造体にErrorContext
メソッドが追加されました。これにより、テンプレートの構文エラーが発生した際に、より正確なエラーメッセージと位置情報を提供できるようになります。
- テンプレートのパースツリーにおけるノードの位置情報(
unicode
:- 新しいUnicodeスクリプト(例:
Chakma
,Meroitic_Cursive
,Miao
,Sharada
,Sora_Sompeng
,Takri
)のRangeTable
が追加されました。これにより、GoのUnicodeサポートが拡張され、より多くの言語や文字体系を正確に処理できるようになります。
- 新しいUnicodeスクリプト(例:
これらの変更は、Go言語が進化し、より多くのユースケースに対応し、パフォーマンスと機能性を向上させるための継続的な取り組みの一部です。
コアとなるコードの変更箇所
このコミットのコアとなる変更は、api/next.txt
ファイルの内容そのものです。このファイルは、Goの標準ライブラリのAPI定義をテキスト形式で記述したものであり、このコミットでは、前述の技術的詳細で述べた多数の新しい関数、メソッド、型、定数が追加されています。
具体的には、diff --git a/api/next.txt b/api/next.txt
のセクションに示されているように、既存の行の削除(3行)と新しい行の追加(236行)が行われています。これらの追加行が、Go 1.1以降で導入される予定の新しいAPI要素を定義しています。
例:
--- a/api/next.txt
+++ b/api/next.txt
@@ -1,7 +1,18 @@
pkg archive/tar, func FileInfoHeader(os.FileInfo, string) (*Header, error)
+pkg archive/zip, type FileHeader struct, CompressedSize64 uint64
+pkg archive/zip, type FileHeader struct, UncompressedSize64 uint64
+pkg bufio, method (*Reader) WriteTo(io.Writer) (int64, error)
+pkg bufio, method (*Writer) ReadFrom(io.Reader) (int64, error)
+pkg bufio, method (ReadWriter) ReadFrom(io.Reader) (int64, error)
+pkg bufio, method (ReadWriter) WriteTo(io.Writer) (int64, error)
pkg bytes, method (*Buffer) Grow(int)
+pkg bytes, method (*Reader) WriteTo(io.Writer) (int64, error)
+pkg crypto/hmac, func Equal([]byte, []byte) bool
pkg crypto/tls, const TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA uint16
pkg crypto/tls, const TLS_RSA_WITH_AES_256_CBC_SHA uint16
+pkg crypto/tls, type Config struct, SessionTicketKey [32]byte
+pkg crypto/tls, type Config struct, SessionTicketsDisabled bool
+pkg crypto/tls, type ConnectionState struct, DidResume bool
この差分は、archive/zip
パッケージの FileHeader
構造体に CompressedSize64
と UncompressedSize64
が追加されたこと、bufio
パッケージに WriteTo
と ReadFrom
メソッドが追加されたこと、bytes
パッケージに Grow
メソッドと WriteTo
メソッドが追加されたこと、crypto/hmac
に Equal
関数が追加されたこと、crypto/tls
にセッションチケット関連のフィールドが追加されたことなどを示しています。
コアとなるコードの解説
api/next.txt
は、Goのビルドシステムによって解析される特別なファイルです。Goのコンパイラやツールチェーンは、このファイルに記載されているAPIのみが標準ライブラリに追加されることを期待します。もし、このファイルに記載されていないAPIがコードベースに追加された場合、ビルド時にエラーが発生し、開発者はそのAPIを api/next.txt
に追加するか、そのAPIの追加を取り消す必要があります。
このメカニズムは、GoのAPI互換性ポリシーを強制し、意図しないAPIの変更や追加を防ぐ上で非常に重要です。api/next.txt
を定期的に「リフレッシュ」する(つまり、開発中に導入された新しいAPIを反映させる)ことで、Goの開発プロセスは透明性を保ち、将来のリリースで何が期待できるかをコミュニティに明確に伝えます。
このコミット自体は、Goのソースコードの機能的な変更(例えば、新しい関数の実装)を行うものではなく、あくまでAPIの「宣言」を更新するものです。実際の機能実装は、このコミットとは別のコミットで既に行われているか、今後行われることになります。
関連リンク
- Go言語の互換性保証: https://go.dev/doc/go1compat
- GoのAPIレビュープロセスに関する議論(一般的な情報源として): Goのメーリングリストやデザインドキュメントで「Go API review process」などで検索すると、より詳細な情報が見つかる可能性があります。
参考にした情報源リンク
- Go言語の公式ドキュメント
- Go言語のソースコードリポジトリ(特に
api/next.txt
ファイルの履歴) - Goのメーリングリストアーカイブ (golang-dev)
- GoのChange List (CL) 6811092: https://golang.org/cl/6811092 (これはコミットメッセージに記載されているリンクであり、このコミットの直接の変更元です。)
- Goのリリースノート(Go 1.1のリリースノートなど、このコミットが関連するリリースについて言及されている可能性のあるもの)
[インデックス 14343] ファイルの概要
このコミットは、Go言語の標準ライブラリの次期バージョン(Go 1.1またはそれ以降)で導入される予定のAPI変更を記録する api/next.txt
ファイルを更新するものです。このファイルは、GoのAPI互換性ポリシーに則り、将来のリリースで追加される可能性のあるAPI要素を事前にリストアップし、コミュニティに透明性を提供するために使用されます。
コミット
commit ccef88c56f8b80e2e2c3aea9dd19be6527fb93f8
Author: Russ Cox <rsc@golang.org>
Date: Wed Nov 7 15:26:41 2012 -0500
api: refresh next.txt
R=golang-dev, iant
CC=golang-dev
https://golang.org/cl/6811092
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/ccef88c56f8b80e2e2c3aea9dd19be6527fb93f8
元コミット内容
api: refresh next.txt
変更の背景
Go言語は、後方互換性を非常に重視しており、特に標準ライブラリのAPI変更には厳格なポリシーを設けています。api/next.txt
ファイルは、このポリシーの一環として機能します。Goの新しいリリースサイクルにおいて、開発中に導入される可能性のある新しいAPI要素(関数、メソッド、型、定数など)は、まずこのファイルにリストアップされます。これにより、Goの開発チームは、APIの追加や変更を計画的に行い、将来のリリースで実際に導入される前に、コミュニティからのフィードバックを受けたり、潜在的な影響を評価したりする機会を得ます。
このコミットは、Go 1.1のリリースに向けて、開発中に蓄積された新しいAPIの追加を api/next.txt
に反映させるための定期的な更新です。これにより、GoのAPIがどのように進化しているかを明確にし、Goユーザーが将来の変更に備えることができるようになります。
前提知識の解説
- Go言語のAPI互換性ポリシー: Go言語は、バージョン1以降、後方互換性を強く約束しています。これは、既存のGoプログラムが新しいバージョンのGoコンパイラでコンパイルでき、期待通りに動作することを意味します。APIの追加は許可されますが、既存のAPIの変更や削除は厳しく制限されます。
api/next.txt
は、このポリシーを遵守しつつ、新しい機能や改善を導入するためのメカニズムの一部です。 api/next.txt
: Goプロジェクト内で使用される特殊なファイルで、次期リリースで追加される予定の標準ライブラリのAPI要素が記述されています。このファイルは、Goのビルドプロセスの一部としてチェックされ、ここに記載されていないAPIが追加された場合、ビルドエラーとなることがあります。これにより、APIの追加が意図的かつ計画的に行われることが保証されます。- Goのリリースサイクル: Goは通常、年に2回のメジャーリリース(例: Go 1.x)を行います。各リリースでは、言語の改善、標準ライブラリの拡張、パフォーマンスの最適化などが行われます。
技術的詳細
このコミットの技術的詳細は、api/next.txt
ファイルに追加された具体的なAPI要素に集約されます。以下に、主要な変更点をパッケージごとに分類して解説します。
archive/zip
:FileHeader
構造体にCompressedSize64
とUncompressedSize64
フィールドが追加されました。これは、ZIPアーカイブ内の非常に大きなファイル(4GB以上)を扱うための64ビットサイズ対応を導入するものです。従来のZIPフォーマットでは32ビットのサイズ制限がありましたが、これにより現代の大容量データに対応できるようになります。
bufio
:Reader
およびWriter
型にWriteTo
およびReadFrom
メソッドが追加されました。これらはio.WriterTo
およびio.ReaderFrom
インターフェースの実装であり、バッファリングされたI/Oにおいて、直接データ転送を行うことで効率を向上させます。例えば、io.Copy
のような操作で中間バッファを介さずにデータをコピーできるようになります。
bytes
:Buffer
型にGrow
メソッドが追加されました。これは、bytes.Buffer
の内部バッファを事前に拡張するためのもので、連続した書き込み操作において再割り当ての回数を減らし、パフォーマンスを向上させることができます。Reader
型にWriteTo
メソッドが追加されました。これもio.WriterTo
インターフェースの実装で、bytes.Reader
の内容を効率的に別のio.Writer
に書き出すことを可能にします。
crypto/hmac
:Equal
関数が追加されました。これは、HMAC(Keyed-Hash Message Authentication Code)の比較をサイドチャネル攻撃に対して安全に行うためのものです。通常のバイト列比較では、比較にかかる時間から秘密鍵に関する情報が漏洩する可能性がありますが、この関数は一定時間で比較を行うことでそのリスクを軽減します。
crypto/tls
:Config
構造体にSessionTicketKey
とSessionTicketsDisabled
フィールドが追加されました。これらはTLSセッションチケットのサポートを強化するためのものです。セッションチケットを使用すると、TLSハンドシェイクのオーバーヘッドを削減し、再接続時のパフォーマンスを向上させることができます。ConnectionState
構造体にDidResume
フィールドが追加されました。これは、現在のTLS接続がセッション再開によって確立されたかどうかを示すものです。
crypto/x509
:DecryptPEMBlock
関数とIsEncryptedPEMBlock
関数が追加されました。これらは、PEMエンコードされた秘密鍵などのブロックが暗号化されているかどうかを判断し、復号化するための機能を提供します。これにより、暗号化されたPEMブロックの取り扱いが容易になります。IncorrectPasswordError
変数が追加されました。これは、PEMブロックの復号化に失敗した場合に返されるエラーです。
debug/pe
:- WindowsのPE(Portable Executable)ファイル形式のデバッグ情報に関する多くの型とフィールドが追加されました。これには
COFFSymbol
構造体とそのフィールド、File
構造体のSymbols
フィールド、およびSymbol
構造体が含まれます。これにより、GoのツールがPEファイル内のシンボル情報をより詳細に解析できるようになります。
- WindowsのPE(Portable Executable)ファイル形式のデバッグ情報に関する多くの型とフィールドが追加されました。これには
go/ast
:CommentMap
のUpdate
メソッドのシグネチャが変更され、Node
型の引数が2つになりました。これは、AST(Abstract Syntax Tree)のノードが更新された際に、コメントマップも適切に更新できるようにするための変更です。ChanType
構造体にArrow
フィールドが追加されました。これは、チャネル型の構文(<-chan T
やchan<- T
)における矢印の位置を保持するためのものです。ChainNode
、DotNode
、FieldNode
、IdentifierNode
、NilNode
など、ASTの様々なノード型にPosition()
メソッドが追加されました。これにより、ASTノードがソースコード内のどの位置に対応するかを正確に取得できるようになり、ツール開発やエラー報告の精度が向上します。
go/build
:Context
構造体にInstallTag
フィールドが追加されました。これは、Goのビルドプロセスにおいて、特定のビルドタグに基づいてパッケージのインストールを制御するためのものです。
go/doc
:Example
構造体にPlay
フィールドが追加されました。これは、Goのドキュメント生成ツールが、実行可能なコード例(Go Playgroundで実行できる形式)をより適切に扱うためのものです。
io
:ByteWriter
インターフェースが追加されました。これは、バイト単位で書き込みを行うためのシンプルなインターフェースです。
net
:LookupNS
関数とNS
型が追加されました。これらは、DNSのネームサーバ(NS)レコードをルックアップするための機能を提供します。IPConn
およびUDPConn
型にReadMsgIP
およびWriteMsgIP
メソッドが追加されました。これらは、IPレベルのメッセージ(IPヘッダや補助データを含む)を送受信するためのもので、より低レベルなネットワークプログラミングを可能にします。
net/http
:ParseTime
関数が追加されました。これは、HTTPヘッダで使用される日付/時刻文字列を解析するためのものです。ServeMux
にHandler
メソッドが追加されました。これは、特定のリクエストに対するハンドラとパスを返すものです。
net/mail
:ParseAddress
関数とParseAddressList
関数が追加されました。これらは、RFC 5322に準拠したメールアドレス文字列を解析するためのものです。
reflect
:Select
関数、SelectCase
型、SelectDir
型、および関連する定数が追加されました。これらは、Goのselect
ステートメントの機能をリフレクションAPIを通じて利用するためのものです。これにより、実行時に動的にチャネル操作を選択できるようになり、より柔軟な並行処理の構築が可能になります。MakeFunc
関数が追加されました。これは、リフレクションを使って新しい関数を作成するためのものです。Value
型にConvert
メソッドが追加されました。これは、リフレクションを使って値を別の型に変換するためのものです。Type
インターフェースにConvertibleTo
メソッドが追加されました。これは、ある型が別の型に変換可能かどうかをチェックするためのものです。
runtime
:BlockProfile
関数、SetBlockProfileRate
関数、BlockProfileRecord
型、および関連するフィールドが追加されました。これらは、Goプログラムのブロッキングプロファイル(goroutineがブロッキング操作で費やした時間)を収集するための機能を提供します。これにより、並行処理におけるパフォーマンスボトルネックの特定が容易になります。
syscall
:- Darwin (macOS)、Linux、Windowsなど、様々なOSおよびアーキテクチャ向けの
syscall
パッケージに多数の変更が加えられています。これには、特定のシステムコール(例:GetsockoptUcred
,Getxattr
,Setxattr
,Removexattr
,PtraceSyscall
)、構造体(例:Inet4Pktinfo
,Ucred
,AddrinfoW
,RawSockaddrInet6
)、および定数(例:AI_CANONNAME
,ERROR_NOT_FOUND
)の追加が含まれます。これらの変更は、Goがより多くのOS固有の機能や低レベルなシステム操作をサポートするためのものです。
- Darwin (macOS)、Linux、Windowsなど、様々なOSおよびアーキテクチャ向けの
testing
:BenchmarkResult
型にAllocedBytesPerOp
、AllocsPerOp
、MemString
メソッド、およびMemAllocs
、MemBytes
フィールドが追加されました。これらは、Goのベンチマークテストにおいて、メモリ割り当てに関する詳細な統計情報を取得するためのものです。これにより、メモリ使用量の最適化がより容易になります。
text/template/parse
:- テンプレートのパースツリーにおけるノードの位置情報(
Pos
)を扱うための多くの変更が加えられました。様々なノード型にPosition()
メソッドが追加され、Tree
構造体にErrorContext
メソッドが追加されました。これにより、テンプレートの構文エラーが発生した際に、より正確なエラーメッセージと位置情報を提供できるようになります。
- テンプレートのパースツリーにおけるノードの位置情報(
unicode
:- 新しいUnicodeスクリプト(例:
Chakma
,Meroitic_Cursive
,Miao
,Sharada
,Sora_Sompeng
,Takri
)のRangeTable
が追加されました。これにより、GoのUnicodeサポートが拡張され、より多くの言語や文字体系を正確に処理できるようになります。
- 新しいUnicodeスクリプト(例:
これらの変更は、Go言語が進化し、より多くのユースケースに対応し、パフォーマンスと機能性を向上させるための継続的な取り組みの一部です。
コアとなるコードの変更箇所
このコミットのコアとなる変更は、api/next.txt
ファイルの内容そのものです。このファイルは、Goの標準ライブラリのAPI定義をテキスト形式で記述したものであり、このコミットでは、前述の技術的詳細で述べた多数の新しい関数、メソッド、型、定数が追加されています。
具体的には、diff --git a/api/next.txt b/api/next.txt
のセクションに示されているように、既存の行の削除(3行)と新しい行の追加(236行)が行われています。これらの追加行が、Go 1.1以降で導入される予定の新しいAPI要素を定義しています。
例:
--- a/api/next.txt
+++ b/api/next.txt
@@ -1,7 +1,18 @@
pkg archive/tar, func FileInfoHeader(os.FileInfo, string) (*Header, error)
+pkg archive/zip, type FileHeader struct, CompressedSize64 uint64
+pkg archive/zip, type FileHeader struct, UncompressedSize64 uint64
+pkg bufio, method (*Reader) WriteTo(io.Writer) (int64, error)
+pkg bufio, method (*Writer) ReadFrom(io.Reader) (int64, error)
+pkg bufio, method (ReadWriter) ReadFrom(io.Reader) (int64, error)
+pkg bufio, method (ReadWriter) WriteTo(io.Writer) (int64, error)
pkg bytes, method (*Buffer) Grow(int)
+pkg bytes, method (*Reader) WriteTo(io.Writer) (int64, error)
+pkg crypto/hmac, func Equal([]byte, []byte) bool
pkg crypto/tls, const TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA uint16
pkg crypto/tls, const TLS_RSA_WITH_AES_256_CBC_SHA uint16
+pkg crypto/tls, type Config struct, SessionTicketKey [32]byte
+pkg crypto/tls, type Config struct, SessionTicketsDisabled bool
+pkg crypto/tls, type ConnectionState struct, DidResume bool
この差分は、archive/zip
パッケージの FileHeader
構造体に CompressedSize64
と UncompressedSize64
が追加されたこと、bufio
パッケージに WriteTo
と ReadFrom
メソッドが追加されたこと、bytes
パッケージに Grow
メソッドと WriteTo
メソッドが追加されたこと、crypto/hmac
に Equal
関数が追加されたこと、crypto/tls
にセッションチケット関連のフィールドが追加されたことなどを示しています。
コアとなるコードの解説
api/next.txt
は、Goのビルドシステムによって解析される特別なファイルです。Goのコンパイラやツールチェーンは、このファイルに記載されているAPIのみが標準ライブラリに追加されることを期待します。もし、このファイルに記載されていないAPIがコードベースに追加された場合、ビルド時にエラーが発生し、開発者はそのAPIを api/next.txt
に追加するか、そのAPIの追加を取り消す必要があります。
このメカニズムは、GoのAPI互換性ポリシーを強制し、意図しないAPIの変更や追加を防ぐ上で非常に重要です。api/next.txt
を定期的に「リフレッシュ」する(つまり、開発中に導入された新しいAPIを反映させる)ことで、Goの開発プロセスは透明性を保ち、将来のリリースで何が期待できるかをコミュニティに明確に伝えます。
このコミット自体は、Goのソースコードの機能的な変更(例えば、新しい関数の実装)を行うものではなく、あくまでAPIの「宣言」を更新するものです。実際の機能実装は、このコミットとは別のコミットで既に行われているか、今後行われることになります。
関連リンク
- Go言語の互換性保証: https://go.dev/doc/go1compat
- GoのAPIレビュープロセスに関する議論(一般的な情報源として): Goのメーリングリストやデザインドキュメントで「Go API review process」などで検索すると、より詳細な情報が見つかる可能性があります。
参考にした情報源リンク
- Go言語の公式ドキュメント
- Go言語のソースコードリポジトリ(特に
api/next.txt
ファイルの履歴) - Goのメーリングリストアーカイブ (golang-dev)
- GoのChange List (CL) 6811092: https://golang.org/cl/6811092 (これはコミットメッセージに記載されているリンクであり、このコミットの直接の変更元です。)
- Goのリリースノート(Go 1.1のリリースノートなど、このコミットが関連するリリースについて言及されている可能性のあるもの)