トップページ⇒tech
989コメント254KB

D言語 Part22

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2009/06/22(月) 01:38:41
プログラミング言語 D (D Programming Language) について語るスレッドです。
過去スレ、関連スレは >>2

■前スレ
http://pc12.2ch.net/test/read.cgi/tech/1234363551/

■本家
ttp://www.digitalmars.com/d/
ttp://www.kmonos.net/alang/d/ (和訳)

■コンパイラ
http://www.digitalmars.com/d/dcompiler.html (DMD, 本家)
http://dgcc.sourceforge.net/ (GDC, gccフロントエンド)
http://www.dsource.org/projects/ldc (LDC, バックエンドにLLVM)

■参考URL
ttp://f17.aaa.livedoor.jp/~labamba/ (D言語研究)
ttp://f17.aaa.livedoor.jp/~labamba/?D%B8%C0%B8%ECBOF (D言語BOF)
ttp://dsource.org/ (dsource)
ttp://tinyurl.com/candcpp2d (C/C++に疲れた人のD言語)
ttp://www.kmonos.net/alang/wnd/ (わかったつもりになるD言語)
ttp://shinh.skr.jp/d/ (SDL, SDL_*, OpenGL, GLU, glutのポーティングとか)
ttp://shoo.s20.xrea.com/shoo/programing (D言語とTangoの入門講座)
ttp://www.nicovideo.jp/mylist/4453698 (D言語で作られた芝ゲー niconico動画)
ttp://www.asahi-net.or.jp/~cs8k-cyu/ (ABA Games)

■ IDE
ttp://dronten.googlepages.com/dscite (DSciTE)
ttp://forums.codeblocks.org/index.php?board=20.0 (Code::Blocks)
ttp://www.dprogramming.com/entice.php (Entice Designer)
ttp://www.dsource.org/projects/descent (Descent)
ttp://www.dsource.org/projects/poseidon (Poseidon)
0002デフォルトの名無しさん2009/06/22(月) 01:40:49
過去スレ、関連スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=D%8C%BE%8C%EA&sf=2&all=on&view=table&shw=5000

その他関連スレ
バイナリをゲロる言語の魅力って何?
http://pc11.2ch.net/test/read.cgi/tech/1160869311/

Eclipse統合M27【Java/C/PHP/Ruby/Python/Perl】
http://pc12.2ch.net/test/read.cgi/tech/1238338503/

eclipseってそんなに良いか?【エクリプス】
http://pc11.2ch.net/test/read.cgi/tech/1099300344/

統合開発環境Eclipseプラグイン開発QA
http://pc11.2ch.net/test/read.cgi/tech/1081517094/

"Code of the Nerds" Digital Mars C/C++
http://pc11.2ch.net/test/read.cgi/tech/1044210976/
0003デフォルトの名無しさん2009/06/22(月) 01:42:33
>>1-2 テンプレ変更点
- "C/C++に疲れた人のD言語"のURL更新
- 関連スレ更新
0004デフォルトの名無しさん2009/06/22(月) 02:20:08
一乙
980越えたから落ちたか。
0005デフォルトの名無しさん2009/06/22(月) 04:11:24
Dython -- 仕様のかたまらない、ただひとつのインプリメンテーション
0006デフォルトの名無しさん2009/06/22(月) 04:22:44
>>1 乙
0007デフォルトの名無しさん2009/06/22(月) 22:16:49
>>1
乙
うぉるたんかわいいようぉるたん
0008デフォルトの名無しさん2009/06/22(月) 22:22:09
ttp://www.astoriaseminar.com/images/walter.gif
0009デフォルトの名無しさん2009/06/22(月) 22:28:36
>>8
半ばテンプレ化。
0010デフォルトの名無しさん2009/06/23(火) 02:08:32
D言語の標準ライブラリって充実していますか?
C++の標準、boost並に充実しているなら乗り換えようかと思っているんですが。
0011デフォルトの名無しさん2009/06/23(火) 02:24:55
わかっててきいてるだろw
10月ぐらいまでにはなんとかなる予定
0012デフォルトの名無しさん2009/06/23(火) 02:31:04
>>11
すみませんガチで知りませんでした。
もう少ししたら良い環境ですね。
どうもありがとうございました。
0013デフォルトの名無しさん2009/06/23(火) 02:55:23
本出る頃にはSTLレベルまではいってるだろうな。たぶん。
0014デフォルトの名無しさん2009/06/23(火) 07:57:13
だといいなあ
0015デフォルトの名無しさん2009/06/23(火) 08:02:06
標準が2つもあるという意味では充実してるw
0016デフォルトの名無しさん2009/06/23(火) 12:08:07
STLやBoost並に充実してたとしてもGUIライブラリは・・・
0017デフォルトの名無しさん2009/06/23(火) 22:24:29
最近バージョンアップしないね
0018デフォルトの名無しさん2009/06/23(火) 22:42:55
月のものが遅れてますね><
0019デフォルトの名無しさん2009/06/23(火) 23:25:45
何かが生まれるという認識でよろしいでしょうか
0020デフォルトの名無しさん2009/06/23(火) 23:45:48
TLSと同種のメモリ周りの修正じゃないの
何かどこかで、こっちはまでできてないけど、みたいな記事を読んだぞ
0021デフォルトの名無しさん2009/06/24(水) 18:55:01
うぉるたんはscope変数が書き換え可能なのをいい加減直すべき
0022デフォルトの名無しさん2009/06/25(木) 00:07:16
getMembersはいつになったら…
0023デフォルトの名無しさん2009/06/25(木) 22:19:59
allMembersじゃだめなの?
…というやりとりを以前にもここでしたような
0024デフォルトの名無しさん2009/06/25(木) 22:31:43
コンパイルタイムリフレクションとラインタイムリフレクションは全く違うものだろう
0025デフォルトの名無しさん2009/06/26(金) 16:18:29
関数1つレベルでコミットしたいんだが
bugzillaに送ってもなかなか反映してくれないなあ
0026デフォルトの名無しさん2009/06/26(金) 22:45:27
パッチはっつけたら?
0027デフォルトの名無しさん2009/06/26(金) 22:51:48
ほとんど反応ない
0028デフォルトの名無しさん2009/06/27(土) 10:39:36
D2.0使ってるんだけど、

myObject[key] = value;

ってやった時に

myObject.opIndexAssign(value, key) よりも
myObject.opIndex(key).opAssign(value) が優先されるのはなんなの?
0029デフォルトの名無しさん2009/06/27(土) 15:45:46
いつの間にか-safeつけるとコンパイルできない
一つ前のdmd使ってもコンパイルできない
俺は死んだ
0030デフォルトの名無しさん2009/06/27(土) 17:57:48
何度でも蘇るさ!
0031デフォルトの名無しさん2009/06/27(土) 18:40:50
ユニットテストなんて入ってるが、ソースの直ぐ下にそのまま書ける形式は、
テストに失敗してもその場でさっと修正しちゃえて良くない気がするな・・・。
番犬みたいのはある程度独立していないと懐柔されやすいというか。
0032デフォルトの名無しさん2009/06/27(土) 20:00:59
しばらく考えたけど
テスト自体を修正しちゃえるからよくないって言ってる?
0033デフォルトの名無しさん2009/06/27(土) 20:41:44
ユニットテストっていうか実験用コードっていう感じなんだよね。
まぁ、D的には仕様を守るための硬いテストみたいなものは、
そもそも邪悪なものなのかもしれんが・・・。
0034デフォルトの名無しさん2009/06/27(土) 20:54:32
それは、真面目にその場にテストをみっちり書くとソースの可読性が著しく落ちるからだろうから、
mixinなりincludeなりでコードを分離するのがいいんじゃね?
0035デフォルトの名無しさん2009/06/27(土) 22:53:32
なるほど。分離するならversionみたいにunittestも何か指定できたら
便利かなぁと思ったけど、version(MY_TEST)でいいか・・・。
0036デフォルトの名無しさん2009/06/28(日) 00:39:56
>>35てかそれって-unittestじゃね?
0037デフォルトの名無しさん2009/06/28(日) 01:36:49
だよね
0038デフォルトの名無しさん2009/06/28(日) 02:07:28
version(unittest) {}
0039デフォルトの名無しさん2009/06/28(日) 10:21:38
>>36
35の1行目は-unittest=STRICT / unittest (STRICT) { }みたいなことが
したいってことでちょっと違うかな。
0040デフォルトの名無しさん2009/06/28(日) 11:00:00
>>39
「Dならそれくらい出来るだろwww」という気分で試して絶望しそうなイメージ
0041デフォルトの名無しさん2009/06/28(日) 11:38:45
debugでいいやん
0042デフォルトの名無しさん2009/06/28(日) 14:09:21
>>39
それやる意味って何かあるの?単体テストは全て通らなければ意味がない気がするのだけど…
それよりは、実行ファイルを作らない限りunittestが実行できないって方が問題のような気がする
0043デフォルトの名無しさん2009/06/28(日) 14:33:26
最初はコンパイルする時にやってくれるものと思ってた俺
0044デフォルトの名無しさん2009/06/28(日) 14:54:57
>>42
さすがに全部通るか通らないかしかないとちょっと息苦しい
普段は時間がかかるテストはスキップするとかできてもいいんじゃないか
0045デフォルトの名無しさん2009/06/28(日) 21:38:17
>>39
それってunittest内でversion分岐させた方が分かり易くないか?
0046デフォルトの名無しさん2009/06/28(日) 22:24:31
http://www.hyuki.com/yukiwiki/wiki.cgi?TddAntiPatterns
ユニットテストアンチパターン
0047デフォルトの名無しさん2009/06/28(日) 23:20:25
>>42-43
rdmd -unittest hoge.d → エントリポイントを自動で追加 → 実行。
っていうふうにできてたらなあ。
0048デフォルトの名無しさん2009/06/29(月) 00:17:40
>>47
っ
version(unittest) void main() { }
0049デフォルトの名無しさん2009/06/29(月) 01:25:33
>>48
でも、それだとファイルが複数になった時(どこにmain()書いたか?とか)ややこしくならない?
0050デフォルトの名無しさん2009/06/29(月) 04:23:39
むしろユニットテストしか実行しないexe作るオプションください
0051デフォルトの名無しさん2009/06/29(月) 06:46:45
assert(typeid(void function(int)) == typeid(void function(long)));

おいィ?
0052デフォルトの名無しさん2009/06/29(月) 07:00:25
は?
0053デフォルトの名無しさん2009/06/29(月) 11:55:49
ttp://shoo.s20.xrea.com/shoo/programing/chirno_quality/0002.html
ここの講座見てDFL使おうとしたら、コンパイルエラー。
dfl\internal\com.d(218): Error: no property 'seek' for type 'tango.io.model.IConduit.IConduit.Seek'
dfl\internal\com.d(218): Error: no property 'Anchor' for type 'tango.io.model.IConduit.IConduit.Seek'
dfl\internal\com.d(218): Error: no property 'Begin' for type 'int'
dfl\internal\com.d(218): Error: function expected before (), not 1 of type int
〜〜〜以下省略〜〜〜
入れたのは
 tango-0.99.8-bin-win32-dmd.1.041
 dsss-0.78-x86-windows
 dmc.zipのlibの中身
 DFL 0.9.8 zip archive

import\dfl\internal\dlib.d の464行目を
alias tango.io.model.IConduit.IConduit.Seek DSeekStream;
から
alias tango.io.model.IConduit.IOStream DSeekStream;
に書き換えたら、なんとかコンパイル通ったよ。

D言語初心者にハードルたけーよ、DFL。(;´Д`)
0054デフォルトの名無しさん2009/06/29(月) 12:43:25
その記事も陳腐化してるのか…
たぶんDFL 0.9.8がtango 0.99.8に対応してないんだな。
http://wiki.dprogramming.com/Dfl/Snapshots
ここの、スナップショット使ってみたら?tango 0.99.8より後だからもしかしたらできるかもよ
0055デフォルトの名無しさん2009/06/29(月) 13:55:18
試したけど、同じだった。Snapshotsのページに、
Note: Tango is not yet supported in this snapshot, please use the release version and be sure to use the compatible version of DMD.
と書いてあるし、まだみたい。
0056デフォルトの名無しさん2009/06/29(月) 16:25:51
>D言語初心者にハードルたけーよ、DFL。(;´Д`)
tango使っておいて初心者はないw
phobosならいけね?
0057デフォルトの名無しさん2009/06/29(月) 20:10:00
この前2.030環境に入れたけど色々トラブル出た気がする
D1ならイけるんじゃね?
0058デフォルトの名無しさん2009/06/29(月) 20:17:50
dmd 1.043/dmd 2.030
---
int a = 5;
assert (a.init == 0); // success
assert (a.init == 5); // fail


なん…だと…?
0059デフォルトの名無しさん2009/06/29(月) 20:33:54
mac osxで開発してる人いる?
0060デフォルトの名無しさん2009/06/29(月) 20:46:29
ここにいますよ
0061デフォルトの名無しさん2009/06/29(月) 21:48:28
DFLつかうならTango 0.99.7とDFL0.98の組み合わせにしておけばシアワセ
0062デフォルトの名無しさん2009/06/29(月) 22:02:53
>>56
逆。右も左もわからないから普通のライブラリのノリで入れちゃうんだよ
まさか標準ライブラリを置き換えてしかも互換性がないものとは思わない
0063デフォルトの名無しさん2009/06/29(月) 22:45:23
>>58
結構昔にそういう仕様になったよ
それのせいで昔のソースをビルドした時大変だった
0064デフォルトの名無しさん2009/06/29(月) 22:47:57
>>51
関数の型比較は引数の型だけで判断されるんじゃね?

TypeInfo_Function にも TypeInfo_Delegate にも
引数の情報を格納する場所はないし
0065デフォルトの名無しさん2009/06/29(月) 22:48:15
>>63
マジですか
和訳はともかく本家のドキュメント直ってないってなんなの
0066デフォルトの名無しさん2009/06/29(月) 23:37:43
うぉるたんはTangoの事どう思ってんの?
0067デフォルトの名無しさん2009/06/29(月) 23:50:15
>>66
TangoとPhobosは仲良くなれるように努力している。
将来的にはTangoとPhobosの両方のいいところを選択的に使えるようにする。
TangoはライセンスがPhobosと違うので気軽に取り込めなくて残念。
…てかんじのコメントだったと思うよ。
0068デフォルトの名無しさん2009/06/30(火) 00:54:57
The Case for D の和訳
http://dusers.dip.jp/modules/wiki/?Learning%2FThe%20Case%20for%20D
0069デフォルトの名無しさん2009/06/30(火) 13:59:20
>>68
俺はD言語の何も理解していなかったようだ
って気分になる
0070デフォルトの名無しさん2009/06/30(火) 16:45:08
>>65

ChangeLogとかドキュメントで読んだ気がする……んだけど、どこにも書いてないな……
俺はどこで知ったんだろう……
0071デフォルトの名無しさん2009/06/30(火) 17:22:09
> Version D 2.001 Jun 27, 2007
> * The .init property for a variable is now based on its type, not its initializer.
0072デフォルトの名無しさん2009/06/30(火) 17:22:40
2年前だぞw
0073デフォルトの名無しさん2009/06/30(火) 19:45:47
>>71
この書き方だと今はそうなってるけど元に戻すつもりがあるってことなんだろうか
どっちにしろもう戻らないだろうけど
0074デフォルトの名無しさん2009/06/30(火) 20:28:35
>>73
"〜 is now 〜"は昔と違って今は〜だってニュアンスじゃなかったっけ?
0075デフォルトの名無しさん2009/06/30(火) 22:15:44
>>68
>ではDの場合はどうでしょう? もう聞いたことがあるかもしれません - 名前のダジャレがやり過ぎな言語。
>他の言語の専用ニュースグループでときどき話題になり、オフトピックな話題に厳しい人達が怒って止めさせるまで鬱陶しい。
>友人に熱狂的なファンがいる。
>あるいは単に、暇潰しに「この広いインターネットには、Dという名前の言語を作った馬鹿がいるに違いない」
>と検索してみた結果、「ああ、やっぱりいた!」
噴いたwwwww
0076デフォルトの名無しさん2009/07/01(水) 00:10:00
>>68
ところどころわかりにくいんだけど面白えw
アレキサンドレスクD好きすぎる。訳の人gjです。
0077デフォルトの名無しさん2009/07/01(水) 16:19:47
>>74 そうだよ
0078デフォルトの名無しさん2009/07/01(水) 17:05:37
>>68
これはおもしろい
0079デフォルトの名無しさん2009/07/01(水) 18:42:08
>>68 読んだら、D2へ移行したくなってきた。
0080デフォルトの名無しさん2009/07/02(木) 17:24:20
>>65
bugzillaに報告するといいよ
0081デフォルトの名無しさん2009/07/03(金) 05:53:57
alias Variant dynamic;
0082デフォルトの名無しさん2009/07/03(金) 13:46:49
ところでメソッドからdelegateを取ったときにref返値の情報が消えちゃって左辺にできないんだけどどうすればいいの?
0083デフォルトの名無しさん2009/07/03(金) 14:07:12
ほんとだな。

int x;
class C {
static ref int f() { return x; }
ref int g() { return x; }
}

void main() {
(&C.f)() = 0; // ok
(&(new C).g)() = 0; // error
}
0084デフォルトの名無しさん2009/07/03(金) 14:55:24
return書くの秋田
0085デフォルトの名無しさん2009/07/03(金) 15:39:53
C#のアロー記法みたいなのほしいよなあ。
0086デフォルトの名無しさん2009/07/03(金) 15:54:18
int delegate(int) dg = x \ x * 2; // == (int x){return x*2;}
int k = dg(1);
assert(k == 2);
こうなる予定だったよね?
0087デフォルトの名無しさん2009/07/03(金) 16:01:00
>>83 うまく英語で説明できないから誰か報告してみてちょー
0088デフォルトの名無しさん2009/07/03(金) 16:22:26
>>86
それなんかきもいな。
バックスラッシュはλの代わりだから前に書きたい。

> auto square = \x => x * 2;
>
> auto i = square(2); // typeof(i) == int
> auto d = square(2.5); // typeof(d) == double


強い静的型付き言語だけど、ソースコード上に型を書かなくていいような言語が使いたい。
0089デフォルトの名無しさん2009/07/03(金) 16:28:49
円マークがすごく悲しい構文です
0090デフォルトの名無しさん2009/07/03(金) 16:31:17
>>88
OCaml
型推論で80%の型名を書かなくていいネイティブ吐ける関数型言語
0091デフォルトの名無しさん2009/07/03(金) 16:37:04
Dは全然知らないのですが
アセンブラレベルでの呼び出し規約は
デフォルトで何を使ってるんですか?
ちょっと興味があったもので
0092デフォルトの名無しさん2009/07/03(金) 16:49:30
>>88
本質的じゃないが、それsquareじゃないだろ
0093デフォルトの名無しさん2009/07/03(金) 16:51:13
>>91
http://www.kmonos.net/alang/d/2.0/abi.html
0094デフォルトの名無しさん2009/07/03(金) 16:56:47
デリゲートのジェネリック化はできてほしいねえ
0095デフォルトの名無しさん2009/07/03(金) 17:02:29
>>93
ありがとう
完全に独自なのか

型情報をマングリングしたり
関数側でスタックを処理するのに
可変引数がサポートされたりしてて面白い
0096デフォルトの名無しさん2009/07/04(土) 13:49:54
class A {
 const(A) a;

}
0097デフォルトの名無しさん2009/07/04(土) 13:51:41
うわ途中投稿したorz

class A {
 const(B) b;
 void setB(in B b) {
  this.b = b; // 駄目
 }
}
constな型とconstな変数が区別されてないのってなんでだろ?
このsetAみたいな事やろうとして八方塞りになった
0098972009/07/04(土) 13:52:28
○setB
×setA

慌てすぎで死んだ
0099デフォルトの名無しさん2009/07/04(土) 14:13:25
Rebindable
0100デフォルトの名無しさん2009/07/04(土) 14:20:15
>>97
クラス型が参照型(要するにポインタ)であることを考えれば、別に何もおかしいことではないと思う。

struct S { }
class A {
 const(S*) b;
 void setB(const S* b) {
  this.b = b; // 駄目
 }
}

これに対する解決法は>>99だけど、言語のほうで何とかしてほしいのはたしか。

それと、これはまだ実装されてないけど、inはscopeを含むので、
in引数の内容をスコープ外にコピーすることはできない。
0101デフォルトの名無しさん2009/07/04(土) 14:38:06
>>97
最近同じポイントではまりました。

>>99 >>100
AとRebindable!(A)はisによる同一性比較が出来ないのが欠点。
なんでDはC++みたいに参照と値を分離しなかったのか…
■ このスレッドは過去ログ倉庫に格納されています