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

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

このコミットは、Go言語プロジェクトのビルドスクリプトである src/run.rc から、goplay というユーティリティのビルドステップを削除するものです。これにより、Plan 9オペレーティングシステム上でのGoのビルドプロセスにおける問題が修正されます。

コミット

commit 9717e3605bffb3b5173416dac3602bab3f434107
Author: Shenghou Ma <minux@golang.org>
Date:   Sun Jun 1 19:20:46 2014 -0400

    build: don't build goplay in run.rc.
    Fix plan 9 build.
    
    TBR=rsc
    R=golang-codereviews
    CC=golang-codereviews
    https://golang.org/cl/100880047

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

https://github.com/golang/go/commit/9717e3605bffb3b5173416dac3602bab3f434107

元コミット内容

---
 src/run.rc | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/src/run.rc b/src/run.rc
index 2613621556..65e2c07e5e 100755
--- a/src/run.rc
+++ b/src/run.rc
@@ -48,10 +48,6 @@ fn xcd {
 	cd $"GOROOT/src/$1
 }
 
-echo
-echo '#' ../misc/goplay
-go build ../misc/goplay
-
 echo
 echo '#' ../test/bench/go1
 go test ../test/bench/go1

変更の背景

Go言語プロジェクトのビルドプロセスは、様々なオペレーティングシステムとアーキテクチャをサポートするように設計されています。src/run.rc は、特にPlan 9環境でのGoのビルド、テスト、ベンチマークの実行を自動化するための重要なスクリプトです。

このコミットが行われる以前は、run.rc スクリプト内で ../misc/goplay というGoプログラムもビルドされていました。しかし、この goplay のビルドステップが、Plan 9環境でのGoの全体的なビルドプロセスに問題を引き起こしていました。コミットメッセージの「Fix plan 9 build」という記述から、goplay のビルドがPlan 9特有の環境制約(例えば、特定のシステムコール、ライブラリの欠如、アーキテクチャ固有の互換性の問題など)により失敗するか、あるいはビルドプロセス全体を不安定にしていたことが示唆されます。

この問題を解決し、Plan 9上でのGoのビルドを安定させるために、goplay のビルドステップを run.rc から削除するという決定がなされました。これにより、GoのコアビルドプロセスがPlan 9でより堅牢に実行されるようになります。

前提知識の解説

Go言語のビルドシステムとブートストラップ

Go言語は、そのコンパイラ自体がGo言語で書かれているという特徴を持っています。このため、新しいバージョンのGoをビルドするには、既に動作するGoコンパイラ(通常は以前のバージョンのGo)が必要となります。このプロセスは「ブートストラップ (bootstrap)」と呼ばれます。Goプロジェクトのビルドスクリプトは、このブートストラッププロセスを管理し、様々なプラットフォームでGoをコンパイルできるように設計されています。

Plan 9 from Bell Labs

Plan 9 from Bell Labs は、ベル研究所で開発された分散オペレーティングシステムです。Go言語の設計者であるロブ・パイク (Rob Pike) やケン・トンプソン (Ken Thompson) などは、Plan 9の開発にも深く関わっていました。この歴史的背景から、Go言語は初期からPlan 9への移植をサポートしており、Goのツールチェインやアセンブラの構文にはPlan 9の影響が見られます。Plan 9環境でのGoのビルドは、他の一般的なOS(Linux, macOS, Windowsなど)とは異なる、特定のシステムコールやファイルシステム、ビルド環境の要件を持つことがあります。

src/run.rc

src/run.rc は、Go言語のソースコードリポジトリのルートディレクトリにあるシェルスクリプトです。このファイルは、特にPlan 9オペレーティングシステム上でGoのビルド、テスト、ベンチマークを実行するために使用されます。.rc というファイル拡張子は、Plan 9のシェルスクリプトで一般的に使用される慣習です。このスクリプトは、Goのソースコードをコンパイルし、テストを実行し、Goプロジェクト内の様々なユーティリティやツールをビルドする一連のコマンドを自動化します。

goplay

goplay は、Go言語プロジェクトの misc ディレクトリに存在した(または存在する)ユーティリティまたはサンプルプログラムであると推測されます。コミットの文脈から、これはGoのコードを実行したり、テストしたりするような、何らかのGo関連のツールであった可能性が高いです。これは、Go言語の公式ウェブサイトで提供されているオンラインの「Go Playground」とは異なり、Goのソースツリー内に含まれるローカルで動作するツールであったと考えられます。このコミットでは、その具体的な機能よりも、Plan 9環境でのビルドにおける互換性の問題が焦点となっています。

技術的詳細

このコミットの技術的な核心は、src/run.rc スクリプトから go build ../misc/goplay というコマンドを削除することにあります。この変更がもたらす影響は以下の通りです。

  1. Plan 9ビルドの安定化: goplay のビルドがPlan 9環境で失敗していた、あるいはビルドプロセス全体を不安定にしていた根本的な原因は、コミットメッセージからは明確ではありません。しかし、一般的に、異なるOS環境では、特定のライブラリの可用性、システムコールの実装、コンパイラの挙動、またはアーキテクチャ固有の制約が異なります。goplay がこれらのいずれかの理由でPlan 9と互換性がなかった可能性が高いです。ビルドステップを削除することで、これらの互換性問題を回避し、Plan 9上でのGoのコアビルドが正常に完了するようになります。

  2. ビルド時間の短縮: goplay のビルドが不要になることで、run.rc スクリプトの実行時間がわずかに短縮される可能性があります。これは特に、リソースが限られているPlan 9のような環境では有益です。

  3. goplay の独立性: この変更は、goplay 自体の機能や、他のOS環境での goplay のビルドには影響を与えません。goplay は引き続きGoプロジェクトの misc ディレクトリに存在し、必要であれば手動でビルドすることが可能です。このコミットは、run.rc という特定のビルドスクリプトがPlan 9環境で goplay を自動的にビルドしようとしないようにするだけです。

この修正は、Go言語が多様なプラットフォームをサポートする上で、各プラットフォーム固有のビルド要件や互換性問題を細かく調整していく開発プロセスの典型的な例と言えます。

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

変更は src/run.rc ファイルに対して行われました。具体的には、以下の4行が削除されています。

--- a/src/run.rc
+++ b/src/run.rc
@@ -48,10 +48,6 @@ fn xcd {
 	cd $"GOROOT/src/$1
 }
 
-echo
-echo '#' ../misc/goplay
-go build ../misc/goplay
-
 echo
 echo '#' ../test/bench/go1
 go test ../test/bench/go1

コアとなるコードの解説

削除されたコードブロックは、src/run.rc スクリプトが実行される際に ../misc/goplay をビルドするための指示でした。

  • echo および echo '#' ../misc/goplay: これらの行は、スクリプトの実行中にコンソールにメッセージを出力するためのものです。goplay のビルドが開始されることをユーザーに知らせる役割がありました。
  • go build ../misc/goplay: このコマンドが goplay のビルドを実行する主要な命令でした。go build はGoの標準的なビルドツールであり、指定されたパス(この場合は ../misc/goplay)にあるGoのソースコードをコンパイルし、実行可能ファイルを生成します。

これらの行が run.rc から削除されたことで、Plan 9環境でこのスクリプトが実行されても、goplay は自動的にビルドされなくなりました。これにより、goplay のビルドに起因するPlan 9でのビルド問題が解消されます。

関連リンク

  • Go言語公式サイト: https://go.dev/
  • Plan 9 from Bell Labs: https://9p.io/plan9/
  • Go on Plan 9 (Go Wiki): Go言語のPlan 9サポートに関する詳細な情報がGo Wikiに存在する可能性がありますが、特定のURLは提供されていません。一般的には、Goの公式ドキュメントやコミュニティフォーラムで関連情報を見つけることができます。

参考にした情報源リンク

  • Google検索: "Go goplay"
  • Google検索: "Go Plan 9 build"
  • Google検索: "Go run.rc"
  • Go言語の公式ドキュメントおよびソースコードの一般的な知識
  • Plan 9オペレーティングシステムに関する一般的な知識