トップページ⇒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)
0210デフォルトの名無しさん2009/07/14(火) 20:54:19
import std.typecons;

interface It {}

class A {
 Rebindable!(const(It)) ireb; // ItがObjectじゃないためNG
 Rebindable!(const(A)) reb;
 const const(A) get() {
  return reb.opDot; // RebindableのopDotがconstじゃないためNG
 }
 Rebindable!(const(A))[string] assoc;
 void put(const(A) a) {
  // opAssignが呼ばれてしまい実行時エラー
  assoc["test"] = a;
 }
}

('A`) ウボァー
0211デフォルトの名無しさん2009/07/14(火) 21:27:38
最近のDはだらしねえな
0212デフォルトの名無しさん2009/07/14(火) 21:28:35
昔からphobosはこんな感じだよ
0213デフォルトの名無しさん2009/07/14(火) 22:04:06
Rebindableにgetなる無意味なaliasがあるんだけど
たぶんこれpublicにしたかったんだな
0214デフォルトの名無しさん2009/07/15(水) 00:46:08
std.outbufferとstd.inbufferを足してstd.serializeってのを作ったらどうだ
0215デフォルトの名無しさん2009/07/15(水) 07:45:33
2になった途端1時代のソースがことごとくコンパイルできない

この互換のなさ酷すぎ。。。
0216デフォルトの名無しさん2009/07/15(水) 08:06:23
それは、
> C#になったとたんC時代のソースがことごとくコンパイルできない
>
> この互換のなさ酷すぎ。。。
といっているようなもの。
0217デフォルトの名無しさん2009/07/15(水) 08:37:35
コンパイル通らないと喜んじゃうMばかりのスレ。
っていうか互換性重視して切り捨てられない部分が出てくるよりよっぽどいいよ。
0218デフォルトの名無しさん2009/07/15(水) 08:37:46
別の言語かよ
0219デフォルトの名無しさん2009/07/15(水) 13:03:05
>>218 流石にあの例はちょっと
>>217 C++とは別の方向性を持った言語の行く末を見守るスレでもあります
0220デフォルトの名無しさん2009/07/15(水) 14:57:38
インターネット上のファイルをダウンロードするにはどうすればいいですか?
0221デフォルトの名無しさん2009/07/15(水) 15:02:34
まずTCP接続をします
0222デフォルトの名無しさん2009/07/15(水) 15:21:09
そして生のHTTPでやりとりします
0223デフォルトの名無しさん2009/07/15(水) 15:49:12
>>221-222
std.socketを使うことになるんですかね?
難しそうですね。

Cで書いて、それを呼び出す方が楽かなぁ。
0224デフォルトの名無しさん2009/07/15(水) 15:54:25
Cで書くならDで書いても一緒だろ…
0225デフォルトの名無しさん2009/07/15(水) 16:05:12
>>224
Cでいうところのwininet.hがDにはなくないですか?
0226デフォルトの名無しさん2009/07/15(水) 17:19:45
CのヘッダファイルをDに変換するんですよ…
0227デフォルトの名無しさん2009/07/15(水) 17:29:58
D1でTangoのtango.net.http.HttpGetつかったら?
2行でできるよ
0228デフォルトの名無しさん2009/07/15(水) 17:31:14
>>226
wininet.hだけでも3900行もあるし、Cで必要な部分だけラッパを書いた方が楽かなぁと。
0229デフォルトの名無しさん2009/07/15(水) 17:32:55
>>227
なるほど。D1のTangoにはあるんですね。
0230デフォルトの名無しさん2009/07/15(水) 17:33:12
待てばPhobosにもHTTP関連は入るはず
0231デフォルトの名無しさん2009/07/15(水) 17:33:14
たいていのWin32APIのヘッダはすでに変換された物があるから、それを拾ってくればいいよ。
0232デフォルトの名無しさん2009/07/15(水) 17:41:27
>>230
今後に期待ですね。
>>231
ぐぐり方が悪いのか見つからないです。
0233デフォルトの名無しさん2009/07/15(水) 21:59:24
>>232
ttp://dsource.org/projects/bindings/wiki/WindowsApi
0234デフォルトの名無しさん2009/07/15(水) 23:32:58
>>233
おお、まさに求めていたものが・・・。
ありがとうございました。
0235デフォルトの名無しさん2009/07/16(木) 01:39:23
>>230 それがいつになるのかが問題だろw
0236デフォルトの名無しさん2009/07/16(木) 21:32:54
なんかネタねえの?
0237デフォルトの名無しさん2009/07/16(木) 22:38:17
dmdじゃなくGCD使うメリットって何かあるんですか?
0238デフォルトの名無しさん2009/07/16(木) 22:43:45
>>237
動作するプラットフォームの多さ?
0239デフォルトの名無しさん2009/07/16(木) 23:17:03
最新版で1年前に書いたコードがコンパイルできるとか?
0240デフォルトの名無しさん2009/07/16(木) 23:30:56
C++のvectorのreserve(1000)は、Dの動的配列に置き換えると、
auto len = arr.length;
arr.length = 1000;
arr.length = len;
これでおk?
0241デフォルトの名無しさん2009/07/16(木) 23:37:33
dmd使ったことないんで知らないけど、
cのライブラリを積極的に使うならgdcのほうが楽だと信じてる。
gccで吐いたバイナリそのまま使えるし。
0242デフォルトの名無しさん2009/07/16(木) 23:38:11
想定通りに動くとして、元のlengthが1000より小さい保証がないな
それ、本家に書いたらstd.arrayにテンプレートとして組み込んでくれるんじゃないか。
配列の疑似プロパティでarr.reserve(1000)で通るようになるかと。
0243デフォルトの名無しさん2009/07/16(木) 23:42:39
こんな感じか

void reserve(T)(T[] a, size_t reserve_len)
in {
  assert(a.length<len);
}
body {
  auto len = arr.length;
  arr.length = reserve_len;
  arr.length = len;
}
0244デフォルトの名無しさん2009/07/16(木) 23:46:49
assertで止まられても・・・
0245デフォルトの名無しさん2009/07/16(木) 23:48:25
>>242
たしかにチェックしないとだめだった。
英語できないのでどなたかお願いしますorz
0246デフォルトの名無しさん2009/07/17(金) 00:10:36
Dでは配列のopCatは常にコピーを作るから、配列をreserveすることに何も意味がない
大きい配列を割り当てて、それのスライスを使えばいいだけ
0247デフォルトの名無しさん2009/07/17(金) 00:19:23
>237
gdbでデバッグできる
0248デフォルトの名無しさん2009/07/17(金) 00:25:20
>>246
大きい配列のサイズを1000として、それのスライスのサイズが1000を超えた時、
配列が2つアロケートされたままになるのが気持ち悪くない?
ガベコレがある言語では気にする意味なし?
0249デフォルトの名無しさん2009/07/17(金) 00:39:26
vectorみたいなものを作ったけど、vector!(int)とか書くのが不便で
自分でも全然使ってない。ユーザー定義リテラルキボンヌ
0250デフォルトの名無しさん2009/07/17(金) 00:50:29
ユーザー定義リテラルはやめといたほうが
0251デフォルトの名無しさん2009/07/17(金) 00:51:35
ユーザー定義リテラルはコンパイルが遅くなる原因だからな
0252デフォルトの名無しさん2009/07/17(金) 01:00:29
vector!intで通らない?
0253デフォルトの名無しさん2009/07/17(金) 01:27:36
std::vector<int>と変わらないだろ
autoもあるんだし
0254デフォルトの名無しさん2009/07/17(金) 02:29:09
vectorは組み込み配列で概ね代替可能だから、あとはdequeとlistとsetがほしい…
DTLってThe Case For Dをみてると最大限Dを活かすための、ぼくのかんがえたさいきょうのコンテナライブラリを構想してる段階な感じなのかな?
0255デフォルトの名無しさん2009/07/17(金) 02:43:12
Dって速い?
0256デフォルトの名無しさん2009/07/17(金) 03:01:03
速いよ、ビルドが
実行速度はC++よりちょい遅いくらい
0257デフォルトの名無しさん2009/07/17(金) 03:18:04
関数の引数につけるin,out,refってクラスにつけても意味ないですか?
あとconstはC++の感覚で、つけられるところは全てつけていくべきですかね?
0258デフォルトの名無しさん2009/07/17(金) 03:28:10
>>257
クラス型でもinをつければconstと同じ意味があるし、outやrefは参照変数になる。
constやimmutableは積極的につけるべき。
0259デフォルトの名無しさん2009/07/17(金) 03:34:08
in, out, refは意味論としてそうあるべき引数にそう付ければいい
ほとんどinになるけど。
推移的constなのでモリモリとconstを書く必要はないが、逆にそれが嫌という例もある
むしろpure, nothrowの方が重要
0260デフォルトの名無しさん2009/07/17(金) 04:16:39
>>258-259
レスthx
C++でconst参照で受け取ってた部分は、Dではinにすればいいんですね。
pureとnothrowも意識してみます。
0261デフォルトの名無しさん2009/07/17(金) 04:39:43
const参照はconst ref
0262デフォルトの名無しさん2009/07/17(金) 05:23:52
Rangeを表す構造体やクラスに対する foreach
ってあるけどさ、これってそのうちpopFrontとかfrontってのに書き変わるのかな?
現状Phobosの中のRangeのそれと食い違ってて混乱の元になる気がするのだけど。
0263デフォルトの名無しさん2009/07/17(金) 05:24:58
>>262
それはドキュメントが更新されてないだけ。
実装はfront/popFront/emptyになってる。
0264デフォルトの名無しさん2009/07/17(金) 05:44:38
>>263そうだったのか。thx
0265デフォルトの名無しさん2009/07/17(金) 11:56:16
>>261
Dのクラスは常に参照だからinでconst参照と思ったんですが、違いがあるんですか?
構造体の場合に違うのかな。
C++から移行したものにはガベコレが難しい。
0266デフォルトの名無しさん2009/07/17(金) 13:12:27
inだと参照の値渡し。refだと参照の参照渡しになる。
参照型の参照と参照渡しの参照は若干意味が違う。
0267デフォルトの名無しさん2009/07/17(金) 15:48:48
>>266
なるほど、const refとすると推移的constによって、クラスの非constメンバにアクセスできなくなるって事ですね。
でも、in MyClassで全て間に合う気がしてしまいます。
const ref MyClassとする事によって役に立つケースはどんなものがありますか?
0268デフォルトの名無しさん2009/07/17(金) 17:09:23
Dの標準ライブラリにほかのプロセスを起動したりパイプで繋いで入出力するものありますか?
0269デフォルトの名無しさん2009/07/17(金) 18:19:21
>>267
ref引数にはlvalueの参照を渡すわけだから、変数を書き換えられるようになるわけですよ
0270デフォルトの名無しさん2009/07/18(土) 19:37:43
いつの間にcore.sync.*が追加された…?
でもまだドキュメント化されてない…?
0271デフォルトの名無しさん2009/07/18(土) 20:09:38
そう簡単にドキュメント化されるものか
ドキュメントはあるのにどこにもリンクが無いstd.perfさんの立場も考えろよ
0272デフォルトの名無しさん2009/07/18(土) 20:14:31
std.perfはstd.date.benchmarkのせいで要らない子扱いになってた気が
0273デフォルトの名無しさん2009/07/18(土) 20:31:29
benchmarkは流れの中にある一部の処理を測りたい時とかに不便な気が
というかなんでstd.dateの中にあんの?
0274デフォルトの名無しさん2009/07/18(土) 20:40:56
>>271
正直スマンかった…
まぁ、core.sync.*はTangoのそれと同じみたいだからそれ見ればいい話か…
0275デフォルトの名無しさん2009/07/18(土) 21:29:46
tangoとの統合の一環なのな
0276デフォルトの名無しさん2009/07/19(日) 00:44:44
でstd.inbufferどこいったのよ・・・
0277デフォルトの名無しさん2009/07/19(日) 02:06:40
>>276
俺も気になってた。
1.0系、2.0系どっちの更新履歴にも名前すら出てこない。
0278デフォルトの名無しさん2009/07/19(日) 03:44:48
>>277
古いのを何個か落として確認してみたけど、なかったよ。
OutBufferのドキュメントにInBufferの名前があるだけ。
0279デフォルトの名無しさん2009/07/19(日) 11:30:32
不変条件があるとrefメンバ関数使えない?
class A{
int a;
invariant(){}
ref int fn(){
return a;
}
}
0280デフォルトの名無しさん2009/07/19(日) 11:35:28
バグ
0281デフォルトの名無しさん2009/07/19(日) 13:22:35
invariant()の中でメソッド呼び出すと無限再帰になるの何とかしてほしい
0282デフォルトの名無しさん2009/07/19(日) 13:51:13
参照カウンタ方式のクラスが欲しい
システムプログラミング言語だったら、プログラマの意図したときに解放させたいと思うときがあるはず
0283デフォルトの名無しさん2009/07/19(日) 14:40:32
構造体のctor/dtor/postblit使えば簡単にかける
0284デフォルトの名無しさん2009/07/19(日) 15:34:48
書けることは書けるんだが、
sharedRef!(A) a = sharedRef!(A)(new A);
とかやんないといけないからメンドイのです
0285デフォルトの名無しさん2009/07/19(日) 15:38:22
auto a = sref(new A);
とかまでならできるんじゃないか?ヘルプ関数使えば。
0286デフォルトの名無しさん2009/07/19(日) 15:54:42
Dに慣れてautoから離れられない体になってしまいました
0287デフォルトの名無しさん2009/07/19(日) 16:09:19
近代C系文法はみんな備えるようになってないか?autoは。
0288デフォルトの名無しさん2009/07/19(日) 16:24:29
aliasで短縮するだけでもだいぶ違う。
0289デフォルトの名無しさん2009/07/19(日) 18:19:46
>>282-284
標準に欲しいものは作ってnews groupに投稿したらいいんだよ
0290デフォルトの名無しさん2009/07/19(日) 18:23:22
っていうかscopeをクラスメンバで使わせてほしい
0291デフォルトの名無しさん2009/07/22(水) 15:09:03
なんでref変数ないの?
嫌がらせ?
0292デフォルトの名無しさん2009/07/22(水) 15:45:11
焦らしプレイです
0293デフォルトの名無しさん2009/07/22(水) 19:29:05
FiberいつのまにPhobosにきたの!!!!!!??!?
0294デフォルトの名無しさん2009/07/22(水) 21:03:54
>>293 去年にはもうあったよ
0295デフォルトの名無しさん2009/07/23(木) 00:03:57
>>293
嬉しいよねー。パフォーマンスどうなんだろう。
0296デフォルトの名無しさん2009/07/23(木) 00:13:16
わからない…Fiberのよさがわからない…
だれかFiberの旨味を教えてくれ…
0297デフォルトの名無しさん2009/07/23(木) 00:17:42
弾幕作るときにあると楽
0298デフォルトの名無しさん2009/07/23(木) 00:37:02
状態遷移が楽に書けるんだよね。遷移のトリガのチェックにループ使えるし。
オブジェクトに状態の変数持たせなくてもローカル変数で済むし。
Stateパターンいちいち使うのもめんどいからなあ。
0299デフォルトの名無しさん2009/07/23(木) 01:51:11
ゲーム作るときにちょっと便利かも
0300デフォルトの名無しさん2009/07/23(木) 02:25:42
使ったことないけど、yieldのときに値を返したり受けたりできないのは不便な気がする。
0301デフォルトの名無しさん2009/07/23(木) 02:46:43
リファレンスカウンタ方式のGCみたいなもんだ
0302デフォルトの名無しさん2009/07/23(木) 07:43:42
Dで書かれた代表的なアプリケーションは

0303デフォルトの名無しさん2009/07/23(木) 09:00:28
>>302
ABAさんのゲーム
poeny
芝が生えるゲーム
0304デフォルトの名無しさん2009/07/23(木) 09:19:46
2ch viewer
0305デフォルトの名無しさん2009/07/23(木) 19:24:56
Poseidon
0306デフォルトの名無しさん2009/07/23(木) 20:28:19
>>304
あるの?
0307デフォルトの名無しさん2009/07/23(木) 20:57:57
final switch使って-wつけてコンパイルしたらめっちゃ怒られて死んだ
0308デフォルトの名無しさん2009/07/24(金) 00:01:49
range caseどうなったん?
0309デフォルトの名無しさん2009/07/24(金) 16:54:34
>>302
後は研究や仕事のデータ処理に使ってる人がいるくらいで
公開されたアプリケーションはあんまりないよね
■ このスレッドは過去ログ倉庫に格納されています