「D」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(同期)
(Pkg/AUR テンプレートの更新)
30行目: 30行目:
   
 
== 代替コンパイラ ==
 
== 代替コンパイラ ==
コンパイラに関しては複数の選択肢が存在します。標準のコンパイラ (リファレンス実装) は dmd ですが、{{Pkg|gdc}} (GNU D Compiler) や {{Pkg|ldc}} (LLVM D Compiler) も人気があります。どちらも [community] に入っています。
+
コンパイラに関しては複数の選択肢が存在します。標準のコンパイラ (リファレンス実装) は dmd ですが、{{AUR|gdc}} (GNU D Compiler) や {{Pkg|ldc}} (LLVM D Compiler) も人気があります。どちらも [community] に入っています。
   
 
主な違いは dmd のバックエンドは FOSS ではない (Symantec からライセンスを受けている) のに対して、他のコンパイラは完全な FOSS です。3つのコンパイラはどれも同一のフロントエンドコードを共有しているため、言語機能のサポートについては (フロントエンドのバージョンが同じなら) ほとんど同等です。
 
主な違いは dmd のバックエンドは FOSS ではない (Symantec からライセンスを受けている) のに対して、他のコンパイラは完全な FOSS です。3つのコンパイラはどれも同一のフロントエンドコードを共有しているため、言語機能のサポートについては (フロントエンドのバージョンが同じなら) ほとんど同等です。
47行目: 47行目:
 
 
 
* {{Pkg|hardening-wrapper}} をアンインストールする。
 
* {{Pkg|hardening-wrapper}} をアンインストールする。
* PIC のサポートが有効になっている {{Pkg|gdc}} コンパイラを使用する: {{bc|gdc app.d}} もしくは {{Pkg|dub}} を使用する場合: {{bc|1=dub --compiler=gdc}}
+
* PIC のサポートが有効になっている {{AUR|gdc}} コンパイラを使用する: {{bc|gdc app.d}} もしくは {{Pkg|dub}} を使用する場合: {{bc|1=dub --compiler=gdc}}
 
* [[abs]] を使って {{ic|-fPIC}} フラグを有効にして {{Pkg|dmd}} と {{Pkg|libphobos}} を再コンパイルする。
 
* [[abs]] を使って {{ic|-fPIC}} フラグを有効にして {{Pkg|dmd}} と {{Pkg|libphobos}} を再コンパイルする。
 
* clang のリンカを使う: {{bc|1=CC=/usr/bin/clang dmd app.d}} もしくは dub を使用する場合: {{bc|1=CC=/usr/bin/clang dub}}
 
* clang のリンカを使う: {{bc|1=CC=/usr/bin/clang dmd app.d}} もしくは dub を使用する場合: {{bc|1=CC=/usr/bin/clang dub}}

2017年7月13日 (木) 00:08時点における版

Wikipedia:ja:D言語 より:

D プログラミング言語 (D) は Digital Mars の Walter Bright によるオブジェクト指向・命令型・マルチパラダイムのシステムプログラミング言語です。C++ のリエンジニアリングが元で作られ、C++ の影響を強く受けていますが C++ の派生言語ではありません。D は C++ の機能を再設計すると共に Java, C#, Eiffel などのプログラミング言語で使われている発想から着想を得ています。

インストール

D でプログラムを組むには2つのものが必要になります: D コンパイラとライブラリです。手早くプログラミングを始めたいときは dlang-dmd パッケージグループをインストールするのが一番楽です。このパッケージグループには公式コンパイラ (dmd), 標準ライブラリ libphobos-devel, 開発ツールのコレクション dtools が含まれています。

インストールのテスト

シンプルな Hello World プログラムでインストールが正しく完了できているか確認できます:

import std.stdio;

void main() {
   string yourName = "archer";
   writefln("Hello %s!", yourName);
}

ファイルに上記のコードを貼り付けて hello.d という名前を付けて、ファイルと同じディレクトリで次を実行:

$ dmd hello.d

そうしたら次のコマンドでプログラムを実行することができるはずです:

$ ./hello

また、ディレクトリにオブジェクトファイルを保存せずにコンパイル・実行をしたいときは:

$ dmd -run hello.d

代替コンパイラ

コンパイラに関しては複数の選択肢が存在します。標準のコンパイラ (リファレンス実装) は dmd ですが、gdcAUR (GNU D Compiler) や ldc (LLVM D Compiler) も人気があります。どちらも [community] に入っています。

主な違いは dmd のバックエンドは FOSS ではない (Symantec からライセンスを受けている) のに対して、他のコンパイラは完全な FOSS です。3つのコンパイラはどれも同一のフロントエンドコードを共有しているため、言語機能のサポートについては (フロントエンドのバージョンが同じなら) ほとんど同等です。

hardening-wrapper

Arch Linux の dmdlibphobos パッケージは PIC のサポートを有効にせずビルドされています。hardening-wrapper を使用して実行ファイルをビルドすると強制的に PIC のサポートが有効になり以下のようにエラーが表示されます:

$ dmd app.d
/usr/bin/ld: app.o: relocation R_X86_64_32 against  `__dmd_personality_v0' can not be used when making a shared object;  recompile with -fPIC
app.o: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
--- errorlevel 1

以下のような解決方法があります:

  • hardening-wrapper をアンインストールする。
  • PIC のサポートが有効になっている gdcAUR コンパイラを使用する:
    gdc app.d
    もしくは dub を使用する場合:
    dub --compiler=gdc
  • abs を使って -fPIC フラグを有効にして dmdlibphobos を再コンパイルする。
  • clang のリンカを使う:
    CC=/usr/bin/clang dmd app.d
    もしくは dub を使用する場合:
    CC=/usr/bin/clang dub

詳しくは以下のページを参照:

便利なライブラリとバインディング

  • DDT - D のプロジェクトとコード管理のための Eclipse プラグイン
  • Mono-D - D でプログラミングするための MonoDevelop アドイン
  • QtD - D の Qt バインディング
  • GtkD - D のオブジェクト指向 GTK+ ラッパー
  • Derelict - マルチメディアライブラリのバインディング、ゲーム開発向け
  • Deimos - 様々な C ライブラリのバインディングが大量に揃っているプロジェクト

参照