[インデックス 1883] ファイルの概要
このコミットは、Go言語の初期開発段階において、8a
(アセンブラ) および 8c
(Cコンパイラ) のビルド問題を修正し、これらのツールと 8l
(リンカ) をビルドプロセスに組み込むことで、ビルドの健全性を維持することを目的としています。具体的には、src/cmd/8a/lex.c
におけるパス取得関数の変更、src/cmd/8c/Makefile
におけるリンカフラグの追加、および src/cmd/clean.bash
スクリプトへの 8a
, 8c
, 8l
の追加が含まれています。
コミット
commit 58f7fc331f4e4fe62370a4bedfaeebf45d8b3d2b
Author: Russ Cox <rsc@golang.org>
Date: Tue Mar 24 18:04:19 2009 -0700
make 8a, 8c build again.
add 8a 8c 8l to the build to keep us honest.
R=r
DELTA=33 (28 added, 0 deleted, 5 changed)
OCL=26694
CL=26711
---
src/cmd/8a/lex.c | 31 +++++++++++++++++++++++++------
src/cmd/8c/Makefile | 2 +-\
src/cmd/clean.bash | 2 +-\
3 files changed, 27 insertions(+), 8 deletions(-)
diff --git a/src/cmd/8a/lex.c b/src/cmd/8a/lex.c
index 139ab0a328..d4c61af07d 100644
--- a/src/cmd/8a/lex.c
+++ b/src/cmd/8a/lex.c
@@ -33,11 +33,30 @@
#include "y.tab.h"
#include <ctype.h>
+enum
+{
+ Plan9 = 1<<0,
+ Unix = 1<<1,
+ Windows = 1<<2,
+};
+
+int
+systemtype(int sys)
+{
+ return sys&Plan9;
+}
+
+int
+pathchar(void)
+{
+ return '/';
+}
+
void
main(int argc, char *argv[])
{
char *p;
-\tint nout, nproc, status, i, c;\n+\tint nout, nproc, i, c;\n \n \tthechar = \'8\';\n \tthestring = \"386\";\n@@ -162,7 +181,7 @@ assemble(char *file)\n \n \tpass = 1;\n \tpinit(file);\n-\t\n+\n \tBprint(&obuf, \"%s\\n\", thestring);\n \n \tfor(i=0; i<nDlist; i++)\n@@ -172,7 +191,7 @@ assemble(char *file)\n \t\tcclean();\n \t\treturn nerrors;\n \t}\n-\t\n+\n \tBprint(&obuf, \"\\n!\\n\");\n \n \tpass = 2;\n@@ -308,7 +327,7 @@ struct\n \t\"CMPSW\",\tLTYPE0,\tACMPSW,\n \t\"CMPXCHGB\",\tLTYPE3,\tACMPXCHGB,\n \t\"CMPXCHGL\",\tLTYPE3,\tACMPXCHGL,\n-\t\"CMPXCHGW\",\tLTYPE3,\tACMPXCHGW,\t\n+\t\"CMPXCHGW\",\tLTYPE3,\tACMPXCHGW,\n \t\"DAA\",\t\tLTYPE0,\tADAA,\n \t\"DAS\",\t\tLTYPE0,\tADAS,\n \t\"DATA\",\t\tLTYPED,\tADATA,\n@@ -661,9 +680,9 @@ cinit(void)\n \t}\n \n \tpathname = allocn(pathname, 0, 100);\n-\tif(mygetwd(pathname, 99) == 0) {\n+\tif(getwd(pathname, 99) == 0) {\n \t\tpathname = allocn(pathname, 100, 900);\n-\t\tif(mygetwd(pathname, 999) == 0)\n+\t\tif(getwd(pathname, 999) == 0)\n \t\t\tstrcpy(pathname, \"/???\");\n \t}\n }\ndiff --git a/src/cmd/8c/Makefile b/src/cmd/8c/Makefile\nindex 9893ef63fd..75919ddfd4 100644\n--- a/src/cmd/8c/Makefile\n+++ b/src/cmd/8c/Makefile\n@@ -30,7 +30,7 @@ LIB=\\\n \t../cc/cc.a$O\n \n $(TARG): $(OFILES) $(LIB)\n-\t$(LD) -o $(TARG) -L$(GOROOT)/lib $(OFILES) $(LIB) -lbio -l9\n+\t$(LD) -o $(TARG) -L$(GOROOT)/lib $(OFILES) $(LIB) -lm -lbio -l9\n \n $(OFILES): $(HFILES)\n \ndiff --git a/src/cmd/clean.bash b/src/cmd/clean.bash\nindex 615aaad9b6..9b3467ae4a 100644\n--- a/src/cmd/clean.bash\n+++ b/src/cmd/clean.bash\n@@ -3,7 +3,7 @@\n # Use of this source code is governed by a BSD-style\n # license that can be found in the LICENSE file.\n \n-for i in cc 6l 6a 6c gc 6g ar db nm acid cov gobuild prof gotest\n+for i in cc 6l 6a 6c 8l 8a 8c gc 6g ar db nm acid cov gobuild prof gotest\n do\n \tcd $i\n \tmake clean\n```
## GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/58f7fc331f4e4fe62370a4bedfaeebf45d8b3d2b
## 元コミット内容
make 8a, 8c build again.
add 8a 8c 8l to the build to keep us honest.
R=r
DELTA=33 (28 added, 0 deleted, 5 changed)
OCL=26694
CL=26711
## 変更の背景
このコミットは、Go言語の初期開発におけるビルドシステムの安定化と、Plan 9由来のツールチェーン (`8a`, `8c`, `8l`) の継続的な統合を目的としています。コミットメッセージにある「make 8a, 8c build again.」という記述から、これらのツールが何らかの理由でビルドできなくなっていたことが示唆されます。Go言語は、その設計思想や初期のツールチェーンにおいて、Bell Labsで開発されたオペレーティングシステムであるPlan 9から大きな影響を受けています。特に、初期のGoコンパイラやアセンブラは、Plan 9のツールチェーン(例: `8c`はCコンパイラ、`8a`はアセンブラ、`8l`はリンカで、`8`はIntel 386アーキテクチャを指す)を直接の祖先としていました。
「add 8a 8c 8l to the build to keep us honest.」という記述は、これらの重要なツールがGoのビルドプロセスの一部として常に機能することを保証するための意図を示しています。これは、Go言語が自己ホスト型になる前の段階で、C言語で書かれたこれらの基盤ツールが正しくビルドされ、動作することが不可欠であったためです。ビルドの健全性を維持することは、開発の継続性と将来的な自己ホスト化への移行において極めて重要でした。
## 前提知識の解説
* **Go言語の初期開発とPlan 9**: Go言語は、GoogleでRob Pike、Ken Thompson、Robert Griesemerらによって設計されました。これらの設計者の多くは、Plan 9の開発にも携わっており、その経験がGo言語の設計、特に並行処理モデルやツールチェーンに深く影響を与えています。初期のGoコンパイラはC言語で書かれており、Plan 9のCコンパイラを使用してコンパイルされていました。
* **`8a`, `8c`, `8l`**: これらはPlan 9の命名規則に由来するツール群です。
* `8a`: Intel 386アーキテクチャ向けのアセンブラ。Goのアセンブリ言語はPlan 9のアセンブリ言語構文に基づいています。
* `8c`: Intel 386アーキテクチャ向けのCコンパイラ。初期のGoコンパイラはC言語で書かれており、この`8c`のようなコンパイラでビルドされていました。
* `8l`: Intel 386アーキテクチャ向けのリンカ。
これらのツールは、Go言語が完全に自己ホスト型になるまで、Goのビルドプロセスにおいて重要な役割を担っていました。
* **`getwd` と `mygetwd`**: `getwd` は "get working directory" の略で、現在の作業ディレクトリのパスを取得する関数です。Unix系システムでは標準的な関数ですが、Plan 9ではその実装が独特です。Go言語の`os.Getwd()`関数は、Plan 9上ではPlan 9のシステムコールやライブラリ関数と連携して動作します。`mygetwd` は、おそらくGoの初期開発段階で、特定の環境(この場合はPlan 9)での`getwd`の動作をラップまたはカスタマイズするために作成された内部関数であったと考えられます。このコミットでは、`mygetwd`から標準的な`getwd`への移行が行われています。
* **Makefile**: ソフトウェアのビルドプロセスを自動化するためのツールです。Go言語の初期のビルドプロセスはMakefileベースでした。
* **`clean.bash`**: ビルドによって生成された一時ファイルや実行可能ファイルを削除するためのシェルスクリプトです。開発環境をクリーンな状態に保つために使用されます。
## 技術的詳細
このコミットの技術的詳細は、Go言語の初期のビルドシステムと、Plan 9との密接な関係を反映しています。
1. **`src/cmd/8a/lex.c` の変更**:
* `enum { Plan9 = 1<<0, Unix = 1<<1, Windows = 1<<2, };` の追加: これは、異なるオペレーティングシステムタイプをビットフラグとして定義しています。Go言語がクロスプラットフォーム対応を目指す上で、ビルドターゲットのシステムタイプを識別するための初期の試みと考えられます。
* `systemtype(int sys)` 関数の追加: 引数`sys`が`Plan9`フラグを含んでいるかどうかをチェックするシンプルな関数です。これにより、コード内で現在のシステムがPlan 9であるかどうかを条件分岐で判断できるようになります。
* `pathchar(void)` 関数の追加: パス区切り文字として常に `'/'` を返す関数です。これは、Plan 9を含むUnix系システムではパス区切り文字が `'/'` であることを明示しています。Windowsなど他のシステムでは `'\\'` が使われるため、将来的なクロスプラットフォーム対応を見据えた抽象化の初期段階と見ることができます。
* `main` 関数の変数 `status` の削除: `main`関数のローカル変数`status`が未使用になったため削除されています。これはコードのクリーンアップと最適化の一環です。
* `mygetwd` から `getwd` への変更: `cinit`関数内で、現在の作業ディレクトリを取得するために使用されていた`mygetwd`関数が、標準の`getwd`関数に置き換えられています。これは、`mygetwd`が不要になったか、あるいは`getwd`がPlan 9環境で適切に動作するようになったことを示唆しています。`getwd`は、Plan 9の`libc`ライブラリに存在する関数であり、GoがPlan 9のネイティブ機能を利用する方向へ進んでいたことを示します。この変更により、Goのツールチェーンがより標準的なシステム関数に依存するようになり、コードの可読性と保守性が向上します。
* `assemble` 関数内のコメント行の削除: `assemble`関数内の空行が削除されています。これはコードの整形の一部です。
* `CMPXCHGW` の定義の修正: `struct`定義内の`CMPXCHGW`の行末の余分なタブ文字が削除されています。これもコードの整形です。
2. **`src/cmd/8c/Makefile` の変更**:
* リンカフラグに `-lm` の追加: `$(LD) -o $(TARG) -L$(GOROOT)/lib $(OFILES) $(LIB) -lm -lbio -l9` のように、`-lm` (数学ライブラリをリンクするためのフラグ) が追加されています。これは、`8c`コンパイラが生成するコード、または`8c`コンパイラ自体が数学関数を必要とするようになったことを示しています。これにより、`8c`のビルドが成功するようになります。
3. **`src/cmd/clean.bash` の変更**:
* `8l`, `8a`, `8c` の追加: `for i in ...` のループに `8l`, `8a`, `8c` が追加されています。これにより、`clean.bash`スクリプトが実行された際に、これらのツールのビルド成果物も適切にクリーンアップされるようになります。これは、これらのツールがGoのビルドプロセスに正式に組み込まれ、そのライフサイクルが管理されるようになったことを意味します。
これらの変更は、Go言語の初期のビルドプロセスがまだ流動的であり、異なるプラットフォーム(特にPlan 9)との互換性を確保しつつ、ツールのビルドと管理を体系化しようとしていた時期のものです。
## コアとなるコードの変更箇所
* **`src/cmd/8a/lex.c`**:
* 33行目から42行目: `enum` と `systemtype`, `pathchar` 関数の追加。
* 46行目: `main` 関数の変数宣言から `status` の削除。
* 162行目、172行目: `assemble` 関数内の空行の削除。
* 308行目: `CMPXCHGW` の定義の整形。
* 661行目、663行目: `mygetwd` から `getwd` への変更。
* **`src/cmd/8c/Makefile`**:
* 33行目: リンカフラグに `-lm` の追加。
* **`src/cmd/clean.bash`**:
* 5行目: `for` ループに `8l`, `8a`, `8c` の追加。
## コアとなるコードの解説
* **`src/cmd/8a/lex.c` における `systemtype` と `pathchar` の追加、`mygetwd` から `getwd` への変更**:
* `systemtype` と `pathchar` は、Go言語が異なるオペレーティングシステムをサポートするための初期の抽象化レイヤーとして導入されました。特に`pathchar`が常に`'/'`を返すことは、Plan 9やUnix系システムでのパス表現に依存していることを示しています。
* `mygetwd` から `getwd` への変更は、GoのツールチェーンがPlan 9の標準ライブラリ関数を直接利用するようになったことを意味します。これは、GoがPlan 9環境に深く統合され、そのネイティブ機能を利用することで、より効率的で標準的なコードベースを目指していたことを示唆しています。`mygetwd`が内部的なラッパーであったとすれば、その必要性がなくなったか、あるいは`getwd`がGoの要件を満たすように改善されたと考えられます。
* **`src/cmd/8c/Makefile` における `-lm` の追加**:
* `8c`コンパイラのビルド時に数学ライブラリをリンクするようになったことは、`8c`がコンパイルするCコード、または`8c`コンパイラ自体が数学関数を必要とするようになったことを示しています。これは、Goの初期のランタイムやライブラリが、より複雑な計算を必要とする機能を取り込み始めた可能性を示唆しています。
* **`src/cmd/clean.bash` における `8l`, `8a`, `8c` の追加**:
* これらのツールがクリーンアップスクリプトに追加されたことは、Goのビルドシステムにおいて、`8a`, `8c`, `8l`が正式なビルド成果物として認識され、その管理が体系化されたことを意味します。これにより、開発者はビルド環境を容易にクリーンアップできるようになり、ビルドの信頼性が向上します。
これらの変更は、Go言語がまだ初期段階にあり、そのビルドシステムとツールチェーンが進化の途上にあったことを明確に示しています。特に、Plan 9との関係性が深く、その環境でのビルドと実行を確実にするための調整が行われていたことがわかります。
## 関連リンク
* Go言語の歴史に関する公式ドキュメントやブログ記事
* Plan 9 from Bell Labsの公式情報
* Goのアセンブリ言語に関するドキュメント
## 参考にした情報源リンク
* https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQH7GU2WWe7zTc_NSwvaVw4zbUB0bkWAQUjT_AN9XAHDilyFx-KtM6TME1peIi0cy-DvyRCirWDXtXuon-bF7Ih6TDVpsdvQSLGrO5LE42EsnZl93lNHvE-cwdev9i0_ppFRyX2LR9JtQw==
* https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQFIeBQBrX0KQikVS3FqIyql3fSKACwTf2syh629VjXd-CP7iRKaBXjPcpHGGpw-bdnpriFrnMJXDlV9ue37V_5QS7La8ZSwlBU2cZ---OAwPkce0qpFFTToobdNfDsEXH6-kP-lyhcZww==
* https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQGUuN5jBAMlXzY3pPTcKXjRnbTNK45T8RtGrCM4ygyan6tM_KKH7y87XLje_mRV54qkiFXnDMEewg8klxaJsfCee8FVucn_JSzfd-IF0LnO0p4VA84=
* https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQFBZztcu7hMs5H4Q4SPw2rTwdU7jlhy7sWmaba_5JRfHhmWhtSuBUbbABgPfv-jge1OiLsFDsKp7FOmCk2LrD_0VOh3S45dW6ZcW39SB_yoSdU-VLmgiwXaDXy_-lis4jPly0pfxbir_9GvtkZrgHVoNsyBPDcW-dm4M3sDAbB9
* https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQHj50RlxXyOUxOu_xwJzNnXhaDGWpOo68YfrYr1txMu3ie4R9lwCqOp7tqoP4Puw19M0go5hsmBeNNvfIkB8cdLHZM4j2Ezp9_Hj1ZcgkItUMRZXLlrHbmkRceyyfe1y3qlYb8=
* https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQGxrChBSKD01EDLYxDh8x9cHLb5llbfXPguL7xrBkJo0rU-9uQQrsUcFSZ3IJxVMwnwiSXXmL40Bb6TcZax4h4cKY8YfsBZqLZHd6tXylbd-F5sNZoVhDx-hw==
* https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQFb0Sx9UJt1upicKicynguLrGK3p9oI2kA4e8ZggsqXAllUz84L4uE4K9hRGynCT7tfADNQjtMQQJ5WTBrqdsHey2XXDz8qG5elNOSmvWQdMf9w3RTkq8B36OT290ubByHaayqaFmE=
* https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQEFmDZ_RM9N_JOJPpSSjEXqQ1kLDax5C1ln-BCwU45PZMAsIM9MxZlzRvDhaSwLKnIBHjU7j_EaEvUNNLEG2aCL4Zq_5-lCm5uBT_IvMDNSJB_6zjklqorg2DEeDX3x57BUaDQxOlxCg==
* https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQFnBRL27DMiphJz5OQk_ZTEG99lfWAnALmnc-qI0QbCCF4d_I1MzWVpSbFF5phnmppdoB06EuGgtMa2EnUaT2XISm9hKx2hm-dDaYbgjmASPNPcTyR-SpJY9PIwyya9Jjxtw2JpzjkL7T2-5IOGsKsjkAc2_xZ1h2kMqKvttekvgTaTRMnYfIJDvpHeP79ky8PHwIs-7cepQCsnY3jbq5WvY6VAt325-i9yDrmw19nUoSw=
* https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQEg8_d3p3AT-CEzEeNCYaCf9_jdzceGHbqAkM1OL5b1_vdjAxK1Lly273hDMcFJCP2eJlW4PMTRR0PjbQuJX4h0WHBAoaWlO77r7PhIU3ZqxDBxMCmU9MXWWhy9IlkrEzgSggbgjE5BsquZvuTfP5X8Ev4Io2a1q4ZDFLLpmnsGcQOayFdDOLCFi7_VirfwKm7yO1ciZ5HuEEmU
* https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQG7aWtGOmgFWjLoSq4N1Tz3AbW-EqMzREUqbZVwHx4GIbkpLVUXgSJZgZy7RxpywJFpjP3h4pBHloMGUZPLhc8eQ8TrHb3l0AdKMiHFcjYgOq3I3t1LjxkeBD55TiEZ9X2PkauN7wbm7uPRc4spRYme
* https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQEF7Ej3K5ARg7vwPHSfHngx3DeV8VFQC89ezJSZNcEBiwAwHpLy8JT-tA_6ufq2kgu51gfGsRUcB65Q_P0kJ0J0GvQj0h89iVH_zgh8JcB3-skrw1aWXm3RpQ==
* https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQHa09NtjK_xQu53p415umzVc8Wqdd_qo11PkfGiMc357mp24meDjYX1NpGUUr7W5bjRYCMd9I3vrTN3_Q-94xWoy3QT6T4jOSO_90D2yxCFZh3fw1O5TP2nqvzbprqWPZJ7-jfVjL8tusweqEZmjvqgiS9log==
* https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQEb7GSgzTyN_gl8Wff4r0xAR1dKtPUMZhCXt9GseeTqAUim-uljK9n0mXejYzR2RqgQl_Ss6zHT-bEAFNVoTCNX96FVSQdRzGuzm8AxIkHCDeivddbi0GXzbYAXsviTidPdIthCb5O5zauIpDKxcLrHZ7UHM1QBn9Xw4_dzR8jJB1k=
* https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQHsPidjX1VLl2unca025Ub6MH0UdKfQjU-SL8Zll01LzvZoGFwz1Tiz8OSb4nNFHX2UitXu3WReQqT_LbLfq01CN0TsE3-499RUQyOxG9yVXWrxDk0HEGOCwzjLqPN3B36sEKXyks2oWIzw4nrC2vTa3NX86Xo73PutF0JBz
* https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQGQmmqu03A6ZAlNR08SPaNWEyVgzfKIXIur8k-22uHmNkQSF8FiOs-OVH8UWdG7bmeua8Lj6Ph7RcBibpp4oTmKMF1_I6BPpNFeLac_mtl2OwMv1bnVlhSlnKz2uwPv8q1Kj36oS8p4IxNvukoKsPVbc0Fr7JaZ5bdkdDWqgVkktuj3Mmmo7L30FV3ijjIw-St2Hfymtq6EYtS-bu-KnarD
* https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQGRDjYVju6OGjZWyre68o46t6Wea09L6VxXCUuhfM6ElnC84xwao4-jbXuWIUadQbmXcTXxNXGdOLpQQrKOJ9QZ0I4QKi7Jr6jlLNfGduTBkYIXQv0KpgtWUti0YFOPMqbSGTQCvKpxkKfOSrhznObwZHRAcbOv9qeL4jXkg8rtMcTjVbS97BhHhweMhDv4A2A=
* https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQF8gK5hlJT5EryXiArf_HA1jwZ9n7H1O8U7h-o0Ed8d5ApsVfHzd2SFwCtCmApCriCEe9Xvg0lglnGSJs5eferAHYDEJKLzt2dsWY4a4R5vJHILx0h2mtpy1EFVp2Yj3XtEKq3T_tfn56lwoUJV2x91wHcVU3yG5VQ2A1QFNsHES4c49ZB8L8bf_9CYZ6mAC3p9l5z-76WLsi_Z5K0=
* https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQFvORMnH6MdPmI6iJIqhV_4MMncv6Nfn3NZTON2wozwXlbTjlgzY7IV58UgafGvrLJz8TkrrkaFo65f8hfqviBVQW_aH3gIzHaAg8nD8Fk-vwclv3YtO47DAQnpc0JQIFlImllBeZN93GCwXCPHmVxJm7mo0ireZ4Kqft-z3LSB63l_ZZIzgPWm_T5m72iz3hI0=
* https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQHvAoLSIu6ElkXQYJdl0x835W5tf_h2tumCzag3hVQgavMRfwc4giHxiBTkRwIXkNBo6MTYW__y2Z4M8nin52uE2X1PMlXGMKXtZNpx8mMmbUtMat0ImvW4L1DdKLDnOjoYA0uu64Gq3YTtbFiBWQw5qvG5y04FN5I65BAAeNj6