Hello Worldプログラム

ほとんどのプログラミング言語の教科書で最初に紹介されるプログラムは、Hello Worldプログラムだ。この非常に短くシンプルなプログラムは、"Hello, World!"と表示して終了するだけだ。このプログラムは、その言語の重要な概念のいくつかを含んでいるため、重要だ。

以下はD言語のHello Worldプログラムだ。

import std.stdio;

void main() {
    writeln("Hello, World!");
}
D
hello_world.1

上記のソースコードは、Dコンパイラでコンパイルして実行可能なプログラムを生成する必要がある。

コンパイラのインストール

この章を書いている時点では、3つのDコンパイラから選択できる: dmd(Digital Marsコンパイラ)、gdc(GCCのDコンパイラ)、およびldc(LLVMコンパイラインフラストラクチャをターゲットとするDコンパイラ)。

dmdは、長年にわたるこの言語の設計および開発で使用されてきたDコンパイラだ。この本に掲載されている例題はすべて、dmdでテストされている。そのため、dmdから始めて、特に必要がない限りは他のコンパイラを試さない方が簡単だろう。この本に掲載されているコード例は、dmdバージョン2.098.1でコンパイルされている。

dmdの最新バージョンをインストールするには、Digital Marsのダウンロードページにアクセスし、お使いのコンピュータ環境に適したコンパイラビルドを選択。お使いのオペレーティングシステムおよびパッケージ管理システム、32ビットまたは64ビットのCPUおよびオペレーティングシステムに対応したdmdビルドを選択。D1コンパイラはインストールしてはいけない。この本では、Dバージョン2についてのみ説明している。

インストール手順は環境によって異なるが、画面の指示に従って数回クリックするだけの簡単な操作で完了するはずだ。

ソースファイル

プログラマがDコンパイラでコンパイルするために書くファイルは、ソースファイルと呼ばれる。Dは通常、コンパイル言語として使用されるため、ソースファイル自体は実行可能なプログラムではない。ソースファイルは、コンパイラによって実行可能なプログラムに変換する必要がある。

他のファイルと同様、ソースファイルにも名前が必要だ。ファイルシステムで有効な名前であれば何でもかまいないが、開発環境、プログラミングツール、およびプログラマーは、Dソースファイルには.dというファイル拡張子を使用するのが通例である。例えば、test.dgame.dinvoice.dなどは、Dソースファイルに適した名前だ。

"hello world"プログラムのコンパイル

テキストエディタ(または後述のIDE)でソースファイルを作成する。上記のhello worldプログラムをテキストファイルにコピーまたは入力し、hello.dという名前で保存する。

コンパイラは、このソースコードの構文が正しい(つまり、言語のルールに準拠している)ことを確認し、それをマシンコードに翻訳してプログラムを作成する。プログラムをコンパイルするには、次の手順に従ってほしい:

  1. ターミナルウィンドウを開く。
  2. hello.dを保存したディレクトリに移動する。
  3. 次のコマンドを入力する($文字は入力してはいけない。これはコマンドラインプロンプトを示すものだからだ)。
dmd hello.d
Bash

誤りがない場合、何も起こらないように見えるかもしれない。しかし、これは正常に処理されたことを意味する。コンパイラによって作成された実行可能ファイル"hello"(Windowsの場合は"hello.exe")が作成されているはずだ。

コンパイラが代わりにメッセージを表示した場合は、プログラムコードをコピーする際に誤りがあった可能性がある。誤りを特定し、修正して、再コンパイルを試みてほしい。プログラミングでは多くの誤りを犯すのが普通なので、修正とコンパイルのプロセスに慣れていくだろう。

プログラムの作成に成功したら、実行する実行可能プログラムの名前を入力。プログラムが"Hello, World!"と表示されるはずだ。

./hello      ← running the program
こんにちは、世界!  ← それが出力するメッセージ
Bash

おめでとう!最初の Dプログラムが期待通りに動作した。

コンパイラスイッチ

コンパイラには、プログラムのコンパイル方法に影響を与える多くのコマンドラインスイッチがある。コンパイラスイッチの一覧を表示するには、コンパイラの名前だけを入力する:

dmd    ← enter just the name
DMD64 D Compiler v2.098.1
...
  -de            非推奨機能の使用をエラーとして表示する(コンパイルを停止する)
...
  -unittest      ユニットテストでコンパイルする
...
  -w             警告をエラーとして扱う(コンパイルが停止する)
...
Bash

上記の省略表示は、私が常に使用することをおすすめするコマンドラインスイッチのみを表示している。この章の"Hello, World"プログラムでは違いはないが、以下のコマンドラインはユニットテストを有効にし、警告や非推奨機能の表示を許可しない設定でプログラムをコンパイルする。これらのスイッチやその他のスイッチについては、後続の章で詳細に説明する:

dmd hello.d -de -w -unittest
Bash

dmdのコマンドラインスイッチの完全な一覧は、DMDコンパイラドキュメントに記載されている。

もう1つ、便利なコマンドラインスイッチとして‑runがある。これは、ソースコードをコンパイルし、実行可能プログラムを生成し、単一のコマンドで実行する。‑runはコンパイラスイッチの最後で、ソースファイル名の直前に指定する必要がある:

dmd -de -w -unittest -run hello.d
こんにちは、世界!  ← プログラムが自動的に実行される
Bash
IDE

コンパイラに加えて、IDE(統合開発環境)のインストールも検討。IDEは、プログラムの開発を簡素化するために、コードの記述、コンパイル、デバッグのステップを簡素化するよう設計されている。

IDEをインストールした場合、プログラムのコンパイルと実行は、IDEのキーを押すかボタンをクリックするだけで簡単に行える。それでも、ターミナルウィンドウで手動でプログラムをコンパイルする方法を習得することをおすすめする。

IDEをインストールする場合は、dlang.orgのIDEsページで利用可能なIDEのリストを確認。

hello worldプログラムの内容

この短いプログラムで登場したDの概念を簡単にリストアップする。

コア機能: すべての言語は、その構文、基本型、キーワード、規則などを定義している。これらが、その言語のコア機能となる。括弧、セミコロン、mainvoidなどの単語は、すべてDの規則に従って配置されている。これらは、英語の規則(主語、動詞、句読点、文の構造など)と似ている。

ライブラリと関数: コア機能は、言語の構造のみを定義する。これらは、関数やユーザー型を定義するために使用され、それらはライブラリの構築に使用される。ライブラリは、プログラムの目的を達成するためにプログラムにリンクされる、再利用可能なプログラム部分のコレクションだ。

writeln上記は、Dの標準ライブラリにある 関数だ。その名前が示すとおり、1行のテキストを出力するために使われる。

モジュール:ライブラリの内容は、その目的によってタスクのタイプごとにグループ化されている。このようなグループをモジュールと呼ぶ。このプログラムで使用する唯一のモジュールは、データの入力と出力を処理するstd.stdioだ。

文字と文字列:次のような式は "Hello, World!"は文字列と呼ばれ、文字列の要素は文字と呼ばれる。このプログラム内の唯一の文字列には、文字 'H''e', '!'、およびその他の文字を含んでいる。

演算の順序:プログラムは、特定の順序で演算を実行してタスクを完了する。これらのタスクは、mainという関数に記述されている演算から始まる。このプログラムで唯一の演算は、"Hello world!"と書き込むことだ。

大文字と小文字の区別:文字列内の文字は任意に入力できるが、それ以外の文字はプログラムに記述されているとおりに正確に入力する必要がある。これは、Dプログラムでは大文字と小文字が区別されるためだ。例えば、writelnWritelnは2つの異なる名前だ。

キーワード: 言語のコア機能の一部である特別な単語はキーワードだ。このような単語は言語自体のために予約されており、Dプログラムでは他の目的には使用できない。このプログラムには2つのキーワードがある。importは、プログラムにモジュールを導入するために使用される。voidは、ここでは"何も返さない"という意味である。

D言語のキーワードの完全な一覧は、abstractaliasalignasmassertautobodyboolbreakbytecasecastcatchcdoublecentcfloatcharclassconstcontinuecrealdchardebugdefaultdelegatedeletedeprecateddodoubleelseenumexportexternfalsefinalfinallyfloatforforeachforeach_reversefunctiongotoidoubleififloatimmutableimportininoutintinterfaceinvariantirealislazylongmacromixinmodulenewnothrownulloutoverridepackagepragmaprivateprotectedpublicpurerealrefreturnscopesharedshortstaticstructsuperswitchsynchronizedtemplatethisthrowtruetrytypedeftypeidtypeofubyteucentuintulongunionunittestushortversionvoidvolatilewcharwhilewith__FILE____FILE_FULL_PATH____MODULE____LINE____FUNCTION____PRETTY_FUNCTION____gshared__traits__vector、および__parameters

これらのキーワードについては、以下のものを除き、今後の章で取り上げる。 asmおよび __vectorは本書の範囲外である。bodydeletetypedef、およびvolatileは非推奨だ。macroは、現時点ではDでは使用されていない。

演習
  1. プログラムの出力を別のものに変更。
  2. プログラムを1行以上の出力になるように変更。これを行うには、プログラムにwriteln行を1行追加。
  3. 他の変更を加えた後、プログラムをコンパイルしてみてみよう。例えば、writelnの行の末尾のセミコロンを削除し、コンパイルエラーが発生するかどうかを確認。