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

[インデックス 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バージョンが出荷されると「凍結」され、その後の変更は原則として行われません。

このコミットの背景には、以前のコミット 27d0a516b7ebapi/go1.txtpkg 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.txtErrUnexpectedParen 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の一部として含まれていなかったため、誤って追加されたものを元に戻した、ということを意味します。

関連リンク

参考にした情報源リンク