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

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

このコミットは、Go言語のARMアーキテクチャ向けコンパイラであるcmd/5g内のソースコードコメントに存在するURLのタイプミスを修正するものです。具体的には、src/cmd/5g/peep.csrc/cmd/5g/reg.cの2つのファイルにおいて、コメント内のInferno OSのソースコードリポジトリへのリンクが誤ってutils/5g/となっていた箇所を、正しいutils/5c/に修正しています。これは機能的な変更ではなく、ドキュメントの正確性を保つための修正です。

コミット

commit dee62a440c928dd93ba96b273c30e1399fb16994
Author: Shenghou Ma <minux.ma@gmail.com>
Date:   Tue Apr 24 23:17:16 2012 +0800

    cmd/5g: fix URL typo
    
    R=golang-dev, rsc, bradfitz
    CC=golang-dev
    https://golang.org/cl/5919054

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

https://github.com/golang/go/commit/dee62a440c928dd93ba96b273c30e1399fb16994

元コミット内容

このコミットは、src/cmd/5g/peep.csrc/cmd/5g/reg.cの2つのファイル内のコメント行を修正しています。

  • src/cmd/5g/peep.cの変更前: // http://code.google.com/p/inferno-os/source/browse/utils/5g/peep.c

  • src/cmd/5g/peep.cの変更後: // http://code.google.com/p/inferno-os/source/browse/utils/5c/peep.c

  • src/cmd/5g/reg.cの変更前: // http://code.google.com/p/inferno-os/source/browse/utils/5g/reg.c

  • src/cmd/5g/reg.cの変更後: // http://code.google.com/p/inferno-os/source/browse/utils/5c/reg.c

変更は、URLパスのutils/5g/utils/5c/に修正する点のみです。

変更の背景

この変更は、Goコンパイラの初期の歴史的背景に根ざしています。Goコンパイラ、特にgcツールチェイン(5g6g8gなど)は、Plan 9オペレーティングシステムのコンパイラツールチェインから派生しています。Plan 9のコンパイラは、異なるアーキテクチャをターゲットとするために、数字とcの組み合わせで命名されていました(例: ARM向けは5c、x86向けは8c)。

Goのcmd/5gはARMアーキテクチャをターゲットとするコンパイラですが、そのルーツはPlan 9の5cコンパイラにあります。peep.creg.cといったファイルは、Inferno OS(Plan 9から派生した分散OS)のソースコードから取り込まれた、あるいは強く影響を受けたものでした。

元のコメントは、Inferno OSのソースリポジトリへの参照として、Goのコンパイラ名に合わせてutils/5g/と誤って記述されていました。しかし、Inferno OSの実際のソースツリーでは、ARM関連のユーティリティやコンパイラはutils/5c/パスの下に存在します。このコミットは、このURLのタイプミスを修正し、参照の正確性を確保することを目的としています。これはコードの動作には影響しませんが、ソースの出所を正確に示し、将来の参照者が正しい情報にアクセスできるようにするための重要な修正です。

前提知識の解説

Goコンパイラ cmd/5g

cmd/5gは、Go言語の初期のツールチェインにおいて、ARMアーキテクチャをターゲットとするコンパイラの名称でした。Go 1.5より前のバージョンでは、GoコンパイラはC言語で書かれており、Plan 9のコンパイラ設計思想を強く継承していました。5g5はARMアーキテクチャを指し、gはGoコンパイラであることを示していました。Go 1.5以降、GoコンパイラはGo言語自体で書き直され(セルフホスティング)、このようなアーキテクチャ固有の命名規則はユーザーからは抽象化され、go buildコマンドが自動的に適切なコンパイラを選択するようになりました。

Inferno OSとPlan 9

  • Plan 9 from Bell Labs: ベル研究所で開発された分散オペレーティングシステムです。Unixの設計思想をさらに推し進め、すべてのリソースをファイルとして表現し、ネットワーク透過性を重視しています。Go言語の設計思想や初期のツールチェインは、Plan 9の影響を強く受けています。
  • Inferno OS: Plan 9から派生した分散オペレーティングシステムで、特にネットワーク環境でのポータビリティとセキュリティに重点を置いています。Limboという独自のプログラミング言語を使用し、Disという仮想マシン上で動作します。Inferno OSのツールチェインには、Plan 9と同様に、異なるアーキテクチャをターゲットとするCコンパイラ群が含まれており、ARM向けは5c、MIPS向けは0c、x86向けは8cといった命名がされていました。

peep.creg.c

これらは、Goコンパイラの初期のC言語実装において、コンパイラのバックエンドの一部を構成していたファイルです。

  • peep.c (Peephole Optimization):
    • **Peephole Optimization(ピーフホール最適化)**は、コンパイラ最適化の一種です。生成されたアセンブリコードや中間コードの小さな「窓(peephole)」を覗き込み、特定のパターンをより効率的な命令シーケンスに置き換えることで、コードを最適化します。例えば、「ADD R1, 0」のような冗長な命令を削除したり、「MOV R1, R2 ; MOV R2, R3」を「MOV R1, R3 ; MOV R2, R3」のように最適化したりします。peep.cは、このピーフホール最適化のロジックを実装していたと考えられます。
  • reg.c (Register Allocation):
    • **Register Allocation(レジスタ割り当て)**は、コンパイラの重要な最適化フェーズの一つです。プログラムの変数を、CPUの高速なレジスタに効率的に割り当てることを目的とします。レジスタはメモリよりもアクセスがはるかに高速であるため、適切にレジスタを割り当てることでプログラムの実行速度を大幅に向上させることができます。reg.cは、このレジスタ割り当てのアルゴリズムとロジックを実装していたと考えられます。

これらのファイルは、GoコンパイラがC言語で書かれていた時代の名残であり、Go 1.5でコンパイラがGo言語で書き直されてからは、その役割はGo言語で実装された新しいモジュールに引き継がれています。

技術的詳細

このコミットは、Goコンパイラのソースコード内のコメント修正であり、コンパイラの動作自体には影響を与えません。しかし、その背景にはGoコンパイラの歴史と、Plan 9/Inferno OSとの深い関連性があります。

Goコンパイラの初期バージョンは、Plan 9のコンパイラツールチェインの設計とコードベースを基盤としていました。特に、cmd/5gのようなアーキテクチャ固有のコンパイラは、Plan 9の5cコンパイラ(ARM向け)の構造や一部のコードを継承していました。

peep.creg.cは、コンパイラのコード生成と最適化のフェーズにおいて重要な役割を担っていました。

  • peep.cは、生成されたARMアセンブリコードに対して、局所的な最適化(ピーフホール最適化)を適用し、コードの効率を高める責任がありました。
  • reg.cは、プログラム内の値をARMプロセッサのレジスタに割り当てるロジックを管理していました。レジスタ割り当ては、メモリへのアクセスを減らし、実行速度を向上させるために不可欠なプロセスです。

これらのファイル内のコメントは、そのコードがInferno OSの特定のパスから派生したものであることを示していました。しかし、元のURLはInferno OSのソースツリーにおけるARM関連のユーティリティの正しいパス(utils/5c/)ではなく、Goコンパイラの命名規則に引きずられてutils/5g/と誤って記述されていました。このコミットは、この歴史的な参照の正確性を回復するためのものです。

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

diff --git a/src/cmd/5g/peep.c b/src/cmd/5g/peep.c
index e87f5d6973..4874ee1103 100644
--- a/src/cmd/5g/peep.c
+++ b/src/cmd/5g/peep.c
@@ -1,5 +1,5 @@
 // Inferno utils/5c/peep.c
-// http://code.google.com/p/inferno-os/source/browse/utils/5g/peep.c
+// http://code.google.com/p/inferno-os/source/browse/utils/5c/peep.c
 //
 //
 //	Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
diff --git a/src/cmd/5g/reg.c b/src/cmd/5g/reg.c
index 93724d0326..82e2166b84 100644
--- a/src/cmd/5g/reg.c
+++ b/src/cmd/5g/reg.c
@@ -1,5 +1,5 @@
 // Inferno utils/5c/reg.c
-// http://code.google.com/p/inferno-os/source/browse/utils/5g/reg.c
+// http://code.google.com/p/inferno-os/source/browse/utils/5c/reg.c
 //
 //
 //	Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.

コアとなるコードの解説

上記のdiffが示すように、変更は非常に単純です。peep.creg.cのそれぞれのファイルの冒頭にあるコメント行のURLが修正されています。

具体的には、以下の部分が変更されました。

  • -// http://code.google.com/p/inferno-os/source/browse/utils/5g/peep.c
  • +// http://code.google.com/p/inferno-os/source/browse/utils/5c/peep.c

そして、

  • -// http://code.google.com/p/inferno-os/source/browse/utils/5g/reg.c
  • +// http://code.google.com/p/inferno-os/source/browse/utils/5c/reg.c

この変更は、URLパス内の5g5cに修正することで、Inferno OSのソースリポジトリにおける正しいパスを指すようにしています。これは、Goのcmd/5gがARMアーキテクチャをターゲットとしているものの、そのルーツであるInferno OS/Plan 9のコンパイラではARM関連のコードがutils/5c/ディレクトリに配置されていたという歴史的経緯を反映したものです。これにより、コメントが指し示す情報源がより正確になりました。

関連リンク

参考にした情報源リンク