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

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

このコミットは、プログラミングの世界で最も象徴的なプログラムの一つである「Hello, World!」の初期の実装を示しています。特に、Brian Kernighan氏によるものであり、プログラミング言語の学習や環境設定の確認における「Hello, World!」の重要性を確立する上で歴史的な意義を持つコミットです。

コミット

commit 7d7c6a97f815e9279d08cfaea7d5efb5e90695a8
Author: Brian Kernighan <bwk>
Date:   Tue Jul 18 19:05:45 1972 -0500

    hello, world

    R=ken
    DELTA=7  (7 added, 0 deleted, 0 changed)

 src/pkg/debug/macho/testdata/hello.b | 7 +++++++
 1 file changed, 7 insertions(+)

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

https://github.com/golang/go/commit/7d7c6a97f815e9279d08cfaea7d5efb5e90695a8

元コミット内容

コミットメッセージは非常に簡潔で、「hello, world」とだけ記されています。これは、このコミットが「Hello, World!」プログラムの追加であることを明確に示しています。また、「R=ken」はレビュー担当者がKen Thompson氏であることを示唆しており、当時のベル研究所における共同作業の文化を垣間見ることができます。「DELTA=7 (7 added, 0 deleted, 0 changed)」は、7行が追加され、変更や削除はなかったことを示しています。

変更の背景

このコミットは、1972年7月18日にBrian Kernighan氏によって行われました。Brian Kernighan氏は、プログラミングにおける「Hello, World!」プログラムの普及に大きく貢献した人物として広く知られています。特に、1972年にベル研究所で執筆された「A Tutorial Introduction to the Language B」というドキュメントでこのフレーズを使用し、これがプログラミング文献における「Hello, World!」の最初の記録された事例とされています。

このコミットは、Go言語のリポジトリに存在していますが、コミットの日付が1972年であることから、これはGo言語が誕生するはるか以前の、歴史的なコミットを何らかの形で取り込んだものであると考えられます。おそらく、Go言語のツールやテストデータの一部として、歴史的なプログラミングの例が参照されている可能性があります。このコミット自体は、Go言語の初期開発とは直接関係なく、プログラミングの歴史における重要なマイルストーンを象徴するものです。

前提知識の解説

「Hello, World!」プログラムとは

「Hello, World!」プログラムは、コンピュータプログラミングにおいて、画面に「Hello, World!」という文字列を出力する非常にシンプルなプログラムです。これは、新しいプログラミング言語を学ぶ際の最初のステップとして、あるいは開発環境が正しく設定されているかを確認するための基本的なテストとして、世界中で広く使われています。

その重要性は以下の点にあります。

  • 学習の導入: プログラミングの基本的な構文と、プログラムがどのように出力を生成するかを理解するための最も簡単な方法を提供します。
  • 環境設定の確認: コンパイラ、インタプリタ、または開発環境が正しくインストールされ、機能していることを確認するための迅速な手段となります。
  • 歴史的意義: Brian Kernighan氏とDennis Ritchie氏による「The C Programming Language」(1978年)という書籍によって広く普及し、プログラミング教育のデファクトスタンダードとなりました。

B言語について

B言語は、1969年にベル研究所のKen Thompsonによって開発されたプログラミング言語です。これは、BCPL(Basic Combined Programming Language)を基にしており、主にシステムプログラミングのために設計されました。B言語は、後のC言語の直接の祖先であり、C言語の多くの特徴や概念はB言語から派生しています。B言語はインタプリタ型言語であり、ポインタの概念を導入するなど、低レベルのメモリ操作を可能にしました。

技術的詳細

このコミットで変更されたファイルパスは src/pkg/debug/macho/testdata/hello.b です。

  • src/pkg/debug/macho/: このパスは、Go言語のソースツリー内で、デバッグ関連のパッケージ、特にMach-O形式(macOSやiOSで使用される実行可能ファイル形式)に関連する部分であることを示唆しています。
  • testdata/: このディレクトリは、通常、テストで使用されるデータファイルやサンプルコードを格納するために使用されます。
  • hello.b: ファイル名が hello.b であることから、これがB言語で書かれた「Hello, World!」プログラムであることが強く示唆されます。

このコミットがGo言語のリポジトリにあるにもかかわらず、B言語のファイルを追加しているのは、Go言語のデバッグツールやMach-Oパーサーのテストデータとして、歴史的なプログラムの例を使用しているためと考えられます。つまり、Go言語のツールが、B言語で書かれたMach-O形式の実行ファイルを正しく解析できることを検証するためのサンプルとして、この hello.b ファイルが利用されている可能性が高いです。

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

変更は src/pkg/debug/macho/testdata/hello.b ファイルに対して行われました。 このファイルに7行が追加されました。

 src/pkg/debug/macho/testdata/hello.b | 7 +++++++
 1 file changed, 7 insertions(+)

コアとなるコードの解説

実際の hello.b ファイルの内容はコミットログには含まれていませんが、B言語における典型的な「Hello, World!」プログラムは以下のような形式であったと推測されます。

main() {
    extrn putchar;
    putchar('h');
    putchar('e');
    putchar('l');
    putchar('l');
    putchar('o');
    putchar(',');
    putchar(' ');
    putchar('w');
    putchar('o');
    putchar('r');
    putchar('l');
    putchar('d');
    putchar('!');
    putchar('\n');
}

または、より簡潔な形式として、文字列リテラルを直接扱うものも考えられます。

main() {
    extrn puts;
    puts("hello, world");
}

このコミットでは7行が追加されたとあるため、putchar を複数回呼び出す形式(各文字ごとに1行、または関数呼び出しと文字が1行に収まる形式)や、より複雑な初期のB言語の構文が含まれていた可能性も考えられます。いずれにせよ、その目的は「hello, world」という文字列を標準出力に出力することにあります。

関連リンク

  • GitHub上のコミットページ: https://github.com/golang/go/commit/7d7c6a97f815e9279d08cfaea7d5efb5e90695a8

参考にした情報源リンク