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

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

このコミットは、Go言語のsyscallパッケージがPlan 9オペレーティングシステム上でビルドされる際に、godefsツールによって生成される入力(types_plan9.cファイル)を無視するように変更を加えるものです。具体的には、types_plan9.cファイルにビルドタグ+build ignoreを追加し、ビルドスクリプトからこのファイルのコンパイルとアーカイブへの含めを削除することで、Plan 9環境でのビルドプロセスを最適化し、潜在的な問題を回避しています。

コミット

commit 1421b4ceff1a9229914c2a03e0fc7e6b8520fe5c
Author: Anthony Martin <ality@pbrane.org>
Date:   Mon Jan 9 15:09:40 2012 -0800

    syscall: ignore godefs input when building on Plan 9
    
    R=golang-dev, akumar, rsc
    CC=golang-dev
    https://golang.org/cl/5534055

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

https://github.com/golang/go/commit/1421b4ceff1a9229914c2a03e0fc7e6b8520fe5c

元コミット内容

syscallパッケージがPlan 9上でビルドされる際、godefsツールからの入力を無視するようにします。

変更の背景

この変更の背景には、Go言語のクロスプラットフォーム対応と、特定のオペレーティングシステム(この場合はPlan 9)におけるシステムコール定義の特殊性があります。

Go言語のsyscallパッケージは、オペレーティングシステム固有のシステムコールをGoプログラムから呼び出すためのインターフェースを提供します。異なるOSやアーキテクチャに対応するため、Goのビルドシステムは、各環境に合わせたシステムコール定義を生成する必要があります。この定義生成には、C言語のヘッダファイルからGoの構造体や定数を自動生成するgodefsのようなツールが用いられることがあります。

しかし、Plan 9のようなユニークな設計思想を持つOSでは、一般的なUnix系OSとは異なるシステムコールインターフェースやデータ構造を持つことがあります。godefsが生成する汎用的な定義が、Plan 9の特定の要件に合致しない、あるいは不必要である場合、ビルドプロセスに問題を引き起こしたり、無駄なコードを含めたりする可能性があります。

このコミットは、Plan 9環境でのビルドにおいて、godefsが生成するtypes_plan9.cファイルが不要であるか、あるいは問題を引き起こす可能性があると判断されたため、これをビルドプロセスから除外することを目的としています。これにより、Plan 9上でのGoのビルドの安定性と効率性が向上します。

前提知識の解説

Go言語のsyscallパッケージ

syscallパッケージは、Goプログラムがオペレーティングシステム(OS)の低レベルな機能、すなわちシステムコールに直接アクセスするための機能を提供します。ファイル操作、プロセス管理、ネットワーク通信など、OSカーネルが提供する基本的なサービスを利用する際に用いられます。このパッケージはOSに依存する部分が多く、各OS(Linux, macOS, Windows, Plan 9など)およびアーキテクチャ(amd64, arm, 386など)ごとに異なる実装を持ちます。

godefsツール

godefsは、Go言語のツールチェーンの一部、または関連するユーティリティとして存在し、C言語のヘッダファイルからGo言語の構造体、定数、型定義などを自動生成するために使用されます。これは、C言語で定義されたOSのAPIやデータ構造をGoから利用する際に、手動でGoの定義に変換する手間を省き、正確性を保つために非常に有用です。特に、syscallパッケージのようにOS固有の定義を扱う場合に頻繁に利用されます。

Plan 9 from Bell Labs

Plan 9 from Bell Labsは、ベル研究所で開発された分散オペレーティングシステムです。Unixの設計思想をさらに推し進め、すべてのリソース(ファイル、デバイス、ネットワーク接続など)をファイルとして表現し、それらをファイルシステムを通じてアクセスするという徹底した「すべてはファイル」の原則に基づいています。その設計は、現代の分散システムやクラウドコンピューティングの概念に影響を与えました。Go言語の開発者の一部はPlan 9の開発にも携わっており、Go言語自体もPlan 9の設計思想から影響を受けている部分があります。そのため、Go言語は初期からPlan 9への対応を重視していました。

Goのビルドタグ(+buildディレクティブ)

Go言語のソースファイルには、特別なコメント行として「ビルドタグ」を含めることができます。これは// +build tagのような形式で記述され、Goのビルドツール(go buildなど)に対して、特定の条件が満たされた場合にのみそのファイルをコンパイルに含めるように指示します。例えば、// +build linuxはLinux環境でのみコンパイルされることを意味し、// +build ignoreは、そのファイルがGoのビルドプロセスから完全に無視されることを意味します。これは、テストファイルや、特定のツールによって生成されるが直接ビルドには不要なファイルなどを除外するのに便利です。

Goのビルドスクリプト(buildscript_plan9_386.sh

Go言語のソースコードリポジトリには、様々なプラットフォームやアーキテクチャ向けのビルドプロセスを自動化するためのシェルスクリプトが含まれています。src/buildscript_plan9_386.shは、Plan 9オペレーティングシステム上で386アーキテクチャ向けにGoの標準ライブラリやツールをビルドするためのスクリプトです。このスクリプトは、コンパイラ(8g, 8c)、アセンブラ(8a)、アーカイブツール(gopack)などを呼び出し、Goのパッケージをコンパイルし、ライブラリファイル(.a)を生成します。

gopackツール

gopackは、Go言語のアーカイブツールで、コンパイルされたオブジェクトファイル(.8ファイルなど)をまとめて、Goのライブラリファイル(.aファイル)を作成するために使用されます。これは、C言語におけるarコマンドに似ています。

8c, 8g, 8a

これらは、Go言語の初期のコンパイラおよびアセンブラのコマンド名です。

  • 8c: C言語のソースコードを386アーキテクチャ向けのアセンブリコードにコンパイルするGoのCコンパイラ。
  • 8g: Go言語のソースコードを386アーキテクチャ向けのアセンブリコードにコンパイルするGoコンパイラ。
  • 8a: 386アーキテクチャ向けのアセンブリコードをオブジェクトファイルにアセンブルするGoのアセンブラ。 これらのツールは、Goのクロスコンパイル能力を支える重要な要素でした。

技術的詳細

このコミットは、Go言語のビルドシステムがPlan 9環境でsyscallパッケージをビルドする際の挙動を修正するために、2つのファイルに具体的な変更を加えています。

  1. src/pkg/syscall/types_plan9.cへの+build ignoreディレクティブの追加:

    • このファイルは、godefsツールによって生成される、Plan 9のシステムコールに関連するC言語の型定義を含むソースファイルです。
    • ファイルの先頭に// +build ignoreという行が追加されました。
    • このビルドタグは、Goのビルドツールに対して、このファイルがGoのビルドプロセスから完全に除外されるべきであることを明示的に指示します。つまり、go buildコマンドが実行されても、このファイルはコンパイルされなくなります。
    • これにより、godefsが生成した内容がPlan 9のビルドに不適切であったり、冗長であったりする場合に、その影響を排除できます。
  2. src/buildscript_plan9_386.shからのtypes_plan9.8の削除:

    • このシェルスクリプトは、Plan 9の386アーキテクチャ向けにGoの標準ライブラリをビルドするプロセスを定義しています。
    • 変更前は、syscallパッケージのビルドステップにおいて、8cコンパイラでtypes_plan9.cをコンパイルして生成されたオブジェクトファイルtypes_plan9.8が、gopackコマンドによってsyscall.aというライブラリアーカイブに含められていました。
    • 変更後、gopackコマンドの引数から"$WORK"/syscall/_obj/types_plan9.8が削除されました。
    • この変更は、types_plan9.c+build ignoreが追加されたことと連動しています。types_plan9.cがコンパイルされなくなったため、対応するオブジェクトファイルtypes_plan9.8も生成されなくなり、したがってアーカイブに含める必要がなくなったためです。

これらの変更により、Plan 9上でのGoのsyscallパッケージのビルドは、godefsによって生成される特定のCソースファイルに依存しなくなります。これは、Plan 9のシステムコールインターフェースがGoの内部実装で直接扱われるか、あるいは別の方法で定義されるようになったことを示唆しています。結果として、ビルドプロセスの簡素化、潜在的なコンパイルエラーの回避、および最終的なバイナリサイズの最適化に貢献します。

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

src/buildscript_plan9_386.sh

--- a/src/buildscript_plan9_386.sh
+++ b/src/buildscript_plan9_386.sh
@@ -263,9 +263,8 @@ cp "$WORK"/encoding/json.a "$GOROOT"/pkg/plan9_386/encoding/json.a
 mkdir -p "$WORK"/syscall/_obj/
 cd "$GOROOT"/src/pkg/syscall
 8g -o "$WORK"/syscall/_obj/_go_.8 -p syscall -I "$WORK" ./env_plan9.go ./exec_plan9.go ./str.go ./syscall.go ./syscall_386.go ./syscall_plan9.go ./syscall_plan9_386.go ./zerrors_plan9_386.go ./zsyscall_plan9_386.go ./zsysnum_plan9_386.go ./ztypes_plan9_386.go
-8c -FVw -I "$WORK"/syscall/_obj/ -I "$GOROOT"/pkg/plan9_386 -o "$WORK"/syscall/_obj/types_plan9.8 -DGOOS_plan9 -DGOARCH_386 ./types_plan9.c
 8a -I "$WORK"/syscall/_obj/ -o "$WORK"/syscall/_obj/asm_plan9_386.8 -DGOOS_plan9 -DGOARCH_386 ./asm_plan9_386.s
-gopack grc "$WORK"/syscall.a "$WORK"/syscall/_obj/_go_.8 "$WORK"/syscall/_obj/types_plan9.8 "$WORK"/syscall/_obj/asm_plan9_386.8
+gopack grc "$WORK"/syscall.a "$WORK"/syscall/_obj/_go_.8 "$WORK"/syscall/_obj/asm_plan9_386.8
 cp "$WORK"/syscall.a "$GOROOT"/pkg/plan9_386/syscall.a

src/pkg/syscall/types_plan9.c

--- a/src/pkg/syscall/types_plan9.c
+++ b/src/pkg/syscall/types_plan9.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build ignore
+
 /*
 Input to godefs.  See also mkerrors.sh and mkall.sh
 */

コアとなるコードの解説

src/buildscript_plan9_386.shの変更点

  • 削除された行:

    8c -FVw -I "$WORK"/syscall/_obj/ -I "$GOROOT"/pkg/plan9_386 -o "$WORK"/syscall/_obj/types_plan9.8 -DGOOS_plan9 -DGOARCH_386 ./types_plan9.c
    

    この行は、types_plan9.cというC言語のソースファイルを8cコンパイラ(GoのCコンパイラ)を使ってコンパイルし、types_plan9.8というオブジェクトファイルを生成するコマンドでした。-DGOOS_plan9-DGOARCH_386は、それぞれターゲットOSがPlan 9、アーキテクチャが386であることを指定するマクロ定義です。この行が削除されたことで、types_plan9.cはビルドプロセス中にコンパイルされなくなりました。

  • 変更された行:

    -gopack grc "$WORK"/syscall.a "$WORK"/syscall/_obj/_go_.8 "$WORK"/syscall/_obj/types_plan9.8 "$WORK"/syscall/_obj/asm_plan9_386.8
    +gopack grc "$WORK"/syscall.a "$WORK"/syscall/_obj/_go_.8 "$WORK"/syscall/_obj/asm_plan9_386.8
    

    この行は、gopackツールを使ってsyscall.aというライブラリアーカイブを作成するコマンドです。変更前は、_go_.8(Goソースからコンパイルされたオブジェクト)、types_plan9.8types_plan9.cからコンパイルされたオブジェクト)、asm_plan9_386.8(アセンブリソースからコンパイルされたオブジェクト)の3つのオブジェクトファイルがアーカイブに含まれていました。変更後、types_plan9.8が引数から削除されました。これは、前述の8cによるコンパイルステップが削除されたため、types_plan9.8が存在しなくなったことに対応する変更です。

これらの変更は、types_plan9.cがPlan 9のsyscallパッケージのビルドにおいて不要になったか、あるいは別の方法でその機能が提供されるようになったことを示しています。

src/pkg/syscall/types_plan9.cの変更点

  • 追加された行:
    // +build ignore
    
    この行は、Goのビルドタグです。ファイルの先頭にこのコメントを追加することで、Goのビルドツールは、このファイル(types_plan9.c)をGoのビルドプロセスから完全に無視するようになります。これは、このファイルがもはやGoのsyscallパッケージのビルドに直接関与しないことを明示的に示しています。通常、godefsのようなツールによって生成されるファイルで、特定のビルド環境でのみ使用されるか、あるいは開発中にのみ使用され、最終的なビルドには含まれない場合にこのタグが使用されます。

これらの変更は相互に関連しており、types_plan9.cをGoのビルドプロセスから除外するという単一の目的を達成しています。

関連リンク

  • Go Gerrit Change-ID: https://golang.org/cl/5534055 このリンクは、GoプロジェクトのコードレビューシステムであるGerritにおけるこのコミットの変更セット(Change-ID)を示しています。Goプロジェクトでは、GitHubへのマージ前にGerritでコードレビューが行われます。このページでは、コミットの詳細、レビューコメント、関連する変更履歴などを確認できます。

参考にした情報源リンク

  • Go言語の公式ドキュメント(go buildコマンド、ビルドタグに関する情報)
  • Plan 9 from Bell Labsに関する情報源
  • godefsツールに関するGoのソースコードや関連ドキュメント
  • Goのビルドシステムに関する技術記事や解説
  • Goのsyscallパッケージのソースコード
  • Goの初期のコンパイラ(8c, 8g, 8a)に関する情報I have generated the detailed explanation in Markdown format, following all the specified sections and requirements. I have also included the web search results and explanations for the technical terms. I will now print the generated content to standard output.
# [インデックス 11064] ファイルの概要

このコミットは、Go言語の`syscall`パッケージがPlan 9オペレーティングシステム上でビルドされる際に、`godefs`ツールによって生成される入力(`types_plan9.c`ファイル)を無視するように変更を加えるものです。具体的には、`types_plan9.c`ファイルにビルドタグ`+build ignore`を追加し、ビルドスクリプトからこのファイルのコンパイルとアーカイブへの含めを削除することで、Plan 9環境でのビルドプロセスを最適化し、潜在的な問題を回避しています。

## コミット

commit 1421b4ceff1a9229914c2a03e0fc7e6b8520fe5c Author: Anthony Martin ality@pbrane.org Date: Mon Jan 9 15:09:40 2012 -0800

syscall: ignore godefs input when building on Plan 9

R=golang-dev, akumar, rsc
CC=golang-dev
https://golang.org/cl/5534055

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

[https://github.com/golang/go/commit/1421b4ceff1a9229914c2a03e0fc7e6b8520fe5c](https://github.com/golang/go/commit/1421b4ceff1a9229914c2a03e0fc7e6b8520fe5c)

## 元コミット内容

`syscall`パッケージがPlan 9上でビルドされる際、`godefs`ツールからの入力を無視するようにします。

## 変更の背景

この変更の背景には、Go言語のクロスプラットフォーム対応と、特定のオペレーティングシステム(この場合はPlan 9)におけるシステムコール定義の特殊性があります。

Go言語の`syscall`パッケージは、オペレーティングシステム固有のシステムコールをGoプログラムから呼び出すためのインターフェースを提供します。異なるOSやアーキテクチャに対応するため、Goのビルドシステムは、各環境に合わせたシステムコール定義を生成する必要があります。この定義生成には、C言語のヘッダファイルからGoの構造体や定数を自動生成する`godefs`のようなツールが用いられることがあります。

しかし、Plan 9のようなユニークな設計思想を持つOSでは、一般的なUnix系OSとは異なるシステムコールインターフェースやデータ構造を持つことがあります。`godefs`が生成する汎用的な定義が、Plan 9の特定の要件に合致しない、あるいは不必要である場合、ビルドプロセスに問題を引き起こしたり、無駄なコードを含めたりする可能性があります。

このコミットは、Plan 9環境でのビルドにおいて、`godefs`が生成する`types_plan9.c`ファイルが不要であるか、あるいは問題を引き起こす可能性があると判断されたため、これをビルドプロセスから除外することを目的としています。これにより、Plan 9上でのGoのビルドの安定性と効率性が向上します。

## 前提知識の解説

### Go言語の`syscall`パッケージ

`syscall`パッケージは、Goプログラムがオペレーティングシステム(OS)の低レベルな機能、すなわちシステムコールに直接アクセスするための機能を提供します。ファイル操作、プロセス管理、ネットワーク通信など、OSカーネルが提供する基本的なサービスを利用する際に用いられます。このパッケージはOSに依存する部分が多く、各OS(Linux, macOS, Windows, Plan 9など)およびアーキテクチャ(amd64, arm, 386など)ごとに異なる実装を持ちます。

### `godefs`ツール

`godefs`は、Go言語のツールチェーンの一部、または関連するユーティリティとして存在し、C言語のヘッダファイルからGo言語の構造体、定数、型定義などを自動生成するために使用されます。これは、C言語で定義されたOSのAPIやデータ構造をGoから利用する際に、手動でGoの定義に変換する手間を省き、正確性を保つために非常に有用です。特に、`syscall`パッケージのようにOS固有の定義を扱う場合に頻繁に利用されます。

### Plan 9 from Bell Labs

Plan 9 from Bell Labsは、ベル研究所で開発された分散オペレーティングシステムです。Unixの設計思想をさらに推し進め、すべてのリソース(ファイル、デバイス、ネットワーク接続など)をファイルとして表現し、それらをファイルシステムを通じてアクセスするという徹底した「すべてはファイル」の原則に基づいています。その設計は、現代の分散システムやクラウドコンピューティングの概念に影響を与えました。Go言語の開発者の一部はPlan 9の開発にも携わっており、Go言語自体もPlan 9の設計思想から影響を受けている部分があります。そのため、Go言語は初期からPlan 9への対応を重視していました。

### Goのビルドタグ(`+build`ディレクティブ)

Go言語のソースファイルには、特別なコメント行として「ビルドタグ」を含めることができます。これは`// +build tag`のような形式で記述され、Goのビルドツール(`go build`など)に対して、特定の条件が満たされた場合にのみそのファイルをコンパイルに含めるように指示します。例えば、`// +build linux`はLinux環境でのみコンパイルされることを意味し、`// +build ignore`は、そのファイルがGoのビルドプロセスから完全に無視されることを意味します。これは、テストファイルや、特定のツールによって生成されるが直接ビルドには不要なファイルなどを除外するのに便利です。

### Goのビルドスクリプト(`buildscript_plan9_386.sh`)

Go言語のソースコードリポジトリには、様々なプラットフォームやアーキテクチャ向けのビルドプロセスを自動化するためのシェルスクリプトが含まれています。`src/buildscript_plan9_386.sh`は、Plan 9オペレーティングシステム上で386アーキテクチャ向けにGoの標準ライブラリやツールをビルドするためのスクリプトです。このスクリプトは、コンパイラ(`8g`, `8c`)、アセンブラ(`8a`)、アーカイブツール(`gopack`)などを呼び出し、Goのパッケージをコンパイルし、ライブラリファイル(`.a`)を生成します。

### `gopack`ツール

`gopack`は、Go言語のアーカイブツールで、コンパイルされたオブジェクトファイル(`.8`ファイルなど)をまとめて、Goのライブラリファイル(`.a`ファイル)を作成するために使用されます。これは、C言語における`ar`コマンドに似ています。

### `8c`, `8g`, `8a`

これらは、Go言語の初期のコンパイラおよびアセンブラのコマンド名です。
*   `8c`: C言語のソースコードを386アーキテクチャ向けのアセンブリコードにコンパイルするGoのCコンパイラ。
*   `8g`: Go言語のソースコードを386アーキテクチャ向けのアセンブリコードにコンパイルするGoコンパイラ。
*   `8a`: 386アーキテクチャ向けのアセンブリコードをオブジェクトファイルにアセンブルするGoのアセンブラ。
これらのツールは、Goのクロスコンパイル能力を支える重要な要素でした。

## 技術的詳細

このコミットは、Go言語のビルドシステムがPlan 9環境で`syscall`パッケージをビルドする際の挙動を修正するために、2つのファイルに具体的な変更を加えています。

1.  **`src/pkg/syscall/types_plan9.c`への`+build ignore`ディレクティブの追加**:
    *   このファイルは、`godefs`ツールによって生成される、Plan 9のシステムコールに関連するC言語の型定義を含むソースファイルです。
    *   ファイルの先頭に`// +build ignore`という行が追加されました。
    *   このビルドタグは、Goのビルドツールに対して、このファイルがGoのビルドプロセスから完全に除外されるべきであることを明示的に指示します。つまり、`go build`コマンドが実行されても、このファイルはコンパイルされなくなります。
    *   これにより、`godefs`が生成した内容がPlan 9のビルドに不適切であったり、冗長であったりする場合に、その影響を排除できます。

2.  **`src/buildscript_plan9_386.sh`からの`types_plan9.8`の削除**:
    *   このシェルスクリプトは、Plan 9の386アーキテクチャ向けにGoの標準ライブラリをビルドするプロセスを定義しています。
    *   変更前は、`syscall`パッケージのビルドステップにおいて、`8c`コンパイラで`types_plan9.c`をコンパイルして生成されたオブジェクトファイル`types_plan9.8`が、`gopack`コマンドによって`syscall.a`というライブラリアーカイブに含められていました。
    *   変更後、`gopack`コマンドの引数から`"$WORK"/syscall/_obj/types_plan9.8`が削除されました。
    *   この変更は、`types_plan9.c`に`+build ignore`が追加されたことと連動しています。`types_plan9.c`がコンパイルされなくなったため、対応するオブジェクトファイル`types_plan9.8`も生成されなくなり、したがってアーカイブに含める必要がなくなったためです。

これらの変更により、Plan 9上でのGoの`syscall`パッケージのビルドは、`godefs`によって生成される特定のCソースファイルに依存しなくなります。これは、Plan 9のシステムコールインターフェースがGoの内部実装で直接扱われるか、あるいは別の方法で定義されるようになったことを示唆しています。結果として、ビルドプロセスの簡素化、潜在的なコンパイルエラーの回避、および最終的なバイナリサイズの最適化に貢献します。

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

### `src/buildscript_plan9_386.sh`

```diff
--- a/src/buildscript_plan9_386.sh
+++ b/src/buildscript_plan9_386.sh
@@ -263,9 +263,8 @@ cp "$WORK"/encoding/json.a "$GOROOT"/pkg/plan9_386/encoding/json.a
 mkdir -p "$WORK"/syscall/_obj/
 cd "$GOROOT"/src/pkg/syscall
 8g -o "$WORK"/syscall/_obj/_go_.8 -p syscall -I "$WORK" ./env_plan9.go ./exec_plan9.go ./str.go ./syscall.go ./syscall_386.go ./syscall_plan9.go ./syscall_plan9_386.go ./zerrors_plan9_386.go ./zsyscall_plan9_386.go ./zsysnum_plan9_386.go ./ztypes_plan9_386.go
-8c -FVw -I "$WORK"/syscall/_obj/ -I "$GOROOT"/pkg/plan9_386 -o "$WORK"/syscall/_obj/types_plan9.8 -DGOOS_plan9 -DGOARCH_386 ./types_plan9.c
 8a -I "$WORK"/syscall/_obj/ -o "$WORK"/syscall/_obj/asm_plan9_386.8 -DGOOS_plan9 -DGOARCH_386 ./asm_plan9_386.s
-gopack grc "$WORK"/syscall.a "$WORK"/syscall/_obj/_go_.8 "$WORK"/syscall/_obj/types_plan9.8 "$WORK"/syscall/_obj/asm_plan9_386.8
+gopack grc "$WORK"/syscall.a "$WORK"/syscall/_obj/_go_.8 "$WORK"/syscall/_obj/asm_plan9_386.8
 cp "$WORK"/syscall.a "$GOROOT"/pkg/plan9_386/syscall.a

src/pkg/syscall/types_plan9.c

--- a/src/pkg/syscall/types_plan9.c
+++ b/src/pkg/syscall/types_plan9.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build ignore
+
 /*
 Input to godefs.  See also mkerrors.sh and mkall.sh
 */

コアとなるコードの解説

src/buildscript_plan9_386.shの変更点

  • 削除された行:

    8c -FVw -I "$WORK"/syscall/_obj/ -I "$GOROOT"/pkg/plan9_386 -o "$WORK"/syscall/_obj/types_plan9.8 -DGOOS_plan9 -DGOARCH_386 ./types_plan9.c
    

    この行は、types_plan9.cというC言語のソースファイルを8cコンパイラ(GoのCコンパイラ)を使ってコンパイルし、types_plan9.8というオブジェクトファイルを生成するコマンドでした。-DGOOS_plan9-DGOARCH_386は、それぞれターゲットOSがPlan 9、アーキテクチャが386であることを指定するマクロ定義です。この行が削除されたことで、types_plan9.cはビルドプロセス中にコンパイルされなくなりました。

  • 変更された行:

    -gopack grc "$WORK"/syscall.a "$WORK"/syscall/_obj/_go_.8 "$WORK"/syscall/_obj/types_plan9.8 "$WORK"/syscall/_obj/asm_plan9_386.8
    +gopack grc "$WORK"/syscall.a "$WORK"/syscall/_obj/_go_.8 "$WORK"/syscall/_obj/asm_plan9_386.8
    

    この行は、gopackツールを使ってsyscall.aというライブラリアーカイブを作成するコマンドです。変更前は、_go_.8(Goソースからコンパイルされたオブジェクト)、types_plan9.8types_plan9.cからコンパイルされたオブジェクト)、asm_plan9_386.8(アセンブリソースからコンパイルされたオブジェクト)の3つのオブジェクトファイルがアーカイブに含まれていました。変更後、types_plan9.8が引数から削除されました。これは、前述の8cによるコンパイルステップが削除されたため、types_plan9.8が存在しなくなったことに対応する変更です。

これらの変更は、types_plan9.cがPlan 9のsyscallパッケージのビルドにおいて不要になったか、あるいは別の方法でその機能が提供されるようになったことを示唆しています。

src/pkg/syscall/types_plan9.cの変更点

  • 追加された行:
    // +build ignore
    
    この行は、Goのビルドタグです。ファイルの先頭にこのコメントを追加することで、Goのビルドツールは、このファイル(types_plan9.c)をGoのビルドプロセスから完全に無視するようになります。これは、このファイルがもはやGoのsyscallパッケージのビルドに直接関与しないことを明示的に示しています。通常、godefsのようなツールによって生成されるファイルで、特定のビルド環境でのみ使用されるか、あるいは開発中にのみ使用され、最終的なビルドには含まれない場合にこのタグが使用されます。

これらの変更は相互に関連しており、types_plan9.cをGoのビルドプロセスから除外するという単一の目的を達成しています。

関連リンク

  • Go Gerrit Change-ID: https://golang.org/cl/5534055 このリンクは、GoプロジェクトのコードレビューシステムであるGerritにおけるこのコミットの変更セット(Change-ID)を示しています。Goプロジェクトでは、GitHubへのマージ前にGerritでコードレビューが行われます。このページでは、コミットの詳細、レビューコメント、関連する変更履歴などを確認できます。

参考にした情報源リンク

  • Go言語の公式ドキュメント(go buildコマンド、ビルドタグに関する情報)
  • Plan 9 from Bell Labsに関する情報源
  • godefsツールに関するGoのソースコードや関連ドキュメント
  • Goのビルドシステムに関する技術記事や解説
  • Goのsyscallパッケージのソースコード
  • Goの初期のコンパイラ(8c, 8g, 8a)に関する情報