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

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

このコミットは、Go言語のビルドシステムにおける変更を記録しています。具体的には、zdefaultcc.goという新しいタイプのファイルがビルドプロセスで無視されるように.hgignoreファイルが更新され、run.bashスクリプトにおいて一時的なgoplayバイナリが削除されるようになりました。

コミット

commit 74d2e096db77a055c8bec035ae7c024ff635adea
Author: Brad Fitzpatrick <bradfitz@golang.org>
Date:   Fri Aug 2 19:14:13 2013 -0700

    build: ignore new zfiles, delete temp goplay binary in run.bash
    
    R=golang-dev, rsc
    CC=golang-dev
    https://golang.org/cl/12320045

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

https://github.com/golang/go/commit/74d2e096db77a055c8bec035ae7c024ff635adea

元コミット内容

build: ignore new zfiles, delete temp goplay binary in run.bash

このコミットは、新しいzfilesを無視し、run.bashスクリプト内で一時的なgoplayバイナリを削除するビルド関連の変更です。

変更の背景

このコミットは、Go言語のビルドシステムにおけるクリーンアップと効率化を目的としています。

  1. zfilesの無視: zfiles、特にzdefaultcc.goのようなファイルは、Goのツールチェーンが内部的に生成するファイルであり、特定のコンパイラや環境設定に依存するコードを含んでいます。これらのファイルはビルド時に動的に生成されるため、バージョン管理システム(この場合はMercurialの.hgignore)で追跡する必要はありません。むしろ、誤ってコミットされたり、異なる環境でのビルド時に問題を引き起こしたりするのを防ぐために無視されるべきです。この変更は、ビルドプロセスの堅牢性を高め、不要なファイルの追跡を防ぐことを目的としています。

  2. goplayバイナリの削除: run.bashスクリプトは、Goプロジェクトのテストやベンチマークを実行するためのスクリプトです。goplayはGoのコードスニペットを実行するためのユーティリティであり、このスクリプト内で一時的にビルドされて使用されることがあります。以前のバージョンでは、この一時的なバイナリがビルド後に残ってしまう可能性がありました。これは、ディスクスペースの無駄遣いや、後のビルドプロセスでの予期せぬ動作の原因となる可能性があります。このコミットは、ビルドプロセスが完了した後に一時ファイルをクリーンアップすることで、ビルド環境の整合性を保ち、不要なアーティファクトを残さないようにすることを目的としています。

これらの変更は、Goプロジェクトのビルドと開発ワークフローをよりスムーズにし、クリーンな状態を維持するための一般的なメンテナンスの一環として行われました。

前提知識の解説

1. Go言語のビルドシステム

Go言語は、独自のビルドシステムを持っています。go buildコマンドは、ソースコードをコンパイルして実行可能なバイナリを生成します。このプロセスでは、依存関係の解決、コンパイル、リンクなどが行われます。Goのビルドシステムは、クロスコンパイルを容易にするなど、開発者が効率的に作業できるように設計されています。

2. .hgignoreファイル

.hgignoreは、Mercurial(Hg)という分散型バージョン管理システムで使用される設定ファイルです。Gitにおける.gitignoreファイルと同様に、バージョン管理システムが特定のファイルやディレクトリを追跡しないように指示するために使用されます。ビルドによって生成される一時ファイル、ログファイル、ユーザー固有の設定ファイルなど、リポジトリに含めるべきではないファイルを指定するのに役立ちます。これにより、リポジトリがクリーンに保たれ、不要な変更がコミットされるのを防ぎます。

3. zdefaultcc.goファイル

zdefaultcc.goは、Goのツールチェーンが内部的に生成するファイルの一つです。これは、GoのコンパイラやツールがC言語のコンパイラ(cc)を呼び出す際に使用するデフォルトのCコンパイラに関する情報を含んでいます。GoはCgo(GoとCの相互運用機能)をサポートしており、Cgoを使用するGoプログラムをビルドする際には、Cコンパイラが必要になります。zdefaultcc.goは、ビルド環境に応じて適切なCコンパイラが選択されるように、Goツールチェーンが動的に生成するファイルであり、通常はソースコードリポジトリに含めるべきではありません。

4. goplayユーティリティ

goplayは、Go言語のソースコードスニペットを簡単に実行するためのユーティリティです。Goの公式リポジトリのmisc/goplayディレクトリに存在します。これは、Goのコードをテストしたり、簡単なスクリプトを実行したりする際に便利です。run.bashのようなビルドスクリプト内で、特定のテストや検証のために一時的にビルドされ、使用されることがあります。

5. run.bashスクリプト

run.bashは、Goプロジェクトのルートディレクトリにあるシェルスクリプトで、Goのテストスイートやベンチマークを実行するために使用されます。これは、Goのビルドプロセスの一部として、または開発者が手動でテストを実行する際に利用されます。このスクリプトは、Goのソースコードをビルドし、テストを実行し、必要に応じて一時ファイルをクリーンアップするなどのタスクを自動化します。

技術的詳細

このコミットは、Go言語のビルドシステムにおける2つの独立した、しかし関連する改善を導入しています。

1. .hgignoreの更新によるzfilesの無視

Goのビルドプロセスでは、特定の環境や設定に基づいてコードが生成されることがあります。zdefaultcc.goはその典型例で、Cgoを使用する際にGoツールチェーンがデフォルトのCコンパイラに関する情報を埋め込むために生成します。これらのファイルは、ビルド環境に依存するため、バージョン管理システムで追跡すべきではありません。

このコミットでは、.hgignoreファイルに以下の2行が追加されました。

+src/cmd/cgo/zdefaultcc.go
+src/cmd/go/zdefaultcc.go

これにより、Mercurialはsrc/cmd/cgo/zdefaultcc.gosrc/cmd/go/zdefaultcc.goというパスに存在するファイルを無視するようになります。これは、これらのファイルがビルド時に動的に生成されるものであり、リポジトリのクリーンさを保つためにバージョン管理の対象外とすべきであるという認識に基づいています。これにより、開発者が誤ってこれらのファイルをコミットしてしまうことを防ぎ、異なるビルド環境間での不整合を回避できます。

2. run.bashにおける一時goplayバイナリの削除

run.bashスクリプトは、Goのテストやベンチマークを実行する際に、misc/goplayユーティリティを一時的にビルドして使用します。以前のスクリプトでは、このビルドされたgoplayバイナリがテスト実行後に残ってしまう可能性がありました。

このコミットでは、src/run.bashスクリプトに以下の行が追加されました。

go build ../misc/goplay
+rm -f goplay

go build ../misc/goplayコマンドは、misc/goplayのソースコードから実行可能なgoplayバイナリをカレントディレクトリ(通常はsrcディレクトリ)に生成します。追加されたrm -f goplayコマンドは、この一時的に生成されたgoplayバイナリを、その使用が完了した直後に削除します。

この変更により、run.bashスクリプトの実行後に不要な一時ファイルが残ることがなくなり、ビルド環境のクリーンアップが自動化されます。これは、ディスクスペースの節約だけでなく、後のビルドやテスト実行における潜在的な競合や混乱を防ぐ上でも重要です。

これらの変更は、Goプロジェクトのビルドと開発ワークフローの堅牢性と効率性を向上させるための、細部への配慮を示しています。

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

.hgignore

--- a/.hgignore
+++ b/.hgignore
@@ -35,10 +35,12 @@ misc/osx/*.dmg
 src/cmd/?a/y.output
 src/cmd/?l/enam.c
 src/cmd/cc/y.output
+src/cmd/cgo/zdefaultcc.go
 src/cmd/dist/dist.dSYM
 src/cmd/gc/mkbuiltin1
 src/cmd/gc/opnames.h
 src/cmd/gc/y.output
+src/cmd/go/zdefaultcc.go
 src/pkg/go/doc/headscan
 src/pkg/runtime/goc2c
 src/pkg/runtime/mkversion

src/run.bash

--- a/src/run.bash
+++ b/src/run.bash
@@ -161,6 +161,7 @@ time ./run || exit 1
 echo
 echo '#' ../misc/goplay
 go build ../misc/goplay
+rm -f goplay
 
 [ "$GOARCH" == arm ] ||
 (xcd ../test/bench/shootout

コアとなるコードの解説

.hgignoreの変更

.hgignoreファイルへの追加は、Mercurialバージョン管理システムに対して、src/cmd/cgo/zdefaultcc.gosrc/cmd/go/zdefaultcc.goというパスのファイルを無視するように指示しています。これらのファイルは、Goのビルドプロセス中に動的に生成されるものであり、ソースコードの一部としてバージョン管理されるべきではありません。これにより、リポジトリのクリーンさが保たれ、異なるビルド環境間での不整合が防止されます。

src/run.bashの変更

src/run.bashスクリプトへのrm -f goplayの追加は、go build ../misc/goplayコマンドによって生成された一時的なgoplayバイナリを、その使用が完了した直後に削除することを保証します。これは、スクリプト実行後に不要なファイルが残るのを防ぎ、ビルド環境のクリーンアップを自動化するためのものです。rm -fは、ファイルが存在しない場合でもエラーを出さずに削除を試みるため、スクリプトの堅牢性が向上します。

関連リンク

参考にした情報源リンク

  • Go言語のソースコードリポジトリ (GitHub): https://github.com/golang/go
  • Mercurial .hgignoreに関するドキュメント: https://www.mercurial-scm.org/wiki/hgignore
  • Go言語のmisc/goplayに関する情報 (Goソースコード内): https://github.com/golang/go/tree/master/misc/goplay
  • Go言語のzdefaultcc.goに関する議論や情報 (GoのIssueトラッカーやメーリングリストなど、具体的なリンクはコミット当時の情報に依存するため、一般的な検索結果に基づく):
    • "Go zdefaultcc.go" で検索すると、Goのビルドプロセスにおけるこのファイルの役割に関する情報が見つかります。
    • "Go goplay" で検索すると、goplayユーティリティの機能と使用方法に関する情報が見つかります。

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

このコミットは、Go言語のビルドシステムにおける変更を記録しています。具体的には、zdefaultcc.goという新しいタイプのファイルがビルドプロセスで無視されるように.hgignoreファイルが更新され、run.bashスクリプトにおいて一時的なgoplayバイナリが削除されるようになりました。

コミット

commit 74d2e096db77a055c8bec035ae7c024ff635adea
Author: Brad Fitzpatrick <bradfitz@golang.org>
Date:   Fri Aug 2 19:14:13 2013 -0700

    build: ignore new zfiles, delete temp goplay binary in run.bash
    
    R=golang-dev, rsc
    CC=golang-dev
    https://golang.org/cl/12320045

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

https://github.com/golang/go/commit/74d2e096db77a055c8bec035ae7c024ff635adea

元コミット内容

build: ignore new zfiles, delete temp goplay binary in run.bash

このコミットは、新しいzfilesを無視し、run.bashスクリプト内で一時的なgoplayバイナリを削除するビルド関連の変更です。

変更の背景

このコミットは、Go言語のビルドシステムにおけるクリーンアップと効率化を目的としています。

  1. zfilesの無視: zfiles、特にzdefaultcc.goのようなファイルは、Goのツールチェーンが内部的に生成するファイルであり、特定のコンパイラや環境設定に依存するコードを含んでいます。これらのファイルはビルド時に動的に生成されるため、バージョン管理システム(この場合はMercurialの.hgignore)で追跡する必要はありません。むしろ、誤ってコミットされたり、異なる環境でのビルド時に問題を引き起こしたりするのを防ぐために無視されるべきです。この変更は、ビルドプロセスの堅牢性を高め、不要なファイルの追跡を防ぐことを目的としています。

  2. goplayバイナリの削除: run.bashスクリプトは、Goプロジェクトのテストやベンチマークを実行するためのスクリプトです。goplayはGoのコードスニペットを実行するためのユーティリティであり、このスクリプト内で一時的にビルドされて使用されることがあります。以前のバージョンでは、この一時的なバイナリがビルド後に残ってしまう可能性がありました。これは、ディスクスペースの無駄遣いや、後のビルドプロセスでの予期せぬ動作の原因となる可能性があります。このコミットは、ビルドプロセスが完了した後に一時ファイルをクリーンアップすることで、ビルド環境の整合性を保ち、不要なアーティファクトを残さないようにすることを目的としています。

これらの変更は、Goプロジェクトのビルドと開発ワークフローをよりスムーズにし、クリーンな状態を維持するための一般的なメンテナンスの一環として行われました。

前提知識の解説

1. Go言語のビルドシステム

Go言語は、独自のビルドシステムを持っています。go buildコマンドは、ソースコードをコンパイルして実行可能なバイナリを生成します。このプロセスでは、依存関係の解決、コンパイル、リンクなどが行われます。Goのビルドシステムは、クロスコンパイルを容易にするなど、開発者が効率的に作業できるように設計されています。

2. .hgignoreファイル

.hgignoreは、Mercurial(Hg)という分散型バージョン管理システムで使用される設定ファイルです。Gitにおける.gitignoreファイルと同様に、バージョン管理システムが特定のファイルやディレクトリを追跡しないように指示するために使用されます。ビルドによって生成される一時ファイル、ログファイル、ユーザー固有の設定ファイルなど、リポジトリに含めるべきではないファイルを指定するのに役立ちます。これにより、リポジトリがクリーンに保たれ、不要な変更がコミットされるのを防ぎます。

3. zdefaultcc.goファイル

zdefaultcc.goは、Goのツールチェーンが内部的に生成するファイルの一つです。これは、GoのコンパイラやツールがC言語のコンパイラ(cc)を呼び出す際に使用するデフォルトのCコンパイラに関する情報を含んでいます。GoはCgo(GoとCの相互運用機能)をサポートしており、Cgoを使用するGoプログラムをビルドする際には、Cコンパイラが必要になります。zdefaultcc.goは、ビルド環境に応じて適切なCコンパイラが選択されるように、Goツールチェーンが動的に生成するファイルであり、通常はソースコードリポジトリに含めるべきではありません。

4. goplayユーティリティ

goplayは、Go言語のソースコードスニペットを簡単に実行するためのユーティリティです。Goの公式リポジトリのmisc/goplayディレクトリに存在します。これは、Goのコードをテストしたり、簡単なスクリプトを実行したりする際に便利です。run.bashのようなビルドスクリプト内で、特定のテストや検証のために一時的にビルドされ、使用されることがあります。

5. run.bashスクリプト

run.bashは、Goプロジェクトのルートディレクトリにあるシェルスクリプトで、Goのテストスイートやベンチマークを実行するために使用されます。これは、Goのビルドプロセスの一部として、または開発者が手動でテストを実行する際に利用されます。このスクリプトは、Goのソースコードをビルドし、テストを実行し、必要に応じて一時ファイルをクリーンアップするなどのタスクを自動化します。

技術的詳細

このコミットは、Go言語のビルドシステムにおける2つの独立した、しかし関連する改善を導入しています。

1. .hgignoreの更新によるzfilesの無視

Goのビルドプロセスでは、特定の環境や設定に基づいてコードが生成されることがあります。zdefaultcc.goはその典型例で、Cgoを使用する際にGoツールチェーンがデフォルトのCコンパイラに関する情報を埋め込むために生成します。これらのファイルは、ビルド環境に依存するため、バージョン管理システムで追跡すべきではありません。

このコミットでは、.hgignoreファイルに以下の2行が追加されました。

+src/cmd/cgo/zdefaultcc.go
+src/cmd/go/zdefaultcc.go

これにより、Mercurialはsrc/cmd/cgo/zdefaultcc.gosrc/cmd/go/zdefaultcc.goというパスに存在するファイルを無視するようになります。これは、これらのファイルがビルド時に動的に生成されるものであり、リポジトリのクリーンさを保つためにバージョン管理の対象外とすべきであるという認識に基づいています。これにより、開発者が誤ってこれらのファイルをコミットしてしまうことを防ぎ、異なるビルド環境間での不整合を回避できます。

2. run.bashにおける一時goplayバイナリの削除

run.bashスクリプトは、Goのテストやベンチマークを実行する際に、misc/goplayユーティリティを一時的にビルドして使用します。以前のスクリプトでは、このビルドされたgoplayバイナリがテスト実行後に残ってしまう可能性がありました。

このコミットでは、src/run.bashスクリプトに以下の行が追加されました。

go build ../misc/goplay
+rm -f goplay

go build ../misc/goplayコマンドは、misc/goplayのソースコードから実行可能なgoplayバイナリをカレントディレクトリ(通常はsrcディレクトリ)に生成します。追加されたrm -f goplayコマンドは、この一時的に生成されたgoplayバイナリを、その使用が完了した直後に削除します。

この変更により、run.bashスクリプトの実行後に不要な一時ファイルが残ることがなくなり、ビルド環境のクリーンアップが自動化されます。これは、ディスクスペースの節約だけでなく、後のビルドやテスト実行における潜在的な競合や混乱を防ぐ上でも重要です。

これらの変更は、Goプロジェクトのビルドと開発ワークフローの堅牢性と効率性を向上させるための、細部への配慮を示しています。

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

.hgignore

--- a/.hgignore
+++ b/.hgignore
@@ -35,10 +35,12 @@ misc/osx/*.dmg
 src/cmd/?a/y.output
 src/cmd/?l/enam.c
 src/cmd/cc/y.output
+src/cmd/cgo/zdefaultcc.go
 src/cmd/dist/dist.dSYM
 src/cmd/gc/mkbuiltin1
 src/cmd/gc/opnames.h
 src/cmd/gc/y.output
+src/cmd/go/zdefaultcc.go
 src/pkg/go/doc/headscan
 src/pkg/runtime/goc2c
 src/pkg/runtime/mkversion

src/run.bash

--- a/src/run.bash
+++ b/src/run.bash
@@ -161,6 +161,7 @@ time ./run || exit 1
 echo
 echo '#' ../misc/goplay
 go build ../misc/goplay
+rm -f goplay
 
 [ "$GOARCH" == arm ] ||
 (xcd ../test/bench/shootout

コアとなるコードの解説

.hgignoreの変更

.hgignoreファイルへの追加は、Mercurialバージョン管理システムに対して、src/cmd/cgo/zdefaultcc.gosrc/cmd/go/zdefaultcc.goというパスのファイルを無視するように指示しています。これらのファイルは、Goのビルドプロセス中に動的に生成されるものであり、ソースコードの一部としてバージョン管理されるべきではありません。これにより、リポジトリのクリーンさが保たれ、異なるビルド環境間での不整合が防止されます。

src/run.bashの変更

src/run.bashスクリプトへのrm -f goplayの追加は、go build ../misc/goplayコマンドによって生成された一時的なgoplayバイナリを、その使用が完了した直後に削除することを保証します。これは、スクリプト実行後に不要なファイルが残るのを防ぎ、ビルド環境のクリーンアップを自動化するためのものです。rm -fは、ファイルが存在しない場合でもエラーを出さずに削除を試みるため、スクリプトの堅牢性が向上します。

関連リンク

参考にした情報源リンク

  • Go言語のソースコードリポジトリ (GitHub): https://github.com/golang/go
  • Mercurial .hgignoreに関するドキュメント: https://www.mercurial-scm.org/wiki/hgignore
  • Go言語のmisc/goplayに関する情報 (Goソースコード内): https://github.com/golang/go/tree/master/misc/goplay
  • Go言語のzdefaultcc.goに関する議論や情報 (GoのIssueトラッカーやメーリングリストなど、具体的なリンクはコミット当時の情報に依存するため、一般的な検索結果に基づく):
    • "Go zdefaultcc.go" で検索すると、Goのビルドプロセスにおけるこのファイルの役割に関する情報が見つかります。
    • "Go goplay" で検索すると、goplayユーティリティの機能と使用方法に関する情報が見つかります。