[インデックス 11498] ファイルの概要
このコミットは、Go言語のビルドスクリプトにおける修正を目的としています。具体的には、cmd/go
コマンドのコンパイル時に使用されるソースファイルリストから root.go
ファイルを削除することで、ビルドプロセスを修正しています。この変更は、Go言語の様々なプラットフォーム(Darwin, FreeBSD, Linux, NetBSD, OpenBSD, Plan 9, Windows)およびアーキテクチャ(386, amd64, arm)向けのビルドスクリプトに一貫して適用されています。
コミット
commit 5e72f3ca0b55c3b23e1060d8610d356bd988eac0
Author: Russ Cox <rsc@golang.org>
Date: Mon Jan 30 23:48:57 2012 -0500
build: fix buildscripts
TBR=golang-dev
CC=golang-dev
https://golang.org/cl/5600054
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/5e72f3ca0b55c3b23e1060d8610d356bd988eac0
元コミット内容
このコミットは、Go言語のビルドシステムにおけるスクリプトの修正を意図しています。コミットメッセージ「build: fix buildscripts」が示す通り、ビルド関連の不具合を解消するための変更です。具体的には、go
コマンド自体をビルドする際に使用されるソースファイル群から root.go
というファイルが削除されています。これは、root.go
がもはや go
コマンドのビルドに必要なくなったか、あるいはその機能が他のファイルに統合されたことを示唆しています。
変更の背景
この変更の背景には、Go言語の cmd/go
コマンドの内部構造の進化があります。root.go
ファイルは、かつて go
コマンドの初期化やルートコマンドの処理に関連するコードを含んでいた可能性があります。しかし、時間の経過とともにコードのリファクタリングや機能の再編成が行われ、root.go
が独立したファイルとして存在する必要がなくなった、あるいはその内容が他のより適切な場所に移動されたと考えられます。
ビルドスクリプトは、特定のソースファイルをコンパイルして実行可能ファイルを生成するための指示を含んでいます。もし root.go
がもはや存在しないか、コンパイル対象として不要になった場合、ビルドスクリプトが古い参照を含んでいると、ビルドエラーが発生したり、不必要な依存関係が残ったりする可能性があります。このコミットは、そのようなビルドの不整合を解消し、ビルドプロセスを最新のコードベースに適合させることを目的としています。
前提知識の解説
このコミットを理解するためには、以下のGo言語のビルドシステムに関する前提知識が必要です。
- Go言語のビルドプロセス: Go言語のプログラムは、
go build
コマンドによってソースコードから直接コンパイルされ、実行可能なバイナリが生成されます。このプロセスには、コンパイラ(gc
、旧称8g
/6g
/5g
など)、アセンブラ、リンカなどが関与します。 GOROOT
とGOBIN
:GOROOT
: Go言語のインストールディレクトリを指す環境変数です。Goの標準ライブラリやツールチェーンがここに配置されます。GOBIN
:go install
などでビルドされたコマンドがインストールされるディレクトリを指す環境変数です。
cmd/go
: これはGo言語のツールチェーンの中核をなすgo
コマンド自体(go build
,go run
,go get
などを実行するコマンド)のソースコードが格納されているディレクトリです。- Goツールチェーンのコンパイラとリンカ:
8g
,6g
,5g
: これらはGo言語の初期のコンパイラ名です。8g
はx86 (386) アーキテクチャ向け、6g
はx86-64 (amd64) アーキテクチャ向け、5g
はARMアーキテクチャ向けのコンパイラでした。現在ではこれらはgo tool compile
に統合されています。8l
,6l
,5l
: これらはGo言語の初期のリンカ名です。コンパイラと同様に、それぞれ特定のアーキテクチャに対応していました。現在ではgo tool link
に統合されています。pack
: アーカイブファイルを操作するためのツールで、コンパイルされたオブジェクトファイルをまとめてライブラリを作成する際に使用されます。
- ビルドスクリプト (
.sh
ファイル): Go言語の初期のビルドシステムでは、様々なプラットフォームやアーキテクチャ向けにシェルスクリプト(.sh
ファイル)が使用されていました。これらのスクリプトは、Goのソースコードをコンパイルし、ツールチェーンを構築するための具体的なコマンドシーケンスを含んでいました。 - クロスコンパイル: Go言語は、あるプラットフォーム(例: Linux)で別のプラットフォーム(例: Windows)向けのバイナリを生成するクロスコンパイルを強力にサポートしています。このコミットで変更されている各プラットフォーム・アーキテクチャごとのビルドスクリプトは、このクロスコンパイルの仕組みの一部を構成していました。
技術的詳細
このコミットの技術的な核心は、Go言語のビルドスクリプトが cmd/go
のコンパイル時に渡すソースファイルリストから root.go
を削除した点にあります。
変更前は、各ビルドスクリプト内で cmd/go
をコンパイルするコマンド(例: "$GOROOT"/bin/go-tool/8g ... ./root.go ...
)に root.go
が含まれていました。変更後は、この root.go
がリストから削除されています。
これは、cmd/go
のソースコードから root.go
が削除されたか、あるいはその内容が他のファイル(例えば main.go
や cmd.go
など)に統合されたことを意味します。Go言語のプロジェクトでは、コードベースの整理やリファクタリングが頻繁に行われます。この変更は、そのような内部的なコード構造の変更にビルドシステムが追従した結果です。
もし root.go
が削除されたにもかかわらずビルドスクリプトがそれを参照し続けていた場合、コンパイラは存在しないファイルを見つけようとしてエラーを報告するか、あるいは古いバージョンの root.go
がキャッシュなどに残っている場合は意図しない動作を引き起こす可能性がありました。この修正により、ビルドの整合性が保たれ、go
コマンドが正しくビルドされるようになります。
影響を受けるファイルは、src/buildscript/
ディレクトリ内の以下のシェルスクリプトです。これらはGo言語がサポートする主要なOSとアーキテクチャの組み合わせに対応しています。
darwin_386.sh
(macOS, 32-bit Intel)darwin_amd64.sh
(macOS, 64-bit Intel)freebsd_386.sh
(FreeBSD, 32-bit Intel)freebsd_amd64.sh
(FreeBSD, 64-bit Intel)linux_386.sh
(Linux, 32-bit Intel)linux_amd64.sh
(Linux, 64-bit Intel)linux_arm.sh
(Linux, ARM)netbsd_386.sh
(NetBSD, 32-bit Intel)netbsd_amd64.sh
(NetBSD, 64-bit Intel)openbsd_386.sh
(OpenBSD, 32-bit Intel)openbsd_amd64.sh
(OpenBSD, 64-bit Intel)plan9_386.sh
(Plan 9, 32-bit Intel)windows_386.sh
(Windows, 32-bit Intel)windows_amd64.sh
(Windows, 64-bit Intel)
これらのスクリプトはすべて、cmd/go
のコンパイルステップで root.go
を削除するという同じ変更を受けています。
コアとなるコードの変更箇所
以下は、src/buildscript/darwin_386.sh
における変更の抜粋ですが、他のすべてのビルドスクリプトでも同様の変更が行われています。
--- a/src/buildscript/darwin_386.sh
+++ b/src/buildscript/darwin_386.sh
@@ -491,7 +491,7 @@ cp "$WORK"/text/template.a "$GOROOT"/pkg/darwin_386/text/template.a
mkdir -p "$WORK"/cmd/go/_obj/
cd "$GOROOT"/src/cmd/go
-"$GOROOT"/bin/go-tool/8g -o "$WORK"/cmd/go/_obj/_go_.8 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./clean.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./root.go ./run.go ./test.go ./testflag.go ./tool.go ./vcs.go ./version.go ./vet.go
+"$GOROOT"/bin/go-tool/8g -o "$WORK"/cmd/go/_obj/_go_.8 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./clean.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./run.go ./test.go ./testflag.go ./tool.go ./vcs.go ./version.go ./vet.go
"$GOROOT"/bin/go-tool/pack grc "$WORK"/cmd/go.a "$WORK"/cmd/go/_obj/_go_.8
"$GOROOT"/bin/go-tool/8l -o "$WORK"/cmd/go/_obj/a.out -L "$WORK" "$WORK"/cmd/go.a
mkdir -p "$GOBIN"/darwin_386/
コアとなるコードの解説
変更された行は、cmd/go
パッケージのソースファイルをコンパイルするためのコマンドです。
変更前:
"$GOROOT"/bin/go-tool/8g -o "$WORK"/cmd/go/_obj/_go_.8 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./clean.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./root.go ./run.go ./test.go ./testflag.go ./tool.go ./vcs.go ./version.go ./vet.go
変更後:
"$GOROOT"/bin/go-tool/8g -o "$WORK"/cmd/go/_obj/_go_.8 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./clean.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./run.go ./test.go ./testflag.go ./tool.go ./vcs.go ./version.go ./vet.go
このコマンドは、Goのコンパイラ(この例では 8g
)を呼び出し、cmd/go
パッケージをコンパイルしています。
-o "$WORK"/cmd/go/_obj/_go_.8
: コンパイルされたオブジェクトファイルの出力パスを指定します。-p cmd/go
: コンパイル対象のパッケージパスを指定します。-I "$WORK"
: インポートパスを指定します。- その後に続く
./bootstrap.go ... ./vet.go
は、cmd/go
パッケージを構成するすべてのGoソースファイルのリストです。
この変更の核心は、このソースファイルリストから ./root.go
が削除されたことです。これは、root.go
が cmd/go
のビルドにおいて不要になったことを明確に示しています。これにより、ビルドプロセスが簡素化され、不要なファイルへの依存が解消されます。
関連リンク
- GitHub上のコミットページ: https://github.com/golang/go/commit/5e72f3ca0b55c3b23e1060d8610d356bd988eac0
- Go Change List (CL): https://golang.org/cl/5600054
参考にした情報源リンク
- Go言語の公式ドキュメント (Goのビルドプロセス、環境変数など): https://go.dev/doc/
- Go言語のソースコードリポジトリ (特に
src/cmd/go
およびsrc/buildscript
ディレクトリの歴史): https://github.com/golang/go - Go言語の初期のツールチェーンに関する情報 (コンパイラ名
8g
,6g
,5g
など): 関連するGoのブログ記事や古いドキュメント。- (Web検索で得られた情報に基づく)
- "Go 1.0 Release Notes" (Go 1.0のリリースノートは、当時のツールチェーンの構成を理解する上で役立つ可能性があります。)
- "A Tour of Go's Tooling" (Goのツールに関する一般的な情報源)
- "Go's build system" (Goのビルドシステムに関する議論やドキュメント)
- (Web検索で得られた情報に基づく)
- Go言語のコミット履歴 (特に
cmd/go/root.go
の削除または変更に関するコミット): https://github.com/golang/go/commits/master- (Web検索で
golang go cmd/go root.go removed
などのキーワードで検索し、関連するコミットや議論を探しました。)- 具体的なURLは特定できませんでしたが、Goのコードベースのリファクタリングは継続的に行われており、特定のファイルの削除や統合は一般的な変更パターンです。# [インデックス 11498] ファイルの概要
- (Web検索で
このコミットは、Go言語のビルドスクリプトにおける修正を目的としています。具体的には、cmd/go
コマンドのコンパイル時に使用されるソースファイルリストから root.go
ファイルを削除することで、ビルドプロセスを修正しています。この変更は、Go言語の様々なプラットフォーム(Darwin, FreeBSD, Linux, NetBSD, OpenBSD, Plan 9, Windows)およびアーキテクチャ(386, amd64, arm)向けのビルドスクリプトに一貫して適用されています。
コミット
commit 5e72f3ca0b55c3b23e1060d8610d356bd988eac0
Author: Russ Cox <rsc@golang.org>
Date: Mon Jan 30 23:48:57 2012 -0500
build: fix buildscripts
TBR=golang-dev
CC=golang-dev
https://golang.org/cl/5600054
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/5e72f3ca0b55c3b23e1060d8610d356bd988eac0
元コミット内容
このコミットは、Go言語のビルドシステムにおけるスクリプトの修正を意図しています。コミットメッセージ「build: fix buildscripts」が示す通り、ビルド関連の不具合を解消するための変更です。具体的には、go
コマンド自体をビルドする際に使用されるソースファイル群から root.go
というファイルが削除されています。これは、root.go
がもはや go
コマンドのビルドに必要なくなったか、あるいはその機能が他のファイルに統合されたことを示唆しています。
変更の背景
この変更の背景には、Go言語の cmd/go
コマンドの内部構造の進化があります。root.go
ファイルは、かつて go
コマンドの初期化やルートコマンドの処理に関連するコードを含んでいた可能性があります。しかし、時間の経過とともにコードのリファクタリングや機能の再編成が行われ、root.go
が独立したファイルとして存在する必要がなくなった、あるいはその内容が他のより適切な場所に移動されたと考えられます。
ビルドスクリプトは、特定のソースファイルをコンパイルして実行可能ファイルを生成するための指示を含んでいます。もし root.go
がもはや存在しないか、コンパイル対象として不要になった場合、ビルドスクリプトが古い参照を含んでいると、ビルドエラーが発生したり、不必要な依存関係が残ったりする可能性があります。このコミットは、そのようなビルドの不整合を解消し、ビルドプロセスを最新のコードベースに適合させることを目的としています。
前提知識の解説
このコミットを理解するためには、以下のGo言語のビルドシステムに関する前提知識が必要です。
- Go言語のビルドプロセス: Go言語のプログラムは、
go build
コマンドによってソースコードから直接コンパイルされ、実行可能なバイナリが生成されます。このプロセスには、コンパイラ(gc
、旧称8g
/6g
/5g
など)、アセンブラ、リンカなどが関与します。 GOROOT
とGOBIN
:GOROOT
: Go言語のインストールディレクトリを指す環境変数です。Goの標準ライブラリやツールチェーンがここに配置されます。GOBIN
:go install
などでビルドされたコマンドがインストールされるディレクトリを指す環境変数です。
cmd/go
: これはGo言語のツールチェーンの中核をなすgo
コマンド自体(go build
,go run
,go get
などを実行するコマンド)のソースコードが格納されているディレクトリです。- Goツールチェーンのコンパイラとリンカ:
8g
,6g
,5g
: これらはGo言語の初期のコンパイラ名です。8g
はx86 (386) アーキテクチャ向け、6g
はx86-64 (amd64) アーキテクチャ向け、5g
はARMアーキテクチャ向けのコンパイラでした。現在ではこれらはgo tool compile
に統合されています。8l
,6l
,5l
: これらはGo言語の初期のリンカ名です。コンパイラと同様に、それぞれ特定のアーキテクチャに対応していました。現在ではgo tool link
に統合されています。pack
: アーカイブファイルを操作するためのツールで、コンパイルされたオブジェクトファイルをまとめてライブラリを作成する際に使用されます。
- ビルドスクリプト (
.sh
ファイル): Go言語の初期のビルドシステムでは、様々なプラットフォームやアーキテクチャ向けにシェルスクリプト(.sh
ファイル)が使用されていました。これらのスクリプトは、Goのソースコードをコンパイルし、ツールチェーンを構築するための具体的なコマンドシーケンスを含んでいました。 - クロスコンパイル: Go言語は、あるプラットフォーム(例: Linux)で別のプラットフォーム(例: Windows)向けのバイナリを生成するクロスコンパイルを強力にサポートしています。このコミットで変更されている各プラットフォーム・アーキテクチャごとのビルドスクリプトは、このクロスコンパイルの仕組みの一部を構成していました。
技術的詳細
このコミットの技術的な核心は、Go言語のビルドスクリプトが cmd/go
のコンパイル時に渡すソースファイルリストから root.go
を削除した点にあります。
変更前は、各ビルドスクリプト内で cmd/go
をコンパイルするコマンド(例: "$GOROOT"/bin/go-tool/8g ... ./root.go ...
)に root.go
が含まれていました。変更後は、この root.go
がリストから削除されています。
これは、cmd/go
のソースコードから root.go
が削除されたか、あるいはその内容が他のファイル(例えば main.go
や cmd.go
など)に統合されたことを意味します。Go言語のプロジェクトでは、コードベースの整理やリファクタリングが頻繁に行われます。この変更は、そのような内部的なコード構造の変更にビルドシステムが追従した結果です。
もし root.go
が削除されたにもかかわらずビルドスクリプトがそれを参照し続けていた場合、コンパイラは存在しないファイルを見つけようとしてエラーを報告するか、あるいは古いバージョンの root.go
がキャッシュなどに残っている場合は意図しない動作を引き起こす可能性がありました。この修正により、ビルドの整合性が保たれ、go
コマンドが正しくビルドされるようになります。
影響を受けるファイルは、src/buildscript/
ディレクトリ内の以下のシェルスクリプトです。これらはGo言語がサポートする主要なOSとアーキテクチャの組み合わせに対応しています。
darwin_386.sh
(macOS, 32-bit Intel)darwin_amd64.sh
(macOS, 64-bit Intel)freebsd_386.sh
(FreeBSD, 32-bit Intel)freebsd_amd64.sh
(FreeBSD, 64-bit Intel)linux_386.sh
(Linux, 32-bit Intel)linux_amd64.sh
(Linux, 64-bit Intel)linux_arm.sh
(Linux, ARM)netbsd_386.sh
(NetBSD, 32-bit Intel)netbsd_amd64.sh
(NetBSD, 64-bit Intel)openbsd_386.sh
(OpenBSD, 32-bit Intel)openbsd_amd64.sh
(OpenBSD, 64-bit Intel)plan9_386.sh
(Plan 9, 32-bit Intel)windows_386.sh
(Windows, 32-bit Intel)windows_amd64.sh
(Windows, 64-bit Intel)
これらのスクリプトはすべて、cmd/go
のコンパイルステップで root.go
を削除するという同じ変更を受けています。
コアとなるコードの変更箇所
以下は、src/buildscript/darwin_386.sh
における変更の抜粋ですが、他のすべてのビルドスクリプトでも同様の変更が行われています。
--- a/src/buildscript/darwin_386.sh
+++ b/src/buildscript/darwin_386.sh
@@ -491,7 +491,7 @@ cp "$WORK"/text/template.a "$GOROOT"/pkg/darwin_386/text/template.a
mkdir -p "$WORK"/cmd/go/_obj/
cd "$GOROOT"/src/cmd/go
-"$GOROOT"/bin/go-tool/8g -o "$WORK"/cmd/go/_obj/_go_.8 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./clean.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./root.go ./run.go ./test.go ./testflag.go ./tool.go ./vcs.go ./version.go ./vet.go
+"$GOROOT"/bin/go-tool/8g -o "$WORK"/cmd/go/_obj/_go_.8 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./clean.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./run.go ./test.go ./testflag.go ./tool.go ./vcs.go ./version.go ./vet.go
"$GOROOT"/bin/go-tool/pack grc "$WORK"/cmd/go.a "$WORK"/cmd/go/_obj/_go_.8
"$GOROOT"/bin/go-tool/8l -o "$WORK"/cmd/go/_obj/a.out -L "$WORK" "$WORK"/cmd/go.a
mkdir -p "$GOBIN"/darwin_386/
コアとなるコードの解説
変更された行は、cmd/go
パッケージのソースファイルをコンパイルするためのコマンドです。
変更前:
"$GOROOT"/bin/go-tool/8g -o "$WORK"/cmd/go/_obj/_go_.8 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./clean.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./root.go ./run.go ./test.go ./testflag.go ./tool.go ./vcs.go ./version.go ./vet.go
変更後:
"$GOROOT"/bin/go-tool/8g -o "$WORK"/cmd/go/_obj/_go_.8 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./clean.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./run.go ./test.go ./testflag.go ./tool.go ./vcs.go ./version.go ./vet.go
このコマンドは、Goのコンパイラ(この例では 8g
)を呼び出し、cmd/go
パッケージをコンパイルしています。
-o "$WORK"/cmd/go/_obj/_go_.8
: コンパイルされたオブジェクトファイルの出力パスを指定します。-p cmd/go
: コンパイル対象のパッケージパスを指定します。-I "$WORK"
: インポートパスを指定します。- その後に続く
./bootstrap.go ... ./vet.go
は、cmd/go
パッケージを構成するすべてのGoソースファイルのリストです。
この変更の核心は、このソースファイルリストから ./root.go
が削除されたことです。これは、root.go
が cmd/go
のビルドにおいて不要になったことを明確に示しています。これにより、ビルドプロセスが簡素化され、不要なファイルへの依存が解消されます。
関連リンク
- GitHub上のコミットページ: https://github.com/golang/go/commit/5e72f3ca0b55c3b23e1060d8610d356bd988eac0
- Go Change List (CL): https://golang.org/cl/5600054
参考にした情報源リンク
- Go言語の公式ドキュメント (Goのビルドプロセス、環境変数など): https://go.dev/doc/
- Go言語のソースコードリポジトリ (特に
src/cmd/go
およびsrc/buildscript
ディレクトリの歴史): https://github.com/golang/go - Go言語の初期のツールチェーンに関する情報 (コンパイラ名
8g
,6g
,5g
など): 関連するGoのブログ記事や古いドキュメント。- (Web検索で得られた情報に基づく)
- "Go 1.0 Release Notes" (Go 1.0のリリースノートは、当時のツールチェーンの構成を理解する上で役立つ可能性があります。)
- "A Tour of Go's Tooling" (Goのツールに関する一般的な情報源)
- "Go's build system" (Goのビルドシステムに関する議論やドキュメント)
- (Web検索で得られた情報に基づく)
- Go言語のコミット履歴 (特に
cmd/go/root.go
の削除または変更に関するコミット): https://github.com/golang/go/commits/master- (Web検索で
golang go cmd/go root.go removed
などのキーワードで検索し、関連するコミットや議論を探しました。)- 具体的なURLは特定できませんでしたが、Goのコードベースのリファクタリングは継続的に行われており、特定のファイルの削除や統合は一般的な変更パターンです。
- (Web検索で