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/
684 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 21:22:04 ] >>682 はもうちょっと落ち着いてもいいと思う やけに楽しそうだw
685 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 21:44:05 ] getenv("CONTENT-LENGTH").toInt() とかはちょっとニヤリとしてしまう
686 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 21:51:41 ] 俺は予想外にもクロージャ来たから冬眠からさめちまった
687 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 22:23:48 ] CGIっつーかAjaxっつーかweb開発用のフレームワークってありますか?
688 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 22:32:07 ] なんか、あったような気もするけど、古いかもなあ。
689 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 23:01:15 ] 自己を動的に派生クラスに書き換えるモデルを考えて、 以下のようなコードを組んでみたのですが、失敗しました。 そもそも自己を動的に派生クラスに書き直せるのかちょっと疑問になったのですが、 こういうことは可能なのでしょうか。 class Hoge { this() {} void rewrite() { this = new Huga; } } class Huga : Hoge {} void main(){ auto a = new Hoge; a.rewrite; writefln(a); // -> Hoge }
690 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 23:02:37 ] >>687 sakuraiさんがずっと前に作ってなかったっけ
691 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 23:12:28 ] >>689 変数aのアドレスなり参照なりがわからないと無理でしょ。 メモリのインスタンスが存在する部分を書き換えるわけにはいかないから、 変数aが指しているものを書き換えるしかない。
692 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 23:17:57 ] 仮想メソッドを直接書きかえ・・・いやなんでもないです
693 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 23:18:58 ] できてしまった import std.stdio; class A{ void change(ref A a){ a = new B; } } class B : A {} void main(){ auto x = new A; writefln(x); // a.A x.change(x); // a.B writefln(x); }
694 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 23:21:26 ] コメント書くところ間違えた あとインデント見やすく import std.stdio; class A{ void change(ref A a){ a = new B; } } class B : A {} void main(){ auto x = new A; writefln(x); // a.A x.change(x); writefln(x); // a.B }
695 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 23:26:15 ] this ってメソッド呼ばれる時にインスタンスのポインタを値渡しされたただの隠しパラメータだからな。 だから、this をいくら書き換えても呼び出し元の変数(ポインタの値)は変わらないまま。 this が元から lvalue にならなきゃ混乱しないのに。
696 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 23:31:15 ] >>692 求めているものは仮想メソッドの動的書き換えで、 かつオーバーロードできればいいなあという感じ(なのでデリゲート不可)で、 それが理想なんですが、さてどうしたものかと。 >>691 >695 なるほど。。少し分かってきました。 この辺を突破できるトリックをぼちぼち探してみます。
697 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 00:10:16 ] >>694 ひとまずこれベースで行ってみます。 ありがとうございました。
698 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 01:03:34 ] っステートパターン って言ってみる
699 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 01:37:40 ] D言語を使うからにはもっとトリッキーな手法をとるべきではなかろうか。
700 名前:デフォルトの名無しさん [2007/11/06(火) 01:57:34 ] D言語は糞
701 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 02:31:15 ] >>697 Has-a使ってやってみるのは? ttp://www9.uploader.jp/dl/sukiyaki/sukiyaki_uljp00006.zip.html なんでこの線路 .d がアップロードできんのん?
702 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 03:39:17 ] なんか8スレ目ぶりくらいにアンチを見た。
703 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 04:43:04 ] dupと[]って書き方以外になんか違うところあるの?
704 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 08:01:51 ] >>703 dupは複製される。[]はされない。 int[] x = [1,2,3]; int[] y = x[]; y[0]=999; writefln(x); // 999 2 3 (y=x.dupなら1 2 3)
705 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 08:35:14 ] クロージャがくると、coroutineがもうすぐできる という夢をみた
706 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 13:49:41 ] >>703 []は配列全体のスライス。 dupはミュータブルな複製。 したがって、型が違う場合がある。 static assert(is(typeof("foo") == invariant(char)[3])); static assert(is(typeof("foo"[]) == invariant(char)[])); static assert(is(typeof("foo".dup) == char[]));
707 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 14:57:39 ] ここまで試してみた結果のまとめ ・自己インスタンス書き換え 外部の自身を指すポインタのアドレスを渡す必要がある=複数あった場合は厄介 newでコンストラクタを呼び出すと厄介 ・delegateスイッチング+可変データアダプタ オーバーロードできない プロパティ風呼び出しができない ・Has-a オーバーヘッドはあるが、無視できることが多いかも ExchangerとInterfaceで2回定義を書くのがやや冗長 ・分岐 オーバーヘッドが大きい ・Factory 動的な変更が内部的には行えない 自身を指すポインタが複数あると厄介 自分の目的だとHas-aかデリゲートスイッチングの2択になりそうですが、 もう少し煮詰めてみて面白そうなら報告いたします。
708 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 15:37:02 ] アップローダのアップ形式は自分ではいじれないっぽい〜。 レンタルなんですけど、ちょっと不便だなぁ。 >>684 お察しのとおり、たのしくて! えぇーっと、多少自重します〜。
709 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 15:39:36 ] d monooki とかいうDのソースコードアップロードできる場所が あったけど、いま使えるっけ?
710 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 18:12:19 ] >>707 別のインスタンスにすり替えるんじゃなくて、インスタンス自体を書き換えてみた import std.gc, std.stdio; class A{ void change(){ // A to B if(B.sizeof > capacity(cast(void*)this)){ if(extend(cast(void*)this, B.sizeof-A.sizeof, B.sizeof-A.sizeof)){ throw new Exception("std.gc.extend failed"); } } size_t ptrsize = (void*).sizeof; with(B.classinfo){ (cast(byte*)this)[0..init.length] = init[0..init.length]; } } } class B:A{ void change(){ // B to A ...省略... } } void main(){ A a = new A; a.change(); writefln(a); //B a.change(); writefln(a); //A }
711 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 19:31:30 ] きんもー☆
712 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 19:43:00 ] 強烈過ぎて吹いたw ちょっと使える場面が限定されそうなので、しっかりメモしてそれにとどめておきます しかしgcがありながらこれができてしまうDの変態さには感心する
713 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 19:44:55 ] gcがあるからこそできるんじゃね?
714 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 23:46:58 ] version条件で、#ifndefとか#if !defined()とか#if defined() && defined() #elseに相当することってできましたっけ? なんとなくstatic ifに書き換えてますが、無駄を感じるもので。
715 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 23:51:29 ] どのへんが無駄?
716 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 23:56:53 ] static if以外にはversionとdebugくらいしかないと思う 他にあったっけ?
717 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 00:06:16 ] version(...){...}else{...}はできたような希ガス
718 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 00:47:35 ] #if defined(FOO) && !defined(BAR) ... #else ... #endif これが書きづらい。 static ifは定義済みでないと扱えないので、これをすっきり表現するには、 versionで定義されてるかどうかを真偽値とする定数を作って、……とやってるんだが、 このへんがどうにかならんもんかなあと。
719 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 00:59:10 ] #define FOO に変わるものがなあああいい
720 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 01:07:02 ] コマンドラインで指定するのをあきらめて、const使う案しか思い浮かばない const FOO = true; static if(FOO){ const HOGE = true; } else{ const HOGE = false; }
721 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 01:07:08 ] >>719 version=FOO;
722 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 01:44:30 ] >>548 について本家で聞いてみたら、 「バグだとは認識されてるけど、『直す手間の割に実がない』とウォルターが言ってた」 とのこと。 まあ回避できるし特にいいかなと。
723 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 02:07:56 ] >>718 mixin宣言で「hoge1&&!hoge2ならversion=hoge3」とかやろうとしてみたけど mixin宣言で生成したversion文より先に素のversion文が解決されてしまうっぽくて、 mixin("version = hoge3;"); version(hoge3){ int x = 5; } と書いても version hoge3 defined after use と言われてしまう。 mixinがversionの評価の前に通れば、もうちょっとましにはなりそう。 (そうなるよりは、version文が進化する方がありえそうな話だけど) version(foo)version(bar){ // foo && bar }else{ // foo && !bar }else version(bar){ // !foo && bar }else{ // !foo && !bar } これは書きづらい上に読みづらいな。 現状では、718の言う通りversion+static ifというのが一番マシなやりかただろね。
724 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 11:52:12 ] >>722 乙っす なるほど >『直す手間の割に実がない』 これがすべてだなw
725 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 12:46:29 ] しかしそんなんじゃいつまで経っても普及しない希ガス
726 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 12:51:30 ] そもそもウォルターには普及させる気がない気がしてる…
727 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 15:55:55 ] でもさりげなく次の更新に修正されてるという・・・
728 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 16:06:18 ] >>727 それはウォルターには普及させる気がないっていう不具合ですか
729 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 16:34:37 ] それは仕様です
730 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 20:15:04 ] ウォルタンのバグはいつ直るの?
731 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 20:24:46 ] >>494 void rebuild(E,T)(ref T[E] array) { T[E] result; foreach(i, k; array.keys) result[k] = array.values[i]; array = result; } テレビと同じで叩けば動くらしい。
732 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 20:24:56 ] をるたんはをるたんの唯一の実装にして仕様そのものなので、直すべきバグは存在しません。
733 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:08:44 ] flectioned の v2.007 対応のってない?
734 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:58:03 ] private 定義したクラスってどういう意味になるの?普通にC++でいうstaticかと思ったら違うみたいだし。 逆にC++でいうstatic(ファイル内スコープ)なクラスはどうやったらできる? ---- b.d ---- module b; private class B {} private void hoge() {} ---- a.d ---- module a; import b; void main() { B b = new B; // OK hoge(); // Error: function b.hoge is not accessible from a }
735 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 22:05:43 ] 仕様によればモジュールスコープのprivateは、 Cのstaticと同じ意味になるはず。 B b = new B; もエラーにならないといけないはず。
736 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 22:30:14 ] てことはバグかぁ。 サンクス。 まぁ、それほど困らないバグだしほっとくか・・・
737 名前:デフォルトの名無しさん [2007/11/07(水) 22:32:53 ] >>733 flectionedをD2.007でコンパイルを通して使ってみたけど、 ちゃんと動いてないっぽい。 main関数直下でArrayBoundsError例外を発生させたら、 スタック表示はされたけど、関数名がでない。 (std.array.ArrayBoundsError) ArrayBoundsError main(80) 0x0012FD34 0x004046B3 <?> 0x0012FD4C 0x00404651 <?> 0x0012FDC4 0x004236E2 <?> 0x0012FF30 0x004023BC int main(char[][]) 自前のクラスのメンバ関数でArrayBoundsError例外を発生させたら、 main関数が表示されてないし。 (std.asserterror.AssertError) AssertError Failure dbuffer.d(158) 0x0012FCDC 0x0040341F <?> 0x0012FCF4 0x004033BD <?> 0x00000043 0x0042244E <?> ていうか、さっき初めて使ったので、なんか使い方を間違ってるのかも。 とりあえず[わなD]を見ながら使ってみたよ。 www.kmonos.net/alang/wnd/topics/flectioned.ja.html flectionedがちゃんと使えるようになると便利いいんだけどな。 それにしても[わなD]はいつも助かるぜー。ありがたい。
738 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 00:55:02 ] >>737 うp
739 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 02:04:41 ] DDocについて、dittoの挙動が ///Params:x=aaa void func(int x){} ///ditto void func(double x){} ↓ void func (int x); void func (double x); Params: int x aaa ってかんじに、xの型がintってあたりが納得いかないんだが…と地味に思った。 この場合どうしたらいい感じに出力できるのかな? CandyDocとか使うと結構きれいに出てくれて素敵なんだけど…こういう細かいところがなぁ…
740 名前:733 mailto:sage [2007/11/08(木) 02:34:43 ] 自分でポートしてみた。 (std.array.ArrayBoundsError) ArrayBoundsError bug(25) 0xBFB35C74 0x08052158 extern(C) void _d_array_bounds(char[], uint) 0xBFB35C88 0x0804B389 void bug.__array 0xBFB35CA0 0x0804B2F6 void bug.foo() 0xBFB35CB8 0x0804B31E int main(char[][]) なんかちがうね?なんでだろ?>>737 当方 linux
741 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 13:08:56 ] >>739 それもきっと>>722 ってことなんだろうなぁ。 もう>>722 の金言は「D言語の哲学」として>>1 に張っとくといいんじゃね?
742 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 13:42:07 ] そんあこといわれたら全部>>722 って言われちゃいます><
743 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 14:11:54 ] size_t l; stream.read(l); array.length = l; これ地味に面倒じゃねwwww array.length = stream.read!(size_t); とかで簡単にかけたら便利そうだなあああああああ
744 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 15:40:26 ] 動的配列なのにわざわざ先にサイズ指定しなくてもと思うけど・・・。
745 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 16:40:24 ] 動的配列だから先にサイズを読み込むんじゃ…?
746 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 16:59:45 ] 別に配列関係ないだろ。
747 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 17:08:31 ] ラムダ式まだー
748 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 17:09:28 ] >>743 をるたんにその便利さを説けば入れてくれるんじゃね?
749 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 17:24:18 ] >>743 自分で関数書いたらよくね?
750 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 17:29:47 ] 配列以外にも拡張メソッド構文が採用されれば、できるな。
751 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 17:32:25 ] ブライト艦長としては、既にDの開発に使える人生のリソースを100%使っていて、 どこをイジるかってのは完全にリソースの振り分け、優先順位の問題なのだろうし、 もうしばらくは優先順位の極めて高いwktkなアイディアが常に溢れた状態だろうから、 よっぽどの相対的価値をアピールしない限り、振り向いてはくれないだろうね。
752 名前:デフォルトの名無しさん [2007/11/08(木) 21:31:57 ] >>738 コンパイルが通るだけで動作確認ができてないですけど、 もしどこかに簡単にアップできる先があればアップしますよ。 >>740 おー、ご自分でポートされたんですね。 ちゃんと動いてるっぽくていいなー。 [わなD]を見ると、私のほうでちゃんとでてないのは、 -gオプションで再コンパイルしたphobos使ってないからかも。 ちなみにうちは、WindowsXP / dmd2.0007 / phobos / dsss で稼動させてます。
753 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 21:54:20 ] 2.0007 ご、ごめん
754 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 22:57:23 ] ちなみに同じ問題で悩んだけど 1.x 系だと phobos コンパイル通らなかった・・・! phobos のコンパイル通すのですら、をるたんにとって優先順位低そうでイヤン
755 名前:デフォルトの名無しさん mailto:age [2007/11/09(金) 00:14:05 ] D言語製のブラウザとかないわけ
756 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 00:15:40 ] ないわけ >>753 気持ちわかるw
757 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 03:30:53 ] D言語製のブラウザとか必要もないよな・・・
758 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 03:44:52 ] 参考になるサンプルはある程度必要だろ
759 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 06:32:26 ] アプリのサンプルというよりゲームとかなら作られてるみたいだな。
760 名前:デフォルトの名無しさん [2007/11/09(金) 07:26:59 ] C/C++の遺産の再利用がまだしづらいのかな?
761 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 07:43:00 ] サンプルを作ってもちょっと経ったらコンパイルできなくなりそうな言語
762 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 09:33:56 ] そして、いつぞやの納品したやつ脂肪。。。w
763 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 18:19:13 ] CTFEや文字列mixinに対応したIDEまだ?
764 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 21:13:59 ] >>763 >>461
765 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 22:23:07 ] CTFEって何ぞ?
766 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 22:27:22 ] www.kmonos.net/alang/d/glossary.html#ctfe
767 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 22:31:11 ] どんも。mixinならまだしも CTFE に対応はかなり厳しくない?
768 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 00:21:44 ] もうコンパイラがIDEになっちまえばいいのではないだろうか。
769 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 01:00:31 ] tango の tango.text.String と tango.text.Text が機能的に一緒に見えるんだが、何なんだ、これ? ttp://www.dsource.org/projects/tango/docs/current/tango.text.String.html ttp://www.dsource.org/projects/tango/docs/current/tango.text.Text.html 名前変わったけどそのまんま残してあるとかそんなの?
770 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 01:03:54 ] String は非推奨になってるよ。 何でStringからTextにしたんだろ… StringはStringで別のものを提供するつもりなんだろうか… あとText.toUtf8()がおかしい。バグっぽい。Object.toUtf8()の「オーバーロード」関数になっちゃってるみたい…
771 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 06:25:53 ] そういや配列のプロパティ形式って配列でしかダメな理由あるのかな?
772 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 08:49:49 ] 配列にはメンバがないからルックアップが簡単になるためじゃなかろうか。 たしか、カンファレンスのスライドだったかで、配列以外にも拡張するようなことが書いてあったと思う。
773 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 09:04:59 ] そのうちメソッドが void func(Class c) { } auto c = new Class; c.func(); なんてことになるのかな
774 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 09:43:15 ] さすがにそれはどうかと思う
775 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 09:53:36 ] >>772 s3.amazonaws.com/dconf2007/WalterAndrei.pdf 9ページだな まさに>>773 のことが書いてある。
776 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 10:39:56 ] >>773 ので書いたらクラスに後からメソッドを追加出来るな
777 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 10:42:11 ] それじゃクラスいらないね 全部構造体でいいじゃん
778 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 10:44:04 ] 拡張メソッドはprivateメンバに触れないからカプセル化ができないじゃん
779 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 10:48:25 ] >>770 非推奨になってたのか。サンクス。 機能的にテキストエディタを意識しているように見えるから Text に名前変えたんかな。
780 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 11:25:42 ] お、Dにも来るのかそれ。 ……関数・メソッド・プロパティじゃそれぞれ相応しい名前が違ってくるから、 あんまり安直にごっちゃに出来て欲しくはないなぁ、というのは神経質というか今更かしらん。
781 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 12:20:32 ] 自分としてはモジュールのstatic import や別名つけてる時も大丈夫なようにして欲しいな。 import Conv = std.conv; "12345".Conv.to!(int); とか。使ってる関数がどのモジュールに属するのか簡単に分からないのは嫌いだし 呼び出してるのがメソッドなのか関数なのか区別つかないのは精神衛生上よろしくない。
782 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 12:27:45 ] それはまた気持ちが悪いな…
783 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 13:13:39 ] うへぇ、きめぇwwwwが褒め言葉のD言語ですが >>781 自分的にもそれはほしいけど、なんかわかりにくくなるね… …ここでスコープ解決演算子::の登場。 import Conv = std.conv; "12345".Conv::to!(int); とか。何でも.でアクセスするのはC++使ってた身としてはコード的に見にくくなる気がしている。
784 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 13:19:09 ] "12345".Conv :: to!(int); ↑ここで意味の切れ目がある感じがして好きじゃないなあ "12345".(Conv.to!(int)); とか。