LEDライトの発光を用いた"Hello, World!"の表示

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

利用目的

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

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

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

歴史

ブライアン・カーニハンによる"Hello, world"プログラム (1978)

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

#include <stdio.h>

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

C言語バージョンの以前にはカーニハンの前著「A Tutorial Introduction to the Language B」(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言語は多言語対応プログラムを紹介し[4]Sun JavaSVGで文言を表し[5]XL言語は3Dグラフィックの地球で見せている[6]hello, worldの出力には、PerlPythonRubyのような言語では一行だけを必要とするかもしれないが、一方で低レベルのアセンブリ言語では数十行の命令を必要とする。マーク・ガスディアル英語版とエリオット・ソロウェイは、グラフィックスやサウンドがテキストより簡単に操作できるようになり、「Hello, World!」のテスト文言が過去のものとなる可能性があることを示唆している。

種類

PSP Homebrew実証実験のためのハロー・ワールド

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

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

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

脚注

  1. ^ 『プログラミング言語C 第2版』(訳書訂正版)「第1章 やさしい入門」
  2. ^ Kernighan, Brian W.; Ritchie, Dennis M. (1978). The C Programming Language (1st ed.). Englewood Cliffs, NJ: Prentice Hall. ISBN 0-13-110163-3. 
  3. ^ Programming in C: A Tutorial”. 2016年11月28日閲覧。
  4. ^ A Tutorial for the Go Programming Language. Archived July 26, 2010, at the Wayback Machine. The Go Programming Language. Retrieved July 26, 2011.
  5. ^ Jolif, Christophe (2003年1月). “Bringing SVG Power to Java Applications”. Sun Developer Network 
  6. ^ de Dinechin, Christophe (2010年7月24日). “Hello world!”. Grenouille Bouillie. 2018年2月4日閲覧。

外部リンク