Hello world

Hello world（ハロー・ワールド）は、画面に「Hello world」やそれに類する文字列を表示するプログラムの通称である。多くのプログラミング言語において非常に単純なプログラムであり、プログラミング言語の入門書で、プログラムを動かすためのプログラミング言語の基本文法の解説例として提示される。

 利用目的 
ハロー・ワールドは伝統的にプログラミング言語をプログラム初心者に紹介するために使われる。また、ハロー・ワールドは、プログラミング言語が正しくインストールされていることの健全性テストに、およびプログラミング言語のコンパイルや実行方法を理解するためにも使用される。

『プログラミング言語C』（第2版）では、初めに「新しいプログラミング言語を学ぶ唯一の道は、それでプログラムを書いてみることである」との考えが示され、プログラムを入力して実行し、出力を確認することを習得すれば、言語の他の要素を学ぶことは容易だと訓示される。そして、「hello, world という単語を印字せよ」との例題が示される。この例題について、まずプログラムのソースコードが示され、次にUNIXにおける典型的なコンパイル・実行方法が例示される。そして、このプログラムの詳細が解説される『プログラミング言語C 第2版』（訳書訂正版）「第1章 やさしい入門」。

大抵のプログラミング言語の入門書では、このプログラムを作ることを最初の例題としており、ほとんどの場合、新しくプログラミング言語を習得する際に最初に作るのがこのプログラムである。そのため、「世界一有名なプログラム」と呼ばれることもある。

 歴史 

プログラミングできるコンピュータの開発以来、小さなテストプログラムは存在してきたが、テスト文言として「Hello, World!」を使う習慣はブライアン・カーニハンとデニス・リッチーによる著書「プログラミング言語C」（1978年）のC言語バージョンから始まったと言われている。同著書のプログラム例はhello, world（大文字なし、感嘆符なし）を標準出力に出力する。この例はブライアン・カーニハンがまとめたベル研究所の内部資料「Programming in C: A Tutorial」（1974年）を継承したものである。

#include <stdio.h>

main( )
{
  printf("hello, world\n");
}

C言語バージョンの以前にはカーニハンの前著「」（1973年）での例があったが、存在が知られている最初のバージョンのプログラムは外部変数を説明するための例だった。プログラムはターミナルに改行文字を含むhello, worldを出力するものだった。B言語では文字数の長さがASCII文字の4文字までという制限があったため、文言は複数の文字列に分割されていた。前節の例はターミナルにhi!を出力するもので、hello, worldという文言はそれを表す為に複数の文字列を必要とする少し長い挨拶文として紹介された。

main(){
  extrn a,b,c;
  putchar(a); putchar(b); putchar(c); putchar('!*n');
}

a 'hell';
b 'o, w';
c 'orld';

hello, worldの起源はBCPL（1967年）であるとも言われている。この主張はBCPLの発明者ブライアン・カーニハンとマーティン・リチャーズのアーカイブノートに依るものである。

モダンな言語においてHello Worldは洗練された変化を遂げている。例えば、Go言語は多言語対応プログラムを紹介しA Tutorial for the Go Programming Language.  The Go Programming Language. Retrieved July 26, 2011.、Sun JavaはSVGで文言を表し、XL言語は3Dグラフィックの地球で見せている 。hello, worldの出力には、Perl、Python、Rubyのような言語では一行だけを必要とするかもしれないが、一方で低レベルのアセンブリ言語では数十行の命令を必要とする。とエリオット・ソロウェイは、グラフィックスやサウンドがテキストより簡単に操作できるようになり、「Hello, World!」のテスト文言が過去のものとなる可能性があることを示唆している。

 種類 
この文言は句読点や頭文字の異なる多数の種類が存在している。その種類はコンマ「,」や感嘆符「!」の有無、頭文字の「H」および「W」が大文字かどうかを含む。いくつかの大文字のみサポートするシステム上の言語では「HELLO WORLD」のように異なる形式の実装を強制し、難解プログラミング言語でのハロー・ワールドはわずかに修正された文字列を出力する。「」以外の文言でも良いので、同様の意味で英語圏で用いられるスラング「Howdy」を使って、「」が用いられることもあり、日本語プログラミング言語では「Hello World」を直訳した「こんにちは世界」が用いられることもある。

利用目的にも異なる種類がある。LISP・ML・Haskellのような関数型プログラミング言語では、再帰手法を強調する関数型プログラミングの実例として利用されることがある。一方で、オリジナルの例は副作用を伴った純粋関数型言語に違反した入出力の例として見られる。アセンブリ言語・VHDLのような組み込みで使われる言語では、文言を出力することが追加のコンポーネントや他機器との連携なしでは難しい、もしくは、その手法が存在しないことの例として用いられる。マイクロコンピュータ・FPGA・CPLDなどの機器では、制御間隔と機器連携を実験するLEDの発光（Lチカ）が文言出力の代わりに利用される。

DebianとUbuntuはaptパッケージシステムでハロー・ワールドプログラムを提供している。利用者はapt-get install helloと入力すると依存ソフトウェアと一緒に同プログラムがインストールされる。それ自身には意味はないが、そのプログラムが健全性テストを提供すると同時に、初心者にパッケージのインストール方法を伝えるシンプルな例となる。しかし、開発者にとってはより重要な利便性があり、手作業だったりdebhelperを使ってのdebパッケージの作り方の良い例であり、GNU Helloを使ったバージョンはGNUプログラムの書き方の例となる。

 脚注 

外部リンク

 —  の初出とされる B. W. カーニハンによる B 言語チュートリアル (1973)
 - プログラミング技術向上による変化（冗談サイト）
 - プロジェクトによる実装。コーディングスタイルや、プロジェクトメンテナンスのサンプルとして運用されている。

Category:プログラミング・フォークロア
Category:アプリケーションソフト
Category:テストアイテム