D言語研究室



参考リンク

D言語関連の記事 - D言語の入門記事 - D言語コンパイラ本体、周辺ツール - D言語へのporting・ライブラリ関連 - D言語用サンプルプログラム関係 - 使えそうなライブラリ関係 - 統合開発環境eclipse - D言語のnewsgroup関連の話題 - おまけのリンク - D言語アンテナ

D言語関連の記事

DigitalMars - D言語[Digital Mars Dの翻訳] - D言語[Wiki/日本語] - D言語[Wiki/英語] - D言語[ニュースグループ/英語] - D言語[メーリングリスト/日本語]

DigitalMars

D言語のWin32版、Linux版の実装を公開しています。通称"DM"、D言語の開発元です。
当然、英語です。
http://www.digitalmars.com/

D言語[Digital Mars Dの翻訳]

DigitalMarsのDの日本語翻訳です。言語仕様が日本語で読めます。
http://www.kmonos.net/alang/d/

D言語[Wiki/日本語]

更新ペースがかなり速いです。
D言語のstdライブラリについての解説、サンプルプログラムがあります。
http://p17.aaacafe.ne.jp/~labamba/index.php

D言語[Wiki/英語]

D言語に関する英語のWikiです。
news group(英語)に目を通すぐらいなら、まずはここをざっと見たほうがいいでしょう。
http://www.wikiservice.at/d/wiki.cgi

D言語[ニュースグループ/英語]

本家DigitalMars社のニュースグループです。D言語のグループもあります。
http://www.digitalmars.com/NewsGroup.html

上のニュースグループはWeb上からもアクセス(閲覧・投稿)できます。次のはD言語のニュースグループに対するリンクです。
http://www.digitalmars.com/drn-bin/wwwnews?D

D言語[メーリングリスト/日本語]

日本語によるメーリングリストが無かったので作りました。

入会はこちらから:
http://www.freeml.com/ctrl/html/MLInfoForm/dlang@freeml.com

入会/退会フォームを利用するといいかも。
メールアドレスを入力して、参加ボタンを押すだけ。
D言語に関するML[日本語] に入ろう!! [MLの詳細]
メールアドレス

過去ログ閲覧
http://www.freeml.com/archive/dlang@freeml.com

D言語の入門記事

D言語−動くまで - Y.Tomino氏の入門記事[日本語] - D 始めました[日本語] - D言語チュートリアル[日本語] - D言語からSDLを使ったサンプル - D言語によるゲーム用ライブラリ作成プロジェクト[日本語] - 長 健太(ABA."Saba")氏の日誌 - 神戸大学情報統計部: KISC のWiki分家

ここでは、入門記事だけを集めてみることにしました。

言語仕様→D言語[Digital Mars Dの翻訳]
標準ライブラリのサンプル→D言語[Wiki/日本語]

D言語−動くまで

Win環境でのインストール〜eclipseのプラグインを使ってみるところまでをわかりやすく書かれています。

Dめも
http://muimi.com/j/lang/d/

Y.Tomino氏の入門記事[日本語]


D Try
http://hp.vector.co.jp/authors/VA028375/contents/D_try1.html
http://hp.vector.co.jp/authors/VA028375/contents/D_try2.html

D Way
http://hp.vector.co.jp/authors/VA028375/contents/D_way.html

D 始めました[日本語]

D言語用からSDLを用いる方法を書かれています。
サンプルとして潜水艦ゲームと、そのソースを公開されています。
http://user.ecc.u-tokyo.ac.jp/~s31552/wp/d/

D言語チュートリアル[日本語]

インストール手順から、各構文の使いかたetcを書かれています。日本語。
かなり詳しいので一読されることをお勧め。
http://www.kmonos.net/alang/etc/d.php

D言語からSDLを使ったサンプル

LinuxでD言語をインストール、D言語+SDLを用いて書かれた倉庫番があります。
http://edward.dip.jp/~hiki/is02/Dlang.html

D言語によるゲーム用ライブラリ作成プロジェクト[日本語]

このページです。(’’
SDLをD言語でwrapしたり、OpenGL+DirectXをwrapしたりします。
http://bm98.yaneu.com/dlang/

長 健太(ABA."Saba")氏の日誌

レトロモダンハイスピードシューティング、PARSEC47の作者の日誌、特にD言語を使い始めたころのものが、ちょうどコンパイラのバグについて書いてあったりして参考になります。
Dコンパイラを使いはじめたころの:
http://d.hatena.ne.jp/ABA/200308

最新の:
http://d.hatena.ne.jp/ABA/

神戸大学情報統計部: KISC のWiki分家

D言語のインストール〜入門記事,つまずきやすい点などをわかりやすく解説されています。また、D言語+SDLで作ったDetris(テトリスもどき)や、ライブラリの制作をされています。非常に参考になるページです。
http://black.rainy.jp/kiscwiki/index.php?FrontPage

D言語コンパイラ本体、周辺ツール

DigitalMars社(D言語本体) - OpenD[英語] - DIDE - D言語開発環境「蜻蛉切り(仮称)」 - C/C++ → D インラインアセンブラ変換スクリプト (Ruby)

DigitalMars社(D言語本体)

D言語のWin32版、Linux版の実装を公開しています。通称"DM"、D言語の開発元です。
当然、英語です。
http://www.digitalmars.com/d/dcompiler.html

OpenD[英語]

OpenなDの実装。
http://www.opend.org/

DIDE

D言語用のIDE。このリンク先のDIDE with Dをダウンロードすると、Dコンパイラのセットアップの手間も省けててっとり速いのですが、どうもこの付属のエディタでは日本語コメントが化けます。もちろん、フォント設定で日本語フォントを指定してもダメです。UNICODEで編集できれば良いのですが..。

http://www.atari-soldiers.com/dide.html

※ 作者のCharles氏が、今現在wstring化を進めておられるようです。後からのwstring化に苦労しておられるようです。

D言語開発環境「蜻蛉切り(仮称)」

D用のIDEです。キーワードのハイライト表示、ビルド、実行、doxygenの実行などが出来ます。将来的には、インテリセンスっぽい機能や、デバッグトレースの機能を計画されている模様。一押しです。

ひよこさんのサイト:
http://www.interq.or.jp/ruby/world/

downloadはこちらから:
http://www.interq.or.jp/ruby/world/d/download.htm

C/C++ → D インラインアセンブラ変換スクリプト (Ruby)

私がD言語のインラインアセンブラ使いにくーっていう話をしていたら、ロベールさんが作ってくださいました。
http://www1.kcn.ne.jp/~robe/d/

D言語へのporting・ライブラリ関連

porting方法 - D言語からC++のクラスライブラリを使う - D言語からCOMを呼び出す - DedicateD[英語] - WindowsAPIのporting[日本語] - shinichiro.h氏によるSDLとOpenGLのporting - D言語でDirectX9を使う[日本語] - D言語でGLSLを使う[日本語] - DirectSoundとDirectInputのimportモジュール - libpngやXML、Cgのライブラリ - MOEPHP.ORG D言語関連記事 - libBulletML - attohttpD(bogoYAML,SDL_net使用) - YAML(データ構造)

porting方法


私の記事も参考にどうぞ。
COFFからOMTへ変換する

D言語からC++のクラスライブラリを使う


C++のクラスをD言語から呼び出せるようにするためのもの。

shinichiro.h氏による説明:



D からは C++ のクラスライブラリは参照できません。 extern(C++) 的なものをサポートしてくれるとありがたいんですけど、まあそれまでの一時しのぎをしたいのです。

C の関数なら D のインポートファイルを書けば D から使え、 C++ の関数は extern "C" 宣言により C-linkage にすることができます。というわけで、C++ ファイルにマクロを書いて、マクロで展開して C 関数を作成して、同時にその C++ ファイルを perl でパースして D のインポートファイルを生成しようというものがこれです。

クラスライブラリの使用法としては、クラスの new, delete, method 呼び出し、static method 呼び出し、を主に想定しています。

仮想関数のコールバックモデルを使うことが意図されているクラスライブラリも、非常に限定的な方法ながらサポートされています。 (具体的には、C++側で継承したクラスを作り、 C 関数ポインタを D 側から渡すことで実現)

テンプレートライブラリも OK ぽいです。



shinichiro.h氏によるもの。[日本語]
http://user.ecc.u-tokyo.ac.jp/~s31552/wp/d/cpplink.html

andy氏のSWIG。[英語]
http://ikagames.com/andy/d/

D言語からCOMを呼び出す

ここが有名みたいですね。

D Win32 COM libraries[英語]
http://www.geocities.com/one_mad_alien/dcom_not_dcom.html

DedicateD[英語]

D言語用のライブラリを公開されています。
Win32API、SDL、OpenGLのimportモジュール、D言語用の(Win32の)WinSockを用いたソケットライブラリetc..。
http://int19h.tamb.ru/files.html
→SDL,OpenGLについては、shinichiro.h氏によるSDLとOpenGLのportingが最新のようです。
→Win32APIのportingについては、WindowsAPIのporting[日本語]のほうが完璧に近いです。

WindowsAPIのporting[日本語]

Win32APIのportingはいろんな方が作業されていますが、現状、Y.Tomino氏のこのページのものが一番完璧に近いでしょう。素直に脱帽です。

http://hp.vector.co.jp/authors/VA028375/
http://hp.vector.co.jp/authors/VA028375/contents/D.html

shinichiro.h氏によるSDLとOpenGLのporting

ここのSDL,OpenGLが最新のようです。(2003年12月4日時点)
http://d.hatena.ne.jp/shinichiro_h/20031204#p3

D言語でDirectX9を使う[日本語]

D言語からDirectX9の呼び出し自体は成功しているようですね。
http://hp.vector.co.jp/authors/VA031566/d_direct3d9/index.html

D言語でGLSLを使う[日本語]

GLSLはopenGL拡張のshading language。
http://hp.vector.co.jp/authors/VA031566/d_glsl/

DirectSoundとDirectInputのimportモジュール

OpenD[英語]のもの。以下、直リンク。
http://www.opend.org/ddirectx.zip

libpngやXML、Cgのライブラリ


libpng(png形式の画像読み込み)、xml読み込み用ライブラリ、Cgライブラリ(D言語からCg言語を使う?)、D言語からC++のクラスライブラリを呼び出すためのツールを公開されています。

andy's D page[英語]
http://www.ikagames.com/andy/d/

MOEPHP.ORG D言語関連記事

メタセコイア形式(.mqo)を読み込むためのクラス、susieプラグインを使うクラスを公開されています。
http://moephp.org/?FrontPage

libBulletML

shinichiro.h氏による弾幕記述言語「BulletML」で書かれたファイルをD言語から利用するためのライブラリ。
http://user.ecc.u-tokyo.ac.jp/~s31552/wp/libbulletml/

attohttpD(bogoYAML,SDL_net使用)

shinichiro.h氏の作成されたD言語による小規模webサーバー。
parse, dump には bogoYAML、クロスプラットホームなソケットライブラリとしてSDL_netを使用されています。そのサンプルにもなると思います。

http://user.ecc.u-tokyo.ac.jp/~s31552/wp/attohttpd/

YAML(データ構造)

XMLは人が見てもわかりにくいですが、インデントで階層構造を表すYAMLならば、人の目にもやさしいです。シリアライズ等にこれを利用すると便利でしょう。

YAML仕様[英語]
http://yaml4r.sourceforge.net/cookbook/

YAMLをさらにシンプルにしたbogoYAML(D言語から使えます)
http://user.ecc.u-tokyo.ac.jp/~s31552/wp/d/bogoyaml.html

D言語用サンプルプログラム関係

追いかけアクションA7Xpg - レトロモダンハイスピードシューティング、PARSEC47

追いかけアクションA7Xpg


D言語からOpenGL,SDLを用いて書かれているゲーム。長 健太(ABA."Saba")氏作。
ソース付き。大作。いまからD言語でゲームを作ってみようという人に凄くお勧め。
氏は弾幕記述言語「BulletML」の考案者でもある。
http://www.asahi-net.or.jp/~cs8k-cyu/windows/a7xpg.html

レトロモダンハイスピードシューティング、PARSEC47


D言語からOpenGL,SDLを用いて書かれているゲーム。長 健太(ABA."Saba")氏作。
ソース付き。大作。いまからD言語でゲームを作ってみようという人に凄くお勧め。
氏は弾幕記述言語「BulletML」の考案者でもある。
http://www.asahi-net.or.jp/~cs8k-cyu/windows/p47.html

使えそうなライブラリ関係

SDL[ライブラリ] - openGLと3次元グラフィックス - Lua[言語]

SDL[ライブラリ]

Win32,Linuxで動作するゲーム(にも使えそうな)ライブラリ。
Simple Direct Media、通称SDL。BeOS,MacOS,MacOS X,QNX,AmigaOS用もある。

本家[英語]
http://www.libsdl.org/index.php

SDLをC言語から使う解説[日本語]
http://www.tsg.ne.jp/text/sdl-opengl/2.html

DedicateD[英語]のほうにporting有り。
shinichiro.h氏によるSDLとOpenGLのportingが最新版のようです。

SDLの入門記事としては、TSG(東京大学理論科学部)の分科会のものが一番わかりやすいでしょう。
http://www.tsg.ne.jp/text/sdl-opengl/

SDLのマニュアル[日本語]
http://www.logionworks.jp/software/SDLdoc-jp/html/index.html

openGLと3次元グラフィックス

openGLは、簡単に言うと古くからある3Dグラフィックスのopenな規格です。Windows,Linux等、いろんな環境で動くことや、SDLはopenGLと相性の良さなどが利点です。D言語からSDLを使いつつ3Dに挑戦したいならば、openGLを用いたほうがいいんじゃないかと思います。

以下、参考になりそうなところ。

openGLの歴史〜入門[日本語]
http://www.is.oit.ac.jp/~whashimo/server/~whashimo/Article/OpenGL/

openGL入門[日本語]
http://black.sakura.ne.jp/~third/system/opengl/gl.html

高速openGL講座[日本語]
http://verygood.kyushu-id.ac.jp/opengl/

SDLからopenGLを使う[日本語]
http://www.logionworks.jp/software/SDLdoc-jp/html/guidevideoopengl.html

openGL関連の記事。SDL,テクスチャ,Cg言語について解説がある。[日本語]
http://alb.hp.infoseek.co.jp/opengl/main.shtml

t-pot (openGL/DirectX関連の記事[日本語])
http://if.dynsite.net/t-pot/program/index.html

openGLテクニックいろいろ[日本語]
http://www.geocities.jp/yuichiy2001/gl/index.htm

任意角での回転[日本語]
http://member.nifty.ne.jp/Mukai/3d_top.htm

OpenGL Extension Registry [英語] : openGLの拡張の一覧表
http://oss.sgi.com/projects/ogl-sample/registry/

Lua[言語]

スクリプトや組み込み向けの言語です。

Lua本家[英語]
http://www.lua.org/

Luaの解説[日本語]
http://www.uri.sakura.ne.jp/~cosmic/yuno/lab/lua5_manual_ja.html
http://staff.aist.go.jp/yutaka.ueno/lua/docsjp.html

D言語用にlunakid氏によってポーティングされています。[英語]
http://neuropolis.org/project/lua_from_d/

D言語からLuaを呼び出す記事も参考にしてください。

D言語のプログラム中から、Luaで書かれたスクリプトの実行が簡単に出来るようです。
Luaで書かれたスクリプト側から、D言語の関数も(スクリプト呼び出し前に登録することで)呼び出すことが出来るようです。

統合開発環境eclipse


eclipseとは、IBMが巨額の投資を行なって開発した統合開発環境です。plug inを用意して新しい言語に対応させることも出来ます。D言語用のeclipse plug inが出れば、D言語での開発も飛躍的に向上することが期待できるのですが。

現在のD言語用のplug inは、まだkeywordのみを太字に出来る程度のようです。
http://ikagames.com/andy/d/

eclipse wiki[日本語]
http://eclipsewiki.net/eclipse/

弾幕記述言語「BulletML」のeclipse用plug in BulletNote。(制作Q&A有)
http://www.asahi-net.or.jp/~cs8k-cyu/bulletml/bulletnote/index.html

D言語のnewsgroup関連の話題

非publicなコンストラクタを持つクラスを外部からnew出来てしまう - implicit instantiationが無いとキツイ - switch文で該当するcase文がないのは不正 - news groupの過去ログ

D言語[ニュースグループ/英語]での話題についていくつか抜き出して見ていきます。

非publicなコンストラクタを持つクラスを外部からnew出来てしまう


コンストラクタが非publicであれば外部からコンストラクトできてはいけないと思うのですが、現状できてしまうようです。おそらくはバグでしょう。

Walter氏自身がnewsgroupで2003年11月12日 3:48のメールで

> 3) Can a class definition be protected? i.e. I would like a class to be
> visible only within its module.
>
> private class Foo {...}
>
> The compiler accepts this but the visbility is public.

That's a bug.

> 4) "protected" modifier on a module member is illegal according to the
> docs. But the code compiles all the same and works as if the memeber
> were public. Shouldn't the compiler generate an error here? Of course,
> there is no valid reason to do this, but since there are no warnings
> issued by the compiler, it would be nice to flasg the illegal ones as
> errors.

と答えています。4)の回答も3)の回答同様の原因によるbugだと言っているようです。

implicit instantiationが無いとキツイ


・DMD ver0.76以前の話。

templateにおける、暗黙の実体化が無いと、C++のstd::maxテンプレートのようなものが書けないのではないかということについて、言語設計者のWalter Bright氏のnews groupへの投稿があるので、ちょっとshinichiro.h氏の記事
http://user.ecc.u-tokyo.ac.jp/~s31552/wp/misc/index.html?2003101801
から引用させていただきます。


D news:909
http://www.digitalmars.com/drn-bin/wwwnews?D/909

(Walter)んなもんいらんよ。

D news:7678
http://www.digitalmars.com/drn-bin/wwwnews?D/7678

(Walter)理由はね…実際問題ややこしくなるんよ。

D news:7693
http://www.digitalmars.com/drn-bin/wwwnews?D/7693

(Walter)そうそう、シンボル名が無茶苦茶にもなるんよ。

D news:15856
http://www.digitalmars.com/drn-bin/wwwnews?D/15856

(Other)std::make_pair を、std::max をくれー。そーだそーだ。…反応無し
D news:16951
http://www.digitalmars.com/drn-bin/wwwnews?D/16951

(Other)何故そんなに嫌いなさるのか教えてくれんかの?そーだ。…反応無し


という流れのようです。

私(やねうらお)も、singletonを書くのにテンプレートを使ってみましたが、確かにいちいちinstanceと書くのは少し面倒な気はします..。ただし、何故こうしたのかはわかる気がします。

1.
テンプレートの実体化を非明示的に行なうと、D言語の構文の場合、
foo_class f = singleton(foo_class).t.some_func();
を解析したときに、singleton(foo_class)の部分が関数呼び出しなのかどうかを識別子についてチェックするまで(すなわち意味解析するまで)判定できない。すなわち、構文解析と意味解析を切り離せなくなる。

2.
関数呼び出しのたびにすべての無名のtemplate内の関数を調べていかなければならない。これがかなりのコンパイル速度低下を招きかねない。(同名の関数があれば、曖昧エラーとしないといけないので)

無名のテンプレートの例) template (T) { T max(T x,T y) { ... } }

だから、インスタンスを指定しなければならないというのは妥当なところかなぁと思うのです。

・DMD ver 0.77での話。

!によるインスタンス化が出来るようになり、instanceキーワードが廃止の方向となりました。(しばらくは互換性のためにinstanceキーワードも使用できるようですが。)

switch文で該当するcase文がないのは不正


switch文で該当するcase文がない場合、実行時のエラーとなります。これについて、Walter Bright氏は次のように述べています。

http://www.digitalmars.com/drn-bin/wwwnews?D/19523

要約すれば、以下のようになります。




#1
	switch (x)
	{
		case 1: ...
		case 2: ...
		case 3: ...
	}


誰かがこのようなコードを書いて、xが4をとる場合を考えてみてください。Cではdefault文がなければ暗黙の「default:break;」が存在することになります。ところが、自分の経験上、この種のdefault breakはほとんどが誤動作です。このコードを書いた人は、xが1,2,3をとることしか想定しておらず、それ以外はありえないと考えてコーディングしているからです。

defaultケースが決して起こらないと主張するならば以下のどれかでコーディングすべきです。


#2
	switch (x)
	{
		case 1: ...
		case 2: ...
		case 3: ...
		default:
			assert(0);
	}



#3
	switch (x)
	{
		case 1: ...
		case 2: ...
		case 3: ...
		default:
			break;
	}

and:

#4
	switch (x)
	{
		case 1: ...
		case 2: ...
		case 3: ...
		default:
			do something
			break;
	}


D言語では、明示的なdefault文が存在しなければ#2のコードを生成します。



Walter Bright氏としては、defaultのないswitch文はバグの温床であるという認識のようですね。これは、私も他人のプログラムをデバッグしていていつも感じることなので、ランタイムエラーなり何なりにするのは妥当なところかな、と思います。

news groupの過去ログ

本家のnews groupには検索機能がないので、私の手元にある分(2001/08/13日〜2003/12/17)現在までのもの(20333通)をbecky2形式に変換して圧縮してupしておきました。12Mほどあります。解凍して50M弱です。grepで検索できるので便利です。欲しい人は、持ってってください。

http://yaneurao.zive.net/d_lang/d_lang_newsgroup_200312170358.zip

おまけのリンク

Walter Bright氏 - doxygen[仕様書生成ツール] - make関連リンク - Ant[ビルドツール] - double checked locking - 弾幕記述言語「BulletML」

Walter Bright氏


D言語の設計者。
http://www.walterbright.com/

低価格/高速コンパイラで名を馳せた Datalight C。世界初のnative-C++コンパイラ Zortech C++、そしてその後継であるSymentec C++、Java開発環境 Cafeすべて彼の手がけた作品です。DigitalMars社のD言語のnews groupには頻繁に書き込みされているようです。なかなかマメな人だなぁと思いました。

doxygen[仕様書生成ツール]

ソースから仕様書の半自動生成を行なうツール。D言語は、C++に比較的構文が近いので、C++用の定義がそのまま流用できそうです。
http://www.stack.nl/~dimitri/doxygen/

日本語による解説ページはこちらが詳しいです。
http://www.fides.dti.ne.jp/~oka-t/doxygen.html

Graphviz
http://www.research.att.com/sw/tools/graphviz/
を用いれば、Doxygenを用いてクラス階層図のようなものを作成できます。

D言語のソースにdoxygenを使う も参照のこと。

make関連リンク


→ makeを使ってビルドする

makeの使いかた[日本語]
http://www.ecoop.net/coop/translated/GNUMake3.77/make_toc.jp.html
http://www.unixuser.org/~euske/doc/makefile/
http://www.geocities.co.jp/Milano/8000/bcc/make.html
http://www.not-enough.org/abe/manual/comm/make.html

makeの使いかた/gnumake[英語]
http://www.gnu.org/software/make/manual/make.html

Ant[ビルドツール]


makeに代わる(とされている)ビルドツール。

→ antによるコンパイル

本家[英語]
http://ant.apache.org/

antの翻訳。
http://www.ingrid.org/jajakarta/ant/

double checked locking

singletonパターンをマルチスレッドで書くときの常道。
『Pattern Hatching』や『Modern C++ Design』にも載っていたので有名なはず。
http://bm98.yaneu.com/yaneSDK3rd/chap0111.html

しかしJavaでは使ってはいけないらしい。
http://www-6.ibm.com/jp/developerworks/java/020726/j_j-dcl.html

弾幕記述言語「BulletML」

シューティングの弾幕を記述するための言語。XMLを使用する。
実際にこれで作られたシューティングが凄い完成度。まさに脱帽。
http://www.asahi-net.or.jp/~cs8k-cyu/bulletml/index.html

D言語アンテナ

あひるさんのD言語のアンテナ。
D言語関係のページの更新された部分などが一目瞭然です。
http://a.hatena.ne.jp/k_ahiru/

Last Updated : 2004-4-19

written by yaneurao
http://bm98.yaneu.com/dlang/