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

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

このコミットは、Go言語のリポジトリから多数の古い(obsolete)ファイルを削除するものです。これらのファイルは、Go言語の初期のコンパイラやツールチェインの一部を構成していましたが、そのほとんどは「pretty」というツールに統合されたか、アーカイブされたため、リポジトリから削除されました。これにより、コードベースの整理と簡素化が図られています。

コミット

commit 699721a0ea2efbf7bd241d9e66a6a550b7c51d69
Author: Robert Griesemer <gri@golang.org>
Date:   Thu Jan 29 17:00:18 2009 -0800

    - removed obsolete files from repository
    (most of this has been integrated into pretty,
    the rest has been archived).
    
    R=r
    OCL=23842
    CL=23842

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

https://github.com/golang/go/commit/699721a0ea2efbf7bd241d9e66a6a550b7c51d69

元コミット内容

リポジトリから古いファイルを削除しました(これらのほとんどは pretty に統合され、残りはアーカイブされました)。

変更の背景

このコミットは、Go言語の初期開発段階における重要なコードベースの整理作業の一環です。Go言語のコンパイラやツールは、開発の初期段階で様々な実験的な実装やプロトタイプを経て進化しました。このコミットで削除されたファイル群は、usr/gri/gosrc/ ディレクトリ以下に存在しており、これはGo言語の共同創設者の一人であるRobert Griesemer氏のユーザーディレクトリ内のGoソースコードを意味します。

コミットメッセージにある「pretty」は、Go言語のコードフォーマッタであるgofmtの前身、またはその一部を指している可能性が高いです。初期のGo開発では、コードの構文解析(parsing)、抽象構文木(AST)の構築、型チェック(type checking)、そしてコードの整形(pretty-printing)といったコンパイラの各段階が、個別のツールやモジュールとして開発されていました。

これらのファイルが「obsolete(廃止された)」とされたのは、以下の理由が考えられます。

  1. 機能の統合: 独立していた機能が、より洗練された単一のツール(例: gofmt)や、コンパイラ本体のより統合された部分に組み込まれた。
  2. 設計の変更: Go言語の設計やコンパイラのアーキテクチャが進化し、これらの初期の実装が現在の設計に合わなくなった。
  3. コードベースのクリーンアップ: 開発の初期段階で作成された実験的なコードや一時的なファイルが、安定版のリポジトリから整理された。

この変更は、Go言語のツールチェインが成熟し、より効率的で保守しやすい構造へと移行する過程を示しています。

前提知識の解説

このコミットを理解するためには、以下の概念についての知識が役立ちます。

  • コンパイラの基本構造:
    • 字句解析(Lexical Analysis/Scanning): ソースコードをトークン(意味を持つ最小単位)に分解するプロセス。scanner.goがこれに該当します。
    • 構文解析(Parsing): トークンのストリームを解析し、プログラムの構文構造を抽象構文木(AST)として構築するプロセス。parser.goがこれに該当します。
    • 抽象構文木(Abstract Syntax Tree, AST): ソースコードの抽象的な構文構造を表現するツリー構造。ast.goがこれに該当します。
    • セマンティック解析(Semantic Analysis)/型チェック(Type Checking): ASTを走査し、プログラムの意味的な正当性(例: 型の一致、変数の宣言)を検証するプロセス。type.goverifier.goがこれに該当します。
    • コード生成(Code Generation): ASTから実行可能なコード(または中間コード)を生成するプロセス。
    • プリティプリンティング(Pretty-printing): ASTから整形されたソースコードを生成するプロセス。printer.goがこれに該当します。
  • Go言語のパッケージシステム: Go言語はパッケージ(package)によってコードをモジュール化します。import.goexport.goは、パッケージ間の依存関係を解決し、公開されたインターフェースを扱うためのメカニズムに関連します。
  • Go言語の初期開発: Go言語は2007年にGoogleで開発が始まり、2009年にオープンソースとして公開されました。このコミットは、その公開直前の、あるいは公開初期の段階でのコードベースの状態を反映しています。当時のGo言語は現在とは異なる部分が多く、コンパイラやツールの実装も試行錯誤の段階でした。
  • globals.go: コンパイラ全体で共有されるグローバルなデータ構造や定数を定義するファイル。
  • object.go: プログラム内の「オブジェクト」(変数、関数、型など)の表現を定義するファイル。
  • universe.go: Go言語の組み込み型や組み込み関数など、"universe"スコープに属する要素を定義するファイル。
  • platform.go: OSやアーキテクチャに依存する処理(ファイルI/Oなど)を抽象化するファイル。
  • utils.go: ユーティリティ関数やヘルパー関数をまとめたファイル。
  • compilation.go: コンパイルプロセス全体を管理するファイル。
  • expr.go: 式の評価や操作に関連するロジックを扱うファイル。
  • go.go: Goコンパイラのメインエントリポイントやコマンドライン引数の処理を行うファイル。
  • decls.go: 宣言(変数宣言、型宣言など)に関連するテストや定義を含むファイル。
  • base.go: 他のファイルで利用される基本的な型や構造の定義を含むファイル。

技術的詳細

このコミットで削除されたファイル群は、Go言語の初期のコンパイラ(おそらくgcコンパイラの前身、または実験的なコンパイラ)の主要な構成要素でした。これらのファイルが削除されたということは、それらの機能が完全に廃止されたか、あるいはより新しい、異なる設計のモジュールに置き換えられたことを意味します。

特に注目すべきは、parser.goscanner.goast.gotype.goobject.goglobals.goといった、コンパイラのフロントエンドを構成する核となるファイルが削除されている点です。これは、Go言語のコンパイラが、これらの初期実装から、より堅牢で効率的な現在のgoコマンドやgcコンパイラのアーキテクチャへと移行したことを強く示唆しています。

「pretty」への統合という記述は、Go言語のコードフォーマットツールであるgofmtの誕生と密接に関連していると考えられます。gofmtは、Go言語のコードを標準的なスタイルに自動的に整形するツールであり、その機能は構文解析(parser)と抽象構文木(AST)の操作、そして整形されたコードの出力(printer)に大きく依存します。削除されたprinter.goast.goparser.goの機能がgofmtのようなツールに再利用または統合された可能性が高いです。

また、import.goexport.goの削除は、Go言語のパッケージ管理とコンパイル済みパッケージの形式が初期段階から変更されたことを示唆しています。Go言語のパッケージは、コンパイル時に.aファイル(アーカイブファイル)として出力され、他のパッケージからインポートされます。これらのファイルは、その.aファイルの読み書き、つまりパッケージのインターフェース情報のシリアライズ/デシリアライズを担っていたと考えられます。

全体として、このコミットはGo言語の初期開発における大規模なリファクタリングと、コンパイラおよびツールチェインの設計思想の進化を示す歴史的なスナップショットと言えます。

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

このコミットは、既存のファイルを削除する変更のみを含んでいます。具体的には、以下の19個のファイルがリポジトリから削除されました。

  • usr/gri/gosrc/ast.go
  • usr/gri/gosrc/base.go
  • usr/gri/gosrc/compilation.go
  • usr/gri/gosrc/decls.go
  • usr/gri/gosrc/export.go
  • usr/gri/gosrc/expr.go
  • usr/gri/gosrc/globals.go
  • usr/gri/gosrc/go.go
  • usr/gri/gosrc/import.go
  • usr/gri/gosrc/object.go
  • usr/gri/gosrc/parser.go
  • usr/gri/gosrc/platform.go
  • usr/gri/gosrc/printer.go
  • usr/gri/gosrc/scanner.go
  • usr/gri/gosrc/test_scanner.go
  • usr/gri/gosrc/type.go
  • usr/gri/gosrc/universe.go
  • usr/gri/gosrc/utils.go
  • usr/gri/gosrc/verifier.go

これらのファイルはすべて削除(deleted file mode 100644 または deleted file mode 100755)されており、新しい内容に置き換えられたり、修正されたりしたわけではありません。

コアとなるコードの解説

削除された各ファイルは、Go言語の初期のコンパイラまたは関連ツールの特定の機能モジュールを構成していました。

  • usr/gri/gosrc/ast.go: 抽象構文木(AST)のノード構造と関連する型定義が含まれていました。Goプログラムの構文構造をメモリ上で表現するための基盤です。
  • usr/gri/gosrc/base.go: 他のファイルで利用される基本的な型や構造、ユーティリティ関数などが定義されていた可能性があります。
  • usr/gri/gosrc/compilation.go: コンパイルプロセス全体を管理するロジック、エラーハンドリング、インポート/エクスポートの呼び出しなどが含まれていました。
  • usr/gri/gosrc/decls.go: 宣言(変数、型、関数など)の処理や、それに関連するテストコードが含まれていた可能性があります。
  • usr/gri/gosrc/export.go: コンパイルされたパッケージのインターフェース情報(型、関数シグネチャなど)をバイナリ形式で出力(エクスポート)するロジックが含まれていました。これは、他のパッケージがそのパッケージをインポートする際に必要となります。
  • usr/gri/gosrc/expr.go: 式の解析、型チェック、評価など、式に関連する操作のロジックが含まれていました。
  • usr/gri/gosrc/globals.go: コンパイラ全体で共有されるグローバルな定数、型定義、データ構造(例: Type, Object, Scope, Package, Compilationの定義)が含まれていました。これは、Go言語の初期のコンパイラが、現在のGo言語のパッケージシステムとは異なる方法で、これらのコアな型を共有していたことを示唆しています。
  • usr/gri/gosrc/go.go: Goコンパイラのメインエントリポイントであり、コマンドライン引数の解析、コンパイル環境のセットアップ、コンパイルプロセスの開始などを行っていました。
  • usr/gri/gosrc/import.go: エクスポートされたパッケージのインターフェース情報をバイナリ形式で読み込み(インポート)し、現在のコンパイル環境に統合するロジックが含まれていました。
  • usr/gri/gosrc/object.go: プログラム内の様々な「オブジェクト」(定数、型、変数、関数、組み込み関数、パッケージ、ラベルなど)の種類を定義する定数と、それらの種類を文字列に変換するヘルパー関数が含まれていました。
  • usr/gri/gosrc/parser.go: 字句解析器(scanner)から受け取ったトークンを基に、Goソースコードの構文解析を行い、ASTを構築するロジックが含まれていました。このファイルは、削除されたファイルの中で最も行数が多く(2041行)、コンパイラの複雑な部分であったことが伺えます。
  • usr/gri/gosrc/platform.go: オペレーティングシステムやハードウェアアーキテクチャに依存する低レベルな処理(ファイルI/O、環境変数の読み取りなど)を抽象化するインターフェースや実装が含まれていました。
  • usr/gri/gosrc/printer.go: ASTを走査し、整形されたGoソースコードを出力するロジックが含まれていました。これは、gofmtのようなコードフォーマッタの核となる機能です。
  • usr/gri/gosrc/scanner.go: Goソースコードを読み込み、トークンに分解する字句解析器のロジックが含まれていました。
  • usr/gri/gosrc/test_scanner.go: scanner.goのテストコードが含まれていました。
  • usr/gri/gosrc/type.go: Go言語の型システム(基本型、複合型、関数型など)の定義と、型に関連する操作(型の一致判定など)のロジックが含まれていました。
  • usr/gri/gosrc/universe.go: Go言語の「ユニバーススコープ」に属する組み込みの識別子(例: int, bool, true, false, nilなど)や、それらの型定義が含まれていました。
  • usr/gri/gosrc/utils.go: 様々な汎用ユーティリティ関数が含まれていました。
  • usr/gri/gosrc/verifier.go: ASTに対してセマンティックな検証(型チェック、スコープ解決など)を行うロジックが含まれていました。

これらのファイルが削除されたことは、Go言語のコンパイラとツールチェインが、よりモジュール化され、効率的で、現在のGo言語の設計思想に合致する新しい実装へと完全に移行したことを意味します。

関連リンク

  • GitHubコミットページ: https://github.com/golang/go/commit/699721a0ea2efbf7bd241d9e66a6a550b7c51d69

参考にした情報源リンク

  • Go言語の公式ドキュメント (Go言語の歴史や設計思想に関する情報)
  • Go言語の初期のコミット履歴 (GitHubリポジトリ)
  • gofmtツールの歴史と機能に関する情報
  • コンパイラ設計に関する一般的な知識
  • Go言語のパッケージシステムに関する情報
  • Robert Griesemer氏のGo言語に関する講演や記事