「D」の版間の差分
(同期) |
|||
33行目: | 33行目: | ||
主な違いは dmd のバックエンドは FOSS ではない (Symantec からライセンスを受けている) のに対して、他のコンパイラは完全な FOSS です。3つのコンパイラはどれも同一のフロントエンドコードを共有しているため、言語機能のサポートについては (フロントエンドのバージョンが同じなら) ほとんど同等です。 |
主な違いは dmd のバックエンドは FOSS ではない (Symantec からライセンスを受けている) のに対して、他のコンパイラは完全な FOSS です。3つのコンパイラはどれも同一のフロントエンドコードを共有しているため、言語機能のサポートについては (フロントエンドのバージョンが同じなら) ほとんど同等です。 |
||
+ | |||
+ | == hardening-wrapper == |
||
+ | |||
+ | Arch Linux の {{Pkg|dmd}} と {{Pkg|libphobos}} パッケージは PIC のサポートを有効にせずビルドされています。{{Pkg|hardening-wrapper}} を使用して実行ファイルをビルドすると強制的に PIC のサポートが有効になり以下のようにエラーが表示されます: |
||
+ | |||
+ | {{hc|$ 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}} |
||
+ | |||
+ | 以下のような解決方法があります: |
||
+ | |||
+ | * {{Pkg|hardening-wrapper}} をアンインストールする。 |
||
+ | * PIC のサポートが有効になっている {{Pkg|gdc}} コンパイラを使用する: {{bc|gdc app.d}} もしくは {{Pkg|dub}} を使用する場合: {{bc|1=dub --compiler=gdc}} |
||
+ | * [[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}} |
||
+ | |||
+ | 詳しくは以下のページを参照: |
||
+ | * https://issues.dlang.org/show_bug.cgi?id=15054 |
||
+ | * {{Bug|34983}} |
||
+ | * {{Bug|46260}} |
||
+ | * http://wiki.dlang.org/Installing_LDC_on_Gentoo#Hardened_Gentoo |
||
== 便利なライブラリとバインディング == |
== 便利なライブラリとバインディング == |
||
43行目: | 66行目: | ||
== 参照 == |
== 参照 == |
||
− | * [https://github.com/D-Programming-Language/phobos/ |
+ | * [https://github.com/D-Programming-Language/phobos/ GitHub の Phobos リポジトリ] - 公式リポジトリ |
* [http://dlang.org/ The D Programming Language] - D の公式ホームページ |
* [http://dlang.org/ The D Programming Language] - D の公式ホームページ |
||
* [http://planet.dsource.org/ Planet D] - D に関するブログまとめ |
* [http://planet.dsource.org/ Planet D] - D に関するブログまとめ |
2017年3月8日 (水) 22:26時点における版
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 ですが、gdc (GNU D Compiler) や ldc (LLVM D Compiler) も人気があります。どちらも [community] に入っています。
主な違いは dmd のバックエンドは FOSS ではない (Symantec からライセンスを受けている) のに対して、他のコンパイラは完全な FOSS です。3つのコンパイラはどれも同一のフロントエンドコードを共有しているため、言語機能のサポートについては (フロントエンドのバージョンが同じなら) ほとんど同等です。
hardening-wrapper
Arch Linux の dmd と libphobos パッケージは 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 のサポートが有効になっている gdc コンパイラを使用する:
gdc app.d
もしくは dub を使用する場合:dub --compiler=gdc
- abs を使って
-fPIC
フラグを有効にして dmd と libphobos を再コンパイルする。 - clang のリンカを使う:
CC=/usr/bin/clang dmd app.d
もしくは dub を使用する場合:CC=/usr/bin/clang dub
詳しくは以下のページを参照:
- https://issues.dlang.org/show_bug.cgi?id=15054
- FS#34983
- FS#46260
- http://wiki.dlang.org/Installing_LDC_on_Gentoo#Hardened_Gentoo
便利なライブラリとバインディング
- DDT - D のプロジェクトとコード管理のための Eclipse プラグイン
- Mono-D - D でプログラミングするための MonoDevelop アドイン
- QtD - D の Qt バインディング
- GtkD - D のオブジェクト指向 GTK+ ラッパー
- Derelict - マルチメディアライブラリのバインディング、ゲーム開発向け
- Deimos - 様々な C ライブラリのバインディングが大量に揃っているプロジェクト
参照
- GitHub の Phobos リポジトリ - 公式リポジトリ
- The D Programming Language - D の公式ホームページ
- Planet D - D に関するブログまとめ