- 1 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 20:16:30 ]
- プログラミング言語 D (D Programming Language) について語るスレッドです。
過去スレは >>2 ■本家 ttp://www.digitalmars.com/d/ ttp://www.kmonos.net/alang/d/ (和訳) ■コンパイラ ttp://www.digitalmars.com/d/dcompiler.html (DMD, 本家) ttp://dgcc.sourceforge.net/ (GDC, gccフロントエンド) ttp://gdcmac.sourceforge.net/ (GDCのmac用バイナリ) ■参考URL ttp://f17.aaa.livedoor.jp/~labamba/ (D言語研究) ttp://dsource.org/ (dsource) ttp://www.sun-inet.or.jp/~yaneurao/dlang/ ttp://wisdom.sakura.ne.jp/programming/d/
- 577 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 16:35:25 ]
- DってなんかSchemeっぽくね?
- 578 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 16:38:52 ]
- >>577
pure関数の導入も予定してるし、関数型的に行く気まんまんという感じ。
- 579 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 16:43:24 ]
- クローじゃきたのかー D2はじまったな
- 580 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 16:59:14 ]
- クロージャの実装ご苦労じゃ。
- 581 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 17:04:34 ]
- 1.0 に組み込む気は無いのかなぁ。
発展途上というかバグだらけなうえに仕様が迷走してるだけに 2.0はまだ使う気にならんのだよな。
- 582 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 17:15:52 ]
- >548の問題が、自分の用途に関して一時的解決策ができた。
enum FooEnum {} class Foo { alias .FooEnum FooEnum; } class BarA(T : FooEnum){} // NG これで目的は果たせるけど、きっちりしておきたいところではある。
- 583 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 17:19:01 ]
- 1.0にくみこまれたら組み込まれたらで
仕様が迷走してるっていうんじゃね?
- 584 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 17:21:02 ]
- 1.0はもう変わっちゃだめだろ
- 585 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 17:27:31 ]
- >>557
このあたりと関係してるかも ttp://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=58483
- 586 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 17:28:08 ]
- >>578
pure関数入れるとどうなるんだろう >>581 ちょっと待てw 0.xのときは早く安定させてって言われてたから1.x系作って安定させたんだろうに ちゃんと進んでるぜよ
- 587 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 17:53:53 ]
- 1.x系は無難な過去の寄せ集め。
2.x系は未来への布石。 俺ってかっこいい!?
- 588 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 17:54:41 ]
- むしろ世紀末への布石
- 589 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 17:56:45 ]
- え?おわっちゃうの!?
- 590 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 18:32:00 ]
- Dが完成するときは、世界の終わりの日だということか。
- 591 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 18:33:06 ]
- >>589
90年先を見据えた言語ってことさ
- 592 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 18:35:53 ]
- じゃあ・・・配列演算と並列処理まだー?
- 593 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 18:57:13 ]
- pure関数が実装されると、コンパイル時に自動的に実行とかやってくれるのかな?
それか、結果のキャッシュかな。 とりあえずたらい回しが速くなる?
- 594 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 19:03:06 ]
- >>591
おぉ!かっこいいね!!
- 595 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 19:11:53 ]
- >>580
>>580 >>580
- 596 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 19:54:14 ]
- あえてスルーしてたのに、、、
- 597 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 20:26:16 ]
- すでにコンパイル時関数実行ってあるよね
- 598 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 20:56:56 ]
- sin,cosがそうなってると、このスレだったかで見たような記憶がある。
- 599 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 21:13:05 ]
- sin,cosは組み込み関数でコンパイラがコンパイル時に定数に置換するだけ。
CTFEの一種であることに変わりはないが。
- 600 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 21:29:50 ]
- D言語SUGEEEEEEE
- 601 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 21:57:31 ]
- むきー!!
modfをfmodの代わりだと思って使ってた間抜けがきましたよ。っと。 なんて紛らわしいんだ。
- 602 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:01:04 ]
- (^Д^)m9
- 603 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:07:24 ]
- >>602
右手が右側にwwww
- 604 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:12:54 ]
- これはきっと「カマーン」って言ってるんだな
- 605 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:21:52 ]
- 左側だろ
- 606 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:23:56 ]
- 腕の力こぶを見せ付けてるんだろう
ぶよぶよ贅肉にも見えるが
- 607 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:24:56 ]
- >>605
本人から見ればそうだな。
- 608 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:27:12 ]
- 小指立ててるだけだろ。
- 609 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:33:02 ]
- 循環import(AがBをimport、BがAをimport)って許されてない?
普通にコンパイルするときは問題ないんだけど、 コードカバレッジ解析(-cov)を有効にするとエラー出る。 Error: circular initialization dependency with module A
- 610 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:45:15 ]
- www.kmonos.net/alang/d/module.html
静的コンストラクタの順序 import宣言の循環(モジュールがお互いをimportしあう、循環依存)は、 どちらか一方が静的構築の不要なモジュールであれば、問題ありません。 双方とも静的構築が必要であった場合は、 実行時例外が発生します。
- 611 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:52:37 ]
- -covつけると静的構築されるの?
- 612 名前:566 mailto:sage [2007/11/03(土) 22:54:28 ]
- >>568
thx! 無視して先に進みます
- 613 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:55:50 ]
- 静的構築が行われていないモジュール同士なんだけどなぁ〜
問題なく実行はできるし・・・
- 614 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:58:24 ]
- おそらく、カバレッジ解析用のコードが追加されてエラーになるんだろうな。
バグだろバグ
- 615 名前:610,613 mailto:sage [2007/11/03(土) 23:03:15 ]
- >>614
そう思う。バグだよねぇ〜。 それならそれでいいんだ・・・ D言語の思想に合ってないコーディングをしているのかと少々疑ってしまった。
- 616 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 23:03:48 ]
- -cov つけるとコンパイラがそれぞれのモジュール内に静的コンストラクタを挿入するって事?
- 617 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 23:04:56 ]
- かぶった、すまぬ
- 618 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 23:08:54 ]
- もし>>616ならそうそう解決されないんじゃね?
それに元々循環importは推奨されてないんじゃなかったっけ? どっかで見た気がしてて>>610見るまで循環importやったらダメだと思ってたけど・・・ 記憶違いならスマソ どっちにしても循環しないようにしたらいいとおもた
- 619 名前:609,613,615 mailto:sage [2007/11/03(土) 23:19:02 ]
- >>615
610,613→609,613 間違えた。すまぬ。 >>618 >どっちにしても循環しないようにしたらいいとおもた えぇ。循環したいよぉー
- 620 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 23:27:37 ]
- 循環するほど密接してるんならもしかしたら一つのファイルにまとめるべきなのかもねえ
- 621 名前:609 mailto:sage [2007/11/03(土) 23:40:38 ]
- >>620
その通りですね。
- 622 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 23:48:57 ]
- >>618
モジュールコンストラクタがある場合に循環依存できないって制約は、 初期化順序を一意に定めるためのものであって、 循環依存自体に何か問題があるわけじゃないと思う。 コンパイラが挿入するカバレッジ解析コードに モジュールごとの初期化順序が何らかの影響を及ぼすとは考えづらいから、 やはりバグだと思う。
- 623 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 00:09:52 ]
- class Hoge {
int opProperty(string key, int val) { return 0; } } auto hoge = new Hoge; hoge.test = 22; // どうにかして => hoge.opProperty(test, 22); こんなキモいことできないかなー
- 624 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 00:11:58 ]
- 妄想乙
- 625 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 00:16:28 ]
- >>623
それってさ、opPropertyの中で、keyとvalに応じて分岐とかするの? それなら普通にメンバ関数の方がいいでしょ。 単にメンバ変数に値を設定するだけならテンプレートで増殖させるとかできるし。
- 626 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 00:18:40 ]
- >>623
opIndex(string key, int val)ってしてhoge["test"]=22で良くね?
- 627 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 00:19:38 ]
- ミスった。opIndexAssignね。
- 628 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 00:22:46 ]
- ーにかした
ソースの外見をきにしてしまったアホだった/(^o^)\
- 629 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 00:24:03 ]
- 雪駄下駄を書くのが面倒くさいだけなら、わなDのサンプル
template attr_reader(T, string name) { mixin( "private T _" ~ name ~ ";" ); mixin( " public T " ~ name ~ "(){ return _" ~ name ~ ";}" ); } class Point { mixin attr_reader!(int, "x"); mixin attr_reader!(int, "y"); this(int ix, int iy) { _x=ix; _y=iy; } } で十分。 でも、普通に書いた方がいいと思うぞ。
- 630 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 00:27:39 ]
- ドキュメント生成用のコメントつけられなくなるしなー。
- 631 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 00:39:49 ]
- きもさを追求するなら、opAutoload導入して欲しい。
- 632 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 01:48:16 ]
- 本からパクッた!あ。いや、参考にして、タートルグラフィック実装してみた。
アーカイブの中に結果画像入ってる。 これぞ、コンピュータグラフィックってかんじで面白いね。 windows専用です。 www9.uploader.jp/dl/sukiyaki/sukiyaki_uljp00004.zip.html
- 633 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 01:58:08 ]
- ゲッタとか雪駄とかって他のC系列では自分で生成できないからすげーあこがれてたんだぞ。
それをこんなむげに扱いよって。ぷんぷん。 え?ビーム??でないよそんなの。
- 634 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 02:10:27 ]
- ですよねー
- 635 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 04:02:59 ]
- プロパティの += とか -= とかなんで許可してないんかね。
array.length += 2; ってやったら array.length = array.length + 2; って変換してくれりゃ良いだけなのに。 演算子オーバーロードとの競合を防ぐため?
- 636 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 04:14:42 ]
- 将来的にはできるようになる予定とかどっか書いてなかったっけ。
- 637 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 04:31:27 ]
- D言語は糞だから期待しちゃだめ
- 638 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 04:52:39 ]
- ruby式だー
- 639 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 05:01:50 ]
- >>635-636
もう忘れてるんじゃないのw
- 640 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 06:49:24 ]
- をるたんももしかしたら
各自array.length = array.length + 2;ってかけばいいのに とかおもってたりは・・・ないか
- 641 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 11:09:39 ]
- をるたんも実はarray.length += 2;って書けたらいいなあ、とか思ってる。
- 642 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 11:27:39 ]
- でも現実的に割に合わない面倒なことだなあ、とも思ってる
- 643 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 12:39:51 ]
- そんなしょうもないもの実装してる暇があったらマクロ実装してやんよ!
と思ってるに違いない。
- 644 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 12:44:59 ]
- ほんとだな?
- 645 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 16:16:42 ]
- くろーじゃー!
- 646 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 17:35:53 ]
- でも対称性の点から見てもあってもいい機能だよな常識的に考えててててて
- 647 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 19:14:06 ]
- D2 の構造体/クラスの配列で sort しても opCmp 呼ばれなくなってね?
- 648 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 22:12:35 ]
- どうも吐くアセンブラがバギーな感じ
- 649 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 22:31:11 ]
- D2おもしろんだけど、コンパイラがバグだらけで使い物にならんな…
- 650 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 22:41:14 ]
- ttp://www.sun-inet.or.jp/~yaneurao/dlang/Chapter-03.html#030400000000
このVSつかうデバッグできてる人いますか? VS2005でやってみたけど、どうもうまくいかないです
- 651 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 22:52:32 ]
- >>648
delegateまわりがとくに closure関係だろうな
- 652 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 23:21:18 ]
- void main(){
A!(int) a; a.f(); } struct A(T){ T t; A!(A!(int)) f(){ A!(A!(int)) a; return a; } } これってやっちゃいけないことなのかな。 エラーになる。 Aをコンテナとして、リストのリストと言う具合に、 入れ子にするのは良くあることだと思うのだけど。
- 653 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 23:46:58 ]
- >>652
A!(A!(int)) をtypedefしたりなんやらしてたらDMDが無限ループに入っちまった。 怖い怖い
- 654 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 00:05:24 ]
- >>652
普通に無限ループしないか? テンプレートをインスタンス化すると、その内部のテンプレートがインスタンス化され、 さらにその内部のテンプレートがインスタンス化され、、、
- 655 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 00:09:45 ]
- >>647
2.003と2.007の動作は同じよう。変化なかったよ。 1.023と2.007の動作はぜんぜん違った・・・ 要素3つの配列をソートするだけの処理で・・・ 1.023は、配列初期化時にopCmpを20回、ソート時に3回呼び出してる。 2.007は、配列初期化時にopCmpを3回、ソート時には呼び出しなし。 2.007は降順で1.023は昇順という大きな違いが←既知事象?
- 656 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 01:11:38 ]
- gdcって1.020までしかないの?
だめじゃん
- 657 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 01:35:23 ]
- あった・・・
なんで最新のやつをでかでかと表示したりしないんだろ
- 658 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 01:39:02 ]
- >>654
最終的にはintで止まるはずだから、無限ループはしなさそうだけど C++でやってみたら大丈夫だったし
- 659 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 02:06:12 ]
- え、Dって末尾再帰最適化してんの
- 660 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 02:46:11 ]
- なぜ突然「末尾再帰最適化」?
関係ないだろ
- 661 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 03:53:51 ]
- そういえばDって無限リスト書けんのかな
- 662 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 04:03:57 ]
- それっぽいものなら何とでもかけると思うが。
- 663 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 12:07:40 ]
- クロージャが来た記念ってことで、遅延リストを作って遊んでた俺。
でも、lines :: [char] -> [[char]]が書けなくてショボーン。 getContentsとか、zipWith使ってフィボナッチとかはできたお。
- 664 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 12:39:25 ]
- >>658
考えてみてもintで止まるということがよく分からんかった。 A!(int)はA!(A!(int))型戻り値の関数を持ち、 そのA!(A!(int))型はA!(A!(A!(int))))型戻り値の関数を持ち、… となるように思える。(intから始まって、止まらない) A!(int)の実体化中にA!(A!(int))を実体化しようとすると、 無限リストよろしく永遠に型の実体化が終了しないんじゃなかろうか。 で、A!(A!(int))の実体化のタイミングをA!(int)の定義後にしようと思って struct A(T){ T t; A!(TA) f(TA=A!(T))(){ A!(TA) a; return a; } } としてみたけど、それでもコンパイラ様は再帰展開だとおっしゃる。 で、小手先の変更として f(TA=A!(T))() を f(TA=typeof(this)) と変えてみたら dmdがsemantic3でオチタ\(^o^)/
- 665 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 13:19:30 ]
- くそー2.007おもしろそうなんだが、前のプログラムが動かん・・・
今まで追い続けたんだけど、今回は2.006にもどすよ。。。 >>663 面白そうな雰囲気 まったくわからんおいらに説明おねがいします
- 666 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 13:41:58 ]
- >>664
よく見ようよ。 A!(A!(T))だと確かにとまらないけど、上のコードはA!(A!(int))。 どう見ても有限の展開しかしない。 単に動かないのはdmdのバグでしょ。
- 667 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 13:46:10 ]
- class List(T) {
static List!(List!(T)) listOfList() { return null; } } alias List!(int) t;
- 668 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 13:59:06 ]
- >>666
なるほど、A!(A!(int)).fの戻り値型はA!(A!(int))そのものになるのね。
- 669 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 15:35:01 ]
- 単純にA!(A!(int))を展開しようとしたらまたA!(A!(int))が展開されて・・・という話ではないの?
- 670 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 15:55:09 ]
- 同じテンプレート引数では一回しか実体化されないはず。
- 671 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 16:11:39 ]
- あーそうだった
俺ショボスwww
- 672 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 16:47:13 ]
- 実装しだいでは、A!(A!(T))でも大丈夫だと思う。
なんせ、C++ではこれが正常に動くのだから。 C++でできることはDでもできてほしい。 using namespace std; template<class T> struct A{ T t; A<A<T>> f(){ A<A<T>> a; a.t.t = 2; return a; } }; int main(){ A<int> a; A<A<int>> b = a.f(); cout << b.t.t << endl; return 0; }
- 673 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 18:04:20 ]
- 久々にスレの勢いを見てみたら、
この板ではC/C++, Javaについで3番手だということに気づいた。 PerlやJavaScriptやPHPはここではない場所でやってそうだが、 それでもずいぶん上に来たものだ。
- 674 名前:663 mailto:sage [2007/11/05(月) 18:24:56 ]
- >>665
Haskellに標準搭載されてる遅延リストを、Dでどれだけ実現できるか、という試み。 実行コストが高いから実用性は無くて、お遊びでしかないけど。 ttp://www9.uploader.jp/dl/sukiyaki/sukiyaki_uljp00005.zip.html ここに上げたから、詳しくはこれを見てみて。 linesとgetContentsとzipWithは、Haskellにある関数。 linesが書けないのは>>652がエラーになるせい。
- 675 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 18:31:51 ]
- >>673
ウォルたんから新ネタがどんどん届くからな 間違いなく勢いはある
- 676 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 18:47:32 ]
- クロージャが入ってからの勢いがものすごいだけで、普段はそんなにすごくないんじゃないかな。
- 677 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 19:01:11 ]
- C++インターフェースのときもすごかったよね。
>>773 をををっありがとうございます 拝見します
|

|