D言語研究室
D言語のWin32版、Linux版の実装を公開しています。通称"DM"、D言語の開発元です。
当然、英語です。
http://www.digitalmars.com/
更新ペースがかなり速いです。
D言語のstdライブラリについての解説、サンプルプログラムがあります。
http://p17.aaacafe.ne.jp/~labamba/index.php
D言語に関する英語のWikiです。
news group(英語)に目を通すぐらいなら、まずはここをざっと見たほうがいいでしょう。
http://www.wikiservice.at/d/wiki.cgi
ここでは、入門記事だけを集めてみることにしました。
言語仕様→
D言語[Digital Mars Dの翻訳]
標準ライブラリのサンプル→
D言語[Wiki/日本語]
Win環境でのインストール〜eclipseのプラグインを使ってみるところまでをわかりやすく書かれています。
Dめも
http://muimi.com/j/lang/d/
D言語用からSDLを用いる方法を書かれています。
サンプルとして潜水艦ゲームと、そのソースを公開されています。
http://user.ecc.u-tokyo.ac.jp/~s31552/wp/d/
インストール手順から、各構文の使いかたetcを書かれています。日本語。
かなり詳しいので一読されることをお勧め。
http://www.kmonos.net/alang/etc/d.php
LinuxでD言語をインストール、D言語+SDLを用いて書かれた倉庫番があります。
http://edward.dip.jp/~hiki/is02/Dlang.html
このページです。(’’
SDLをD言語でwrapしたり、OpenGL+DirectXをwrapしたりします。
http://bm98.yaneu.com/dlang/
D言語のインストール〜入門記事,つまずきやすい点などをわかりやすく解説されています。また、D言語+SDLで作ったDetris(テトリスもどき)や、ライブラリの制作をされています。非常に参考になるページです。
http://black.rainy.jp/kiscwiki/index.php?FrontPage
D言語のWin32版、Linux版の実装を公開しています。通称"DM"、D言語の開発元です。
当然、英語です。
http://www.digitalmars.com/d/dcompiler.html
D言語用のIDE。このリンク先の
DIDE with Dをダウンロードすると、Dコンパイラのセットアップの手間も省けててっとり速いのですが、どうもこの付属のエディタでは日本語コメントが化けます。もちろん、フォント設定で日本語フォントを指定してもダメです。UNICODEで編集できれば良いのですが..。
http://www.atari-soldiers.com/dide.html
※ 作者のCharles氏が、今現在wstring化を進めておられるようです。後からのwstring化に苦労しておられるようです。
D用のIDEです。キーワードのハイライト表示、ビルド、実行、doxygenの実行などが出来ます。将来的には、インテリセンスっぽい機能や、デバッグトレースの機能を計画されている模様。一押しです。
ひよこさんのサイト:
http://www.interq.or.jp/ruby/world/
downloadはこちらから:
http://www.interq.or.jp/ruby/world/d/download.htm
私の記事も参考にどうぞ。
→
COFFからOMTへ変換する
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言語用のライブラリを公開されています。
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[日本語]のほうが完璧に近いです。
libpng(png形式の画像読み込み)、xml読み込み用ライブラリ、Cgライブラリ(D言語からCg言語を使う?)、D言語からC++のクラスライブラリを呼び出すためのツールを公開されています。
andy's D page[英語]
http://www.ikagames.com/andy/d/
メタセコイア形式(.mqo)を読み込むためのクラス、susieプラグインを使うクラスを公開されています。
http://moephp.org/?FrontPage
shinichiro.h氏の作成されたD言語による小規模webサーバー。
parse, dump には bogoYAML、クロスプラットホームなソケットライブラリとしてSDL_netを使用されています。そのサンプルにもなると思います。
http://user.ecc.u-tokyo.ac.jp/~s31552/wp/attohttpd/
XMLは人が見てもわかりにくいですが、インデントで階層構造を表すYAMLならば、人の目にもやさしいです。シリアライズ等にこれを利用すると便利でしょう。
YAML仕様[英語]
http://yaml4r.sourceforge.net/cookbook/
YAMLをさらにシンプルにしたbogoYAML(D言語から使えます)
http://user.ecc.u-tokyo.ac.jp/~s31552/wp/d/bogoyaml.html
D言語からOpenGL,SDLを用いて書かれているゲーム。長 健太(ABA."Saba")氏作。
ソース付き。大作。いまからD言語でゲームを作ってみようという人に凄くお勧め。
氏は
弾幕記述言語「BulletML」の考案者でもある。
http://www.asahi-net.or.jp/~cs8k-cyu/windows/a7xpg.html
D言語からOpenGL,SDLを用いて書かれているゲーム。長 健太(ABA."Saba")氏作。
ソース付き。大作。いまからD言語でゲームを作ってみようという人に凄くお勧め。
氏は
弾幕記述言語「BulletML」の考案者でもある。
http://www.asahi-net.or.jp/~cs8k-cyu/windows/p47.html
スクリプトや組み込み向けの言語です。
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とは、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言語[ニュースグループ/英語]での話題についていくつか抜き出して見ていきます。
コンストラクタが非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だと言っているようです。
・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文がない場合、実行時のエラーとなります。これについて、
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には検索機能がないので、私の手元にある分(2001/08/13日〜2003/12/17)現在までのもの(20333通)をbecky2形式に変換して圧縮してupしておきました。12Mほどあります。解凍して50M弱です。grepで検索できるので便利です。欲しい人は、持ってってください。
http://yaneurao.zive.net/d_lang/d_lang_newsgroup_200312170358.zip
D言語の設計者。
http://www.walterbright.com/
低価格/高速コンパイラで名を馳せた Datalight C。世界初のnative-C++コンパイラ Zortech C++、そしてその後継であるSymentec C++、Java開発環境 Cafeすべて彼の手がけた作品です。
DigitalMars社のD言語のnews groupには頻繁に書き込みされているようです。なかなかマメな人だなぁと思いました。
シューティングの弾幕を記述するための言語。XMLを使用する。
実際にこれで作られたシューティングが凄い完成度。まさに脱帽。
http://www.asahi-net.or.jp/~cs8k-cyu/bulletml/index.html
あひるさんのD言語のアンテナ。
D言語関係のページの更新された部分などが一目瞭然です。
http://a.hatena.ne.jp/k_ahiru/
Last Updated : 2004-4-19
written by yaneurao
http://bm98.yaneu.com/dlang/