D言語/インストールおよび実行方法
D言語の処理系には、2022年7月現在以下の3つがあります。
- DMD - Digital Mars D compiler は、Walter Bright 氏によるの D コンパイラーのリファレンス実装で、w:Boost Software License の下でオープンソース化されています。 DMD フロントエンドは GCC と LDC で共有されており、コンパイラー間の互換性を高めるために使用されています。かつてはC++で記述されていましたが、現在はフルセルフホスト化されています。
- 公式サイト - https://dlang.org/
- 公式リポジトリー - https://github.com/dlang/dmd
- GCC - The GNU Compiler Collection は、Free Software foundation により、GNU General Public Licenseの下でオープンソースで公開されるマルチプラットフォーム多言語処理系で、2018年10月29日にGDCがGCC 9にマージされました。
- 公式サイト - https://gcc.gnu.org/
- 公式リポジトリー - https://gcc.gnu.org/git/gcc.git
- LDC - The LLVM-based D Compiler は、DMDフロントエンドをベースにしたコンパイラーで、コンパイラーインフラストラクチャーとバックエンドとしてLLVMを使用します。最初のリリース品質のバージョンは2009年1月9日に公開されました。
- 公式サイト - http://wiki.dlang.org/LDC
- 公式リポジトリー - https://github.com/ldc-developers/ldc
インストール方法
編集Winowsでは、D言語の開発元のDigitalMarsが配布しているコンパイラであるDMDをインストールするのがラクです。
Linuxでは、もしGnome系のデスクトップ環境を使っているなら、GCC(GNU Compiler Collection)を D言語用に拡張したコンパイラである gcc-gdc をインストールするのがラクです。 gcc-gdc は略して「gdc」とも呼びます。GNUとは、主にオープンソース関連のアプリケーションを開発しているコミュニティのひとつです。
gcc および gdc は、DMDとは別のコンパイラですので、混同しないように。gcc の開発元である GNU は、D言語以外の他の多くのプログラム言語のコンパイラも開発しています。
DMDのダウンロード/インストール
編集D言語の公式ホームページから環境に合わせてインストーラ、あるいはzipファイル等をダウンロードしてください。
Windows版もLinux版も存在します。
ですが、Windows版の場合、日本語対応が不十分で、文字化けが起こります。
なので、英語だけでWindows版D言語を使うか、あるいは日本語を表示したいならLinux版を使うと良いでしょう。
Windows版の場合、コマンドプロンプトからD言語を使えるようにするため、D言語インストーラーに出てくる「DMC」にもチェックを入れて、DMCを追加インストールしてください。
インストールの設定時、DMD動作環境として MinGWを使うか、Visual Studio を使うかを聞かれます。初心者には MinGW のほうが設定がラクでしょう。(Visual Stuido は設定が複雑だったり、アカウント登録が必要だったりと、なにかとメンドウです。)
さて、DMDがインストールが出来たら
rdmd -v
でバージョン確認します。
rdmd build 20200611 Usage: rdmd [RDMD AND DMD OPTIONS]... program [PROGRAM OPTIONS]... Builds (with dependents) and runs a D program. Example: rdmd -release myprog --myprogparm 5
- (後略)
のように、表示されます。
gdcをインストールする場合
編集OS が Fedora Linux の場合なら、コマンド
sudo dnf install gcc-gdc
または
sudo dnf install gdc
でインストールできます。
- バージョン確認
インストールに成功したと思ったら、動作確認を兼ねてバージョン表示をしてみましょう。コマンド
gdc --version
を実行すれば
gdc (GCC) 11.2.1 20210728 (Red Hat 11.2.1-1) Copyright (C) 2021 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
のように表示されます。
ldc と dlang-tools
編集ldcは、LLVMをベースに開発されたD言語処理系です[1]。 dlang-toolsは、DMDとともに再配布されるツールや、様々なビルドタスクで内部的に使用される様々なツールで、単体でもリリースされています[2]。
両方ともFreeBSDのPort Collectionに lang/ldc と lang/dlang-tools の名前でエントリーがあるので
- pkg
# pkg install lang/ldc lang/dlang-tools
- ports
# make -C /usr/ports/lang/ldc all install clean # make -C /usr/ports/lang/dlang-tools all install clean
でインストールできます。
ldc のコマンド名は ldc2 です。バージョンを確認確認してみます(サポートターゲットの数が多すぎるので head で割愛しました)。
- バージョン確認
% ldc2 --version | head LDC - the LLVM D compiler (1.23.0): based on DMD v2.093.1 and LLVM 10.0.1 built with LDC - the LLVM D compiler (0.17.6) Default target: x86_64-portbld-freebsd13.0 Host CPU: cascadelake http://dlang.org - http://wiki.dlang.org/LDC Registered Targets: aarch64 - AArch64 (little endian) aarch64_32 - AArch64 (little endian ILP32)
dlang-toolsには、rdmdなどが含まれているので
- バージョン確認
% rdmd -v | head rdmd build 20220408 Usage: rdmd [RDMD AND DMD OPTIONS]... program [PROGRAM OPTIONS]... Builds (with dependents) and runs a D program. Example: rdmd -release myprog --myprogparm 5 Any option to be passed to the compiler must occur before the program name. In addition to compiler options, rdmd recognizes the following options: --build-only just build the executable, don't run it --chatty write compiler commands to stdout before executing them --compiler=comp use the specified compiler (e.g. gdmd) instead of ldmd2 % cat hello.d import std.stdio; void main(){ writeln("Hello world!"); } $ rdmd hello Hello world!
この様に、DMDを使っているのと変わらないコンパイル環境が用意できます。
実行の仕方
編集DMDで実行する場合と、gdcでインストールする場合とで、実行の方法が違います。
DMDの場合
編集コマンドプロンプトでカレントディレクトリを合わせた後
dmd 対象ファイル名.d 対象ファイル名.exe
でコンパイルと実行。もしくは
rdmd 対象ファイル名
の一行でコンパイルと同時に実行できます。
DMDとは、D言語の公式コンパイラです。
gdcの場合
編集コマンド
gdc ファイル名.d
です。
ファイル名を保存する際、ファイルの末尾に拡張子 d がついてないとエラーになりますので、コンパイルできません。なので、ファイル名はたとえば「test.d」や「hello.d」のような名称になります。
Linux の場合、特に出力ファイル名などを命名しなければ、「a.out」というファイル名になるので
./a.out
で実行できます。
※ 参考: Hello World
編集- hello.d
import std.stdio; void main() { writeln("Hello World!"); }
- ※ 文法の解説については省略します(別ページで解説しています)。ファイル実行のチェックの際、実行するコードとして活用してください。