[インデックス 13090] ファイルの概要
このコミットは、Go言語のAPI定義ファイルである api/go1.txt
から、pkg regexp/syntax, const ErrUnexpectedParen ErrorCode
というエントリを削除するものです。これは、以前のコミット 27d0a516b7eb
によって誤って追加された変更を元に戻すことを目的としています。
コミット
api: undo go1.txt additions made by 27d0a516b7eb
このコミットは、go1.txt
への追加を元に戻すものです。go1.txt
は変更すべきではないという原則に基づいています。
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/a2004546a9ec3b4c9e60fb916a5ecd94f81f718e
元コミット内容
commit a2004546a9ec3b4c9e60fb916a5ecd94f81f718e
Author: Andrew Gerrand <adg@golang.org>
Date: Thu May 17 18:08:28 2012 +1000
api: undo go1.txt additions made by 27d0a516b7eb
We don't change go1.txt.
R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/6206080
---\n api/go1.txt | 1 -\n 1 file changed, 1 deletion(-)\n
変更の背景
Go言語では、各メジャーバージョン(例: Go 1、Go 1.1など)のAPIの安定性を保証するために、go1.txt
のようなAPI定義ファイルが使用されます。これらのファイルは、特定のGoバージョンが出荷されると「凍結」され、その後の変更は原則として行われません。
このコミットの背景には、以前のコミット 27d0a516b7eb
が api/go1.txt
に pkg regexp/syntax, const ErrUnexpectedParen ErrorCode
というエントリを誤って追加してしまったという経緯があります。go1.txt
は一度確定すると変更しないというGoプロジェクトの厳格なポリシーに反するため、このコミットは、その誤った追加を元に戻すために作成されました。コミットメッセージにある「We don't change go1.txt.」という一文が、このポリシーを明確に示しています。
前提知識の解説
Go言語のAPI安定性
Go言語は、後方互換性を非常に重視する言語です。特に、Go 1のリリース以降、Go 1の互換性保証(Go 1 Compatibility Promise)という原則を掲げ、既存のGo 1プログラムが新しいGoバージョンでも動作することを保証しています。この互換性保証は、Go言語の標準ライブラリのAPIが安定していることを意味します。
go1.txt
とは
go1.txt
は、Go言語の標準ライブラリの公開APIを定義するテキストファイルです。これは、GoのAPIチェッカーツールが使用するもので、Goの新しいバージョンがリリースされる際に、既存のAPIが意図せず変更されていないか、あるいは新しいAPIが適切に追加されているかを検証するために利用されます。このファイルは、特定のGoバージョン(この場合はGo 1)のAPIが確定した時点で「凍結」され、その後の変更は厳しく制限されます。これにより、Go言語のAPIの安定性と後方互換性が維持されます。
regexp/syntax
パッケージ
regexp/syntax
パッケージは、Go言語の標準ライブラリの一部であり、正規表現の構文解析と抽象構文木(AST)の構築に関連する機能を提供します。このパッケージは、regexp
パッケージの内部で利用され、正規表現のパターンを解析し、実行可能な形式に変換する役割を担っています。ErrUnexpectedParen ErrorCode
は、正規表現の構文エラー、具体的には予期しない括弧の出現を示すエラーコードであったと考えられます。
技術的詳細
このコミットは、go1.txt
の厳格な管理ポリシーを再確認するものです。go1.txt
は、Go 1のAPIが確定した時点でのスナップショットであり、一度リリースされたGoのバージョンに対しては、APIの変更(追加、削除、変更)は原則として行われません。これは、Go言語の安定性と、既存のコードベースが新しいGoバージョンでも問題なく動作することを保証するための重要なメカニズムです。
27d0a516b7eb
コミットによって go1.txt
に ErrUnexpectedParen ErrorCode
が追加されたことは、このポリシーに反する行為でした。たとえそれが新しいエラーコードの追加であったとしても、go1.txt
はAPIの「凍結」状態を反映するものであるため、一度確定したGo 1のAPIに後から変更を加えることは許されません。
このコミットは、単に1行のテキストを削除するだけでなく、GoプロジェクトがAPIの安定性をいかに重視しているかを示す象徴的な変更と言えます。APIの変更は、Goのバージョンアップ時に慎重に検討され、新しいAPIは新しいバージョンのAPI定義ファイル(例: go1.1.txt
など)に追加されるべきであり、既存の go1.txt
を変更すべきではないという原則が再確認されました。
コアとなるコードの変更箇所
--- a/api/go1.txt
+++ b/api/go1.txt
@@ -5484,7 +5484,6 @@ pkg regexp/syntax, const ErrMissingBracket ErrorCode
pkg regexp/syntax, const ErrMissingParen ErrorCode
pkg regexp/syntax, const ErrMissingRepeatArgument ErrorCode
pkg regexp/syntax, const ErrTrailingBackslash ErrorCode
-pkg regexp/syntax, const ErrUnexpectedParen ErrorCode
pkg regexp/syntax, const FoldCase Flags
pkg regexp/syntax, const InstAlt InstOp
pkg regexp/syntax, const InstAltMatch InstOp
コアとなるコードの解説
上記の差分は、api/go1.txt
ファイルから以下の1行が削除されたことを示しています。
-pkg regexp/syntax, const ErrUnexpectedParen ErrorCode
この行は、regexp/syntax
パッケージに ErrUnexpectedParen ErrorCode
という定数が存在することを go1.txt
に記録していました。この削除は、前述の通り、go1.txt
が一度確定したGo 1のAPIの定義であり、後から変更を加えるべきではないというポリシーに基づいています。つまり、このエラーコードがGo 1のリリース時に公式APIの一部として含まれていなかったため、誤って追加されたものを元に戻した、ということを意味します。
関連リンク
- GitHubコミットページ: https://github.com/golang/go/commit/a2004546a9ec3b4c9e60fb916a5ecd94f81f718e
- Gerrit Change-ID: https://golang.org/cl/6206080
参考にした情報源リンク
- h-da.de - Go 1 Compatibility Promise
- github.com - go1.txt discussion
- go.dev - Go 1 and the Future of Go Programs
- googlesource.com - go1.txt
- gemfury.com - What is go1.txt
- coursera.org - What is Golang?
- wikipedia.org - Go (programming language)
- pluralsight.com - What is Go?
- bairesdev.com - What is Golang used for?
- trio.dev - What is Golang?