D言語 Part28at TECH
D言語 Part28 - 暇つぶし2ch616:デフォルトの名無しさん
11/12/27 21:03:32.31
D言語が落ち着くまで待ち続けるぜ

617:デフォルトの名無しさん
11/12/27 21:08:22.82
UFCSとラムダ式が入るらしい
まだまだ若者には負けんよ

618:デフォルトの名無しさん
11/12/27 21:21:05.99
UFCSって何?

619:デフォルトの名無しさん
11/12/27 21:22:04.16
Windows版64bit対応くらいしてくり

620:デフォルトの名無しさん
11/12/27 21:23:30.80
Universal Fire Contol System

621:デフォルトの名無しさん
11/12/27 21:47:40.01
これで敵軍も拾った武器で戦えるようになるね! っておい

622:デフォルトの名無しさん
11/12/28 10:39:17.88
2.057でもHello, World1MBのまま?

623:デフォルトの名無しさん
11/12/28 13:05:42.51
import std.stdio;
void main() { writeln("hello, world."); }

↑に -O -relese -inline 付けて
933404byte=911.5kbyteだった

624:デフォルトの名無しさん
11/12/28 14:06:17.81
クソだな

625:デフォルトの名無しさん
11/12/28 15:43:07.33
>>622
2.058から220KBに減るよ

626:デフォルトの名無しさん
11/12/28 15:50:05.25
別にでかくても実害ないとは思ってるが、小さいバイナリ好きなのもちょっとわかる

627:デフォルトの名無しさん
11/12/28 15:58:44.05
>>625
リリース直後にそういう話が出てたから対応済みかと思ってたわ
2.057 に移行する意欲が減退・・・冬眠でもするか

628:デフォルトの名無しさん
11/12/28 16:43:49.87
サイズってそんなに重要?
配布するにしても7zとか使えば誤差みたいなもんだと思うんだけどなあ

629:デフォルトの名無しさん
11/12/28 17:50:25.84
その辺はPyの文法が許せるかとか
MyClassName instance = new MyClassName();
の冗長性が許せるかとか
そういうレベルの話だと思う。
気にする人もいればそうでない人もいる。

630:デフォルトの名無しさん
11/12/28 17:52:43.48
小さいプログラムだと結構嫌だな、サイズでかいの
まあそういうのはDなんか使わないでスクリプト言語でも使ってろって話なんだけど

631:デフォルトの名無しさん
11/12/28 18:46:43.46
公開したり、他の人へあげるの、躊躇するよね
大した機能もないのに1MBだと、何か仕込んでるじゃないと勘ぐられそうでw

632:デフォルトの名無しさん
11/12/28 23:04:03.41
upx使うと147kbまでがっつりと減った。
こっちはこっちで抵抗あるとは思うが、いちおう。

しかし900kbってなんかDelphiを思わせるサイズだ。
Dってアルファベットになんか呪いでもあるのかとw

633:デフォルトの名無しさん
11/12/28 23:13:50.50
Deburin

634:デフォルトの名無しさん
11/12/28 23:19:14.70
そのファイルサイズ、大きいように見えるでしょ?
でも、実際にはOSのシステムファイルと共通してる部分が多いから、実際にはそんなにサイズは食ってないんです。

635:デフォルトの名無しさん
11/12/28 23:41:09.33
いや表示されてるだけサイズ食ってるだろw
ゼロパディングされてるわけでもあるまいし

636:デフォルトの名無しさん
11/12/28 23:41:48.93
実際に900KB食ってるだろ

637:デフォルトの名無しさん
11/12/28 23:43:30.61
これが本当のエクササイズ

638:デフォルトの名無しさん
11/12/29 09:47:22.63
upx使うと減るってことは冗長な記述が多いってことか……

639:デフォルトの名無しさん
11/12/29 12:49:18.74
Dは大らかな人達が開発してるんだよ
ファイルサイズくらいどうってことないよ

640:デフォルトの名無しさん
11/12/29 15:14:24.01
649 デフォルトの名無しさん [sage] 2011/12/29(木) 14:50:37.28 ID: Be:
学生プログラマ日本一決定戦(予選は社会人も参加可)
URLリンク(codevs.jp)
現在予選開催中
応募締切 2012.1.6 12:00

おもしろいことやっているじゃん。誰か今から参加しろよ。

641:デフォルトの名無しさん
11/12/29 17:12:06.58
>>640
盛り上がってないからって
あちこちで宣伝すんなよ

642:デフォルトの名無しさん
11/12/29 19:03:34.97
>>635
バイナリエディタでexe見てみたら、ゼロばかり並んでるw

643:デフォルトの名無しさん
11/12/29 20:32:50.15
タワーディフェンスだと・・・?
URLリンク(codevs.jp)

644:デフォルトの名無しさん
11/12/29 20:40:47.22
Watch out, or you may attract a thunderbolt!!

645:デフォルトの名無しさん
11/12/29 22:13:18.43
久々にJavaScriptで書いてみたが、コンパイル時型チェックがないのは面倒ではあるな
大規模プログラミングでこれは使えないだろうとは思った。

646:デフォルトの名無しさん
11/12/30 12:35:56.70
だが、それがいい

647:デフォルトの名無しさん
11/12/30 13:45:55.76
近頃のDはコンパイラアップデートしても割とすぐコンパイルできる代わりに
端々で以前と違う挙動をしてアプリをバグらせてくれる
これはいいものだ


648:デフォルトの名無しさん
11/12/30 13:54:14.69
年内今日明日で何か作る

649:デフォルトの名無しさん
11/12/30 17:31:39.90
import std.xml;
import std.stdio;
void main() {
 auto doc = new Document(new Tag("root"));
 auto e = new Element("elem");
 e.tag.attr["attr"] = `"quot"`; // '"'入りの文字列
 doc ~= e;
 writeln(std.string.join(doc.pretty(1),"\n"));
}

$ dmd -run x.d
<root>
<elem attr=""quot"" />
</root>

以前std.xmlで属性がエスケープされないって話があって、確か直ったはずなんだけど
どうして戻ってるの…

650:デフォルトの名無しさん
11/12/30 18:11:03.14
std.xmlってなくなるんじゃないの?

651:デフォルトの名無しさん
11/12/30 18:21:06.27
Cのlongと同じ型!みたいなエイリアスが詰まったモジュールとかありませんか?

652:デフォルトの名無しさん
11/12/30 19:21:53.92
>>650
無くなるのはいいけどいつまで経っても無くならないなぁ
代替手段ができるまではちゃんとメンテしてほしす

653:デフォルトの名無しさん
11/12/30 21:13:57.83
>>651
Cはプリミティブ型のバイト数決まってないから無理

654:デフォルトの名無しさん
11/12/30 21:54:49.34
>>653
だからこそdmcの型と対応するaliasが欲しいって話じゃね?

655:デフォルトの名無しさん
11/12/31 01:31:26.59
version か何かで分岐すれば良い

656:デフォルトの名無しさん
11/12/31 01:55:24.04
それをユーザ側でいちいち用意するのは馬鹿らしいってことじゃないの?
intptr_tはあるけどな

657:デフォルトの名無しさん
11/12/31 08:00:29.16
使う人いるのか、いないだろうな
他のライブラリポーティングするにしても大抵Uint8とかGLintみたいにそのライブラリ固有で型定義してるし

658:デフォルトの名無しさん
11/12/31 08:35:48.82
typedef long HogeLibInteger;
D語に訳すにはどうすればいいんでしょうか

659:デフォルトの名無しさん
11/12/31 09:26:42.03
alias long HogeLibInteger;

660:デフォルトの名無しさん
11/12/31 15:51:22.55
typedefがオワコンになった今、今更キーワードaliasをtypedefに戻せない辺りに哀愁を感じる

661:デフォルトの名無しさん
11/12/31 16:02:11.71
3.0に期待

662:デフォルトの名無しさん
11/12/31 16:30:12.61
@strong alias
こんな感じで

663:デフォルトの名無しさん
11/12/31 20:10:52.35
どっちでもいいけどななー
typedefに戻すメリットもたいしたものないし

664:デフォルトの名無しさん
11/12/31 21:16:57.34
typedefってJavaのgotoみたいな永久欠番になるのかな

665:デフォルトの名無しさん
11/12/31 21:18:15.30
3.0開発し始めたら

アンドレイ「いいこと考えた。1行で完全に新しい型を定義できる機能とか新しくね?」
ウォルたん「いいね!なぜかtypedefってキーワードが空いてるからそれ使おう」

ってなるよ

666:デフォルトの名無しさん
11/12/31 21:38:40.28
typedefの代わりに、structで包めばいいかな

667:デフォルトの名無しさん
11/12/31 21:55:14.94
別にstrong typedefは新しい機能でもなんでもないぞ。C言語由来の型システムとはなじまないってだけで。

668:デフォルトの名無しさん
11/12/31 23:28:12.64
リファクタリング...ひらめき...実装...リリース!

669:デフォルトの名無しさん
12/01/01 01:23:56.49
灰になった!

670:デフォルトの名無しさん
12/01/01 04:42:41.23
代替手段ができるまではメンテして欲しいよな

671:デフォルトの名無しさん
12/01/01 09:48:04.67
代替手段ができるできる詐欺である可能性もあるからな
そろそろD言語も元年を標榜してみる?

672:デフォルトの名無しさん
12/01/01 20:42:49.91
-propertyへの対応で元日終わりそう

673:デフォルトの名無しさん
12/01/01 21:34:04.83
あれ?

int func1() { return 1; }
@property int func2() { return 1; }

void func3(int i) { }
@property void func4(int i) { }

void main() {
 int i;
// i = func1; // -propertyだとコンパイルエラー
 i = func2;

 func3 = i; // コンパイルできる…
 func4 = i;
}

これってそういう仕様なの?

674:デフォルトの名無しさん
12/01/02 05:53:20.19
Dって引数以外でref変数あるの?

675:デフォルトの名無しさん
12/01/02 10:10:17.53
>>674
関数の返り値はrefにできる。
変数自体には指定できないけど、ポインタやクラスで代替可能。

676:デフォルトの名無しさん
12/01/02 10:50:07.97
ありがとうございます。おとなしくポインタ使います

677:デフォルトの名無しさん
12/01/02 11:24:20.97
ポインヨだろ 間違えるな

678:デフォルトの名無しさん
12/01/02 14:35:37.56
ポインティーヌ

679:デフォルトの名無しさん
12/01/02 18:08:52.92
>>673
URLリンク(github.com)
パッチを出したがまだマージされていない

680:デフォルトの名無しさん
12/01/02 18:17:05.66
>>649
ざっとstd.xmlのコード見てみたが、
> e.tag.attr["attr"] = `"quot"`; // '"'入りの文字列
はTagクラスのpublicなattrフィールド(連想配列)に直接値を設定しているから、
encode/decodeとか何も動かない。

つまりそんな機能は元から無い様に見える。

681:デフォルトの名無しさん
12/01/02 19:20:56.52
Tagクラスの toNonEndString のところ
decodeじゃなくて、encodeにすべきなんじゃないのか?

682:デフォルトの名無しさん
12/01/02 20:03:47.76
>>681
ああ、そっち(出力)の方か。確かにそこをencodeにすると、
outputがエンコードされるようになるな。

誰かbugzillaにレポート投げてくれればfixされるかも。

683:デフォルトの名無しさん
12/01/02 22:54:27.85
>>679
やっぱバグなのね。ありがと

つまり次のバージョンでもう半分の-property地獄を体験することになるわけだな
これだからDはやめらんねぇ!

684:デフォルトの名無しさん
12/01/03 00:42:58.19
std.xml Commentクラスのコンストラクタ内
× if (content == "-" || content.indexOf("==") != -1)
○ if (content == "-" || content.indexOf("--") != -1)

685:デフォルトの名無しさん
12/01/03 05:59:45.30
おお
やっぱ消えると分かっていてもメンテしてくれないと困るな

686:デフォルトの名無しさん
12/01/03 06:00:41.72
あるいはguthubで特定のソースに対するpatchを簡単に絞り込めないのかな

687:デフォルトの名無しさん
12/01/03 14:21:43.58
ネスト関数に事前条件無しで事後条件書くと構文エラーになるけど、
事前条件有りで事後条件書くとコンパイル通って動くんだけど、なんか理由があるのかな?

688:デフォルトの名無しさん
12/01/03 21:12:23.26
>>687
手元で試したら全部通ったけど、どんなコード書いたの?

689:デフォルトの名無しさん
12/01/03 22:31:29.87
>>688

void main()
{
string foo()
//in
//{
//}
out (result)
{
assert(result.length == 0);
}
body
{
return null;
}
}

__EOF__

このままコンパイルしようとすると構文エラーで通らない。コメントアウトすると通る。
ちなみにコンパイラはDMD64(v2.057)をUbuntu向けパッケージからインストールしたもの。

690:デフォルトの名無しさん
12/01/03 22:35:18.75
エラーメッセージはこんな感じ

d.d(7): found 'foo' when expecting ';' following statement
d.d(7): expression expected, not ')'
d.d(7): found 'out' when expecting ')'
d.d(8): found '{' when expecting ';' following statement
d.d(11): Declaration expected, not 'body'
d.d(14): unrecognized declaration

691:デフォルトの名無しさん
12/01/03 23:08:59.74
それ多分ウォルターの自作自演だから

692:デフォルトの名無しさん
12/01/04 00:21:59.25
>>689
パーザーの問題。DMDのパーザーは手書きだからこういう抜けが未だにある。
in/outなしでbodyだけ付けるのも同じようにrejectされるな。

原因は判ったのでパッチを書いておくが、bugzillaはどうする?
自分で投げてみるいいチャンスかも。

693:デフォルトの名無しさん
12/01/04 00:32:34.95
ちなみにテストコードはこれ

void main()
{
size_t foo() in{} out{} body{ return 0; } // OK
size_t bar() /*in{}*/ out{} body{ return 0; } // NG1
size_t baz() /*in{} out{}*/ body{ return 0; } // NG2
}


694:デフォルトの名無しさん
12/01/04 03:41:31.25
あ、仮引数の省略ってできたっけ?

695:デフォルトの名無しさん
12/01/04 03:42:00.71
あと使わない実引数の省略もか

696:デフォルトの名無しさん
12/01/04 09:52:43.56
>>694
仮引数の省略は不可。
一応、可変個引数で似たようなことは出来るが、余計めんどくさい・・・

>>695
デフォルト引数が設定されている引数については省略可。

697:デフォルトの名無しさん
12/01/04 12:15:29.91
いやそうでなくて、変数名の省略

698:デフォルトの名無しさん
12/01/04 13:06:37.84
変数名省略できる言語なんかあるのか?

699:デフォルトの名無しさん
12/01/04 13:13:57.12
timerStart( 1000, (Timer,EventArgs){ doSomeThing(); } );

こういうのが書ければいいってことでしょ

700:デフォルトの名無しさん
12/01/04 13:17:33.72
長い変数名を書くのが面倒で、短い変数名にしたいって事なら、alias使えばおk。
クラスや構造体の参照を簡略化したいなら、with文を使うのもあり。

型名を書くのを省略したいという事なら、残念ながらDでは出来ません。
関数オブジェクトを簡単に作りたいなら、関数リテラルを使えばおk。
型が違うだけで、処理の内容が同じ関数を書くのが嫌という話なら、テンプレートを使えばおk

701:デフォルトの名無しさん
12/01/04 13:36:24.87
>>697
void foo(int, long){ ... }
みたいに、通常の関数で型だけを書いて仮引数名を省略することは可能。
これはC言語系列のsyntaxを受け継いでいる。

>>699
2.058からは関数リテラルで仮引数名の省略は出来なくなる。なぜなら
関数リテラルのパラメータ型推論・funciton/delegate推論が入ったため、

(a, b){ doSomethig(); }

で、a,bが型名か仮引数名かパース時点では判明しないため。
→2.057までは型名として、2.058以降は仮引数名として扱われるようになる

>>700
上に書いたとおり、関数リテラル限定で型名を書くのを省略できるようになる。

702:デフォルトの名無しさん
12/01/04 14:02:36.29
>>701
なんで通るんだろうと思いつつ。
で、どうやって引数の値にアクセスするのよ?
URLリンク(ideone.com)

誰だ、型名省略できるって言ったやつ。
まあ、戻り値の型は省略できるけどね。
URLリンク(ideone.com)

703:デフォルトの名無しさん
12/01/04 14:49:02.14
>>702
上:コールバック関数やデリゲートに渡すやつで
  「関数の型(引数リスト)が決められているけど
   引数は結局使われない」というケース。>>699 はその例
下:2.058(次期リリース)以降の話。

704:デフォルトの名無しさん
12/01/04 15:44:02.20
>>702
C言語やってないだろ!引数を参照しないとコンパイル時に警告でるからそれ対策で型名だけにするってよくやるよ


705:デフォルトの名無しさん
12/01/04 23:44:58.41
>>704
そうそれが知りたかった

706:デフォルトの名無しさん
12/01/05 01:32:26.19
>>689
issueとパッチのPullRequestを出しておきました。

URLリンク(d.puremagic.com)
URLリンク(github.com)

707:デフォルトの名無しさん
12/01/05 09:25:27.92
>>704
しらねーよ!悪かったな!

708:デフォルトの名無しさん
12/01/05 17:24:31.05
>>706
マージされた
URLリンク(github.com)

709:デフォルトの名無しさん
12/01/05 19:10:11.82
はやっ
どうなってんだ

710:デフォルトの名無しさん
12/01/05 23:12:29.93
はやすぎる(笑)

711:デフォルトの名無しさん
12/01/05 23:23:18.36
ム板では結局ここが一番落ち着く

712:デフォルトの名無しさん
12/01/05 23:29:57.36
上に同じこと書いたのを完全に忘れていた
もう駄目かな…

713:デフォルトの名無しさん
12/01/05 23:45:00.75
・基本的にWalterは毎日commitを行っている
・PullRequestも最低1つぐらいは一日にマージされる
・Parser関係のfixは理解しやすい&影響範囲も限られる
→変更の規模としては小さい部類なので比較的早くにマージされる

まあ、パッチの規模がでかいと逆に半年ぐらい放置状態になるんだけど。

714:デフォルトの名無しさん
12/01/06 06:30:57.53
他の言語と違ってここのはコンパイラの修正がユーザーに近い時点で行われてるから
根強いファンが絶えないのも頷けるなw

715:デフォルトの名無しさん
12/01/08 14:40:44.35
dwt2もgithubに移行か

716:デフォルトの名無しさん
12/01/08 18:03:48.52
dwt2 もろくにメンテされてなかったけど
移行してマシになるの?


717:デフォルトの名無しさん
12/01/08 20:18:31.68
一応メンテはされてるんだけど
オフィシャルへの反映が遅い…

718:デフォルトの名無しさん
12/01/08 23:41:55.28
ハードウェアがより高性能に進化、ソフトウェアがより多機能に進化、
それに命令や操作をする人間は進化するどころか文化や人格を決め付けや思い込みで否定する争いを始めた

719:デフォルトの名無しさん
12/01/09 01:26:59.13
DはマルチメディアやGUI関連に弱すぎる

720:デフォルトの名無しさん
12/01/09 02:04:44.28
質問です。
std.randomのuniformのboundariesを指定したいときはどうすればよいのでしょうか。

721:デフォルトの名無しさん
12/01/09 02:12:35.95
uniform!("[]")(0.0, 1.0, generator);

722:デフォルトの名無しさん
12/01/09 09:33:38.41
なんだその指定方法(笑)

723:デフォルトの名無しさん
12/01/09 10:53:52.75
>>721
ありがとうございました。

724:デフォルトの名無しさん
12/01/09 11:27:03.86
おまえらバンドのDは好き?
URLリンク(www.d-gcr.com)

725:デフォルトの名無しさん
12/01/09 16:41:13.84
今はじめて知ったから好きも嫌いもない

726:デフォルトの名無しさん
12/01/09 17:06:04.89
知ってたけど話題にするほどいいバンドじゃないからあえて書き込まなかったのに…

727:デフォルトの名無しさん
12/01/10 06:38:59.55
すみません。教えてください。

可変個関数引数に、ポインタを指定するにはどうすれば良いですか?

void die( ... )
{
real* foo = cast( real* )_argptr;
*foo = 0.0;
}

void main()
{
real evil = 666.0;
die( &evil );
}

こんな感じなのですが、上手く渡せません。

すいません。よろしくお願いします。

728:デフォルトの名無しさん
12/01/10 10:15:31.56
import core.vararg;
...
real* foo = va_arg!( real* )( _argptr );
...

phobos のソースを _argptr でgrepした (w


729:デフォルトの名無しさん
12/01/11 02:01:31.34
それポインタ?

730:デフォルトの名無しさん
12/01/11 11:51:42.81
_argptrは、渡された引数へのポインタなんだから。
URLリンク(ideone.com)

でも、もっといいのは、可変個引数関数を使うのではなくて、テンプレートのタプルを使う方法。
URLリンク(ideone.com)

もっと言うなら、ポインタを渡さずに、ref引数や、参照型のクラスを使う方が安全。

731:デフォルトの名無しさん
12/01/11 15:05:14.13
Internal error: ..\ztc\cgcs.c 354
ってなんぞ?

732:デフォルトの名無しさん
12/01/11 16:45:47.49
自己解決しますた
配列を返す関数を呼んでその戻り値に直接[]で添え字指定してたのが問題のようですた

733:デフォルトの名無しさん
12/01/11 17:38:51.29
Deimos楽しそうだね

734:デフォルトの名無しさん
12/01/11 19:39:44.49
なにせDでアプリ書くにはCのライブラリが必sゲルンゲフン

735:デフォルトの名無しさん
12/01/11 20:26:50.36
githubから消えてるんだけどdeimosってどこにあるんだ
あとVisualDがインテリセンス的なもの載せてさらに凄くなってやがる

736:デフォルトの名無しさん
12/01/12 01:00:24.65
URLリンク(github.com)

737:デフォルトの名無しさん
12/01/12 01:11:09.31
Dもrubyみたいにブラッシュアップしてくれる中学生(ただし美少女に限る)どこかにいないかな

738:デフォルトの名無しさん
12/01/12 20:10:17.09
スタックやキューなどのデータ構造のコレといったライブラリはありますか?
なければ自分で作るのでいいんですが、一応……。

739:デフォルトの名無しさん
12/01/12 20:58:39.02
dcollectionsなのかなあ、コレというのは
個人的には配列が強力すぎて必要性を感じない

740:デフォルトの名無しさん
12/01/15 11:28:39.23
bool foo(T)(T[] a ...){
return true;
}
void main(){
assert(foo(1,1,1,1,1,1));//OK
assert(foo("abc","abc","abc","abc"));//コンパイルエラー
}

これをコンパイルしようとしたら
test.d(6): Error: expected 1 function arguments, not 4
って怒られる


741:デフォルトの名無しさん
12/01/15 12:09:07.55
foo(1,1,1,1,1,1);
のほうは実は
foo([1,1,1,1,1,1]);
でも呼び出せる。
2番目のもこれだと解釈されてる

742:デフォルトの名無しさん
12/01/15 12:09:27.16
import std.stdio;

bool foo(T)(T[] a ...){
  foreach(i; a)
    write(i);
  return true;
}
void main(){
  foo([1,2,3]); // 出力: 123
}

SomeType[] a ...
という可変個引数の場合、可変部分ナシで配列を一つ渡すことでaに直接配列を渡せる。
だから、文字列(char[])に限らずfooに最初配列を渡した時点でaに対して配列を渡したことになって、複数渡すとエラーになる。

配列自体を可変個引数として渡したい場合は
foo!(string)("abc", "abc", "abc")
foo!(int[])([1,2,3], [4,5,6])
みたいにTが何であるか教えてやらないといけない。

743:デフォルトの名無しさん
12/01/15 13:03:58.75
>>741-742
Tをちゃんと指定しないといけないんですね。
ありがとうございました。

744:デフォルトの名無しさん
12/01/15 13:07:31.14
いやまあ、引数が配列複数な時点でコンパイラがTを配列として扱うべきな気もするけど……

745:デフォルトの名無しさん
12/01/19 12:38:20.34
std.container.Array!(char) str;
が通らないんですけどどうすればいいんでしょう
ちょっとgcから切り離されたstringが欲しかっただけなんですけど

746:デフォルトの名無しさん
12/01/19 14:28:21.70
>>745
malloc/freeを直接つかうとか

747:デフォルトの名無しさん
12/01/19 19:07:59.01
@property void push(int[] arr, int val) { arr ~= val; }
void main() {
 int[] arr;
 arr.push = 42;
}

UFCSとか見てて、どうせだからこういうことしたくなるけど
さすがに無茶だよなぁ

748:デフォルトの名無しさん
12/01/19 19:11:08.92
>>745
Array!(dchar) にしないとだめみたいだな
いいんだか、悪いんだか

749:デフォルトの名無しさん
12/01/19 19:41:50.36
>>747
後でソース読むときが大変だと思う

750:デフォルトの名無しさん
12/01/19 20:35:15.76
interfaceにGUID付けられるようにならないかな
RTTIからGUID取れるようにしてObjectのQIだけですべてのパターンに対応できる感じで
まあDelphiのパクリなんだけど
ちなみにこんな感じでできたら最高
URLリンク(ideone.com)

751:デフォルトの名無しさん
12/01/20 04:40:49.62
昆布のtoってオブジェクトに対してかけるとobj.to!Tに転送されるんだね
ソース見るまで気づかなかった

752:デフォルトの名無しさん
12/01/20 08:25:24.26
class A{
T to(T:string)(){
return "";
}
}
toStringより特殊化の方がいいってこと?

753:デフォルトの名無しさん
12/01/20 10:53:58.40
最近は
T to(T)() if (is(T == string)) {
のほうだな

754:デフォルトの名無しさん
12/01/20 11:09:13.49
しかし class の to は deprecate で cast 使うようになりそう?
URLリンク(www.d-programming-language.org)
Scheduled for deprecation in January 2012. Please define opCast for user-defined types instead of a to function. to will now use opCast.

755:デフォルトの名無しさん
12/01/20 11:42:27.25
to は双方向で
toString は一方通行のイメージ

756:デフォルトの名無しさん
12/01/20 23:04:37.08
foreachでmixinって出来ない?
foreachを展開してmixinしかないかな
こんな感じにしたい
int abc, def;
foreach(s; ["abc", "def"])
writeln(mixin(s));

757:デフォルトの名無しさん
12/01/21 00:59:55.47
mixinの中身はコンパイル時に確定しないといけないから無理じゃないかな
今CTFEでループさせるなら再帰しか無いけどstatic foreachって入る予定あるの?

758:デフォルトの名無しさん
12/01/21 01:55:05.17
>>756
こういう事じゃないんだろうな、と思いつつ。
URLリンク(ideone.com)

759:デフォルトの名無しさん
12/01/21 02:14:38.17
>>756
foreachをコンパイル時に回す(=展開する)なら、
配列ではなくタプルを渡すとうまく行く

import std.traits;
foreach(s;TypeTuple!("abc","def"))
 writeln(mixin(s));

760:デフォルトの名無しさん
12/01/21 02:25:29.44
>>751-755
型Aのオブジェクトaから型Bへの変換を行わせたい時、std.conv.toは
1. a.opCast!B()
2. a.to!B() // deprecated
3. B(a) // Bはstruct
または new B(a) // Bはclass
を試そうとする。但し B==string の場合はa.toString()が優先される。

761:デフォルトの名無しさん
12/01/21 02:51:27.28
>>757-759
聞いてみるもんだなありがとう!
>>759がまんまだったよ
でもstd.traitsじゃなくてstd.typetupleだった

762:デフォルトの名無しさん
12/01/21 02:56:10.51
俺はなんて遠まわしな事をしているんだ。
URLリンク(ideone.com)

763:デフォルトの名無しさん
12/01/21 07:35:04.36
>>759
おおすばらしい
この辺いつか文法的に整理されると信じてる

764:デフォルトの名無しさん
12/01/21 11:52:28.16
>>761
正直言ってTypeTupleという名前は混乱の元だと思ってる。
(型だけではなく式やシンボルも受け取れるので)
Seq!(...)より抽象的でいいと思うんだけどなあ

765:デフォルトの名無しさん
12/01/21 22:38:12.57
ところでRangeって便利ですか?

766:デフォルトの名無しさん
12/01/21 22:54:46.75
Ranger

767:デフォルトの名無しさん
12/01/22 00:04:41.28
便利さが実感できない

768:デフォルトの名無しさん
12/01/22 00:45:12.66
かゆいところに手が届かない

769:デフォルトの名無しさん
12/01/22 14:33:09.60
auto cap = std.regex.match( ... ).captures;

cap.length == 0 と cap.empty の結果が違うのはなんでなん?

770:デフォルトの名無しさん
12/01/22 16:30:51.49
間違えた
前は cap.empty を見なくても length だけで行けてたのに、何で変えてしまったん?

771:デフォルトの名無しさん
12/01/22 16:31:16.51
違わないけどどういう時?

772:デフォルトの名無しさん
12/01/22 16:41:52.41
公式じゃないdflってドラッグドロップしたら落ちるバグって治ってますか


773:デフォルトの名無しさん
12/01/22 17:05:25.62
確かこのスレの人が直したはず

774:デフォルトの名無しさん
12/01/22 18:12:29.32
Application.autoCollect = false;

公式見解のこの方法じゃなくて?


775:デフォルトの名無しさん
12/01/22 18:18:14.98
>>769-771
auto cap = std.regex.match( ... ).captures;
if (cap.length == M+1) {
// マッチしたときの処理
// 2.057 だとマッチしなくても入ってくる
}

こんな風に書いてたのが全滅して泣いた

776:デフォルトの名無しさん
12/01/24 23:07:56.06
スコープの外に出てないローカルオブジェクトってスコープの終わりで自動的にGCとかされます?

777:デフォルトの名無しさん
12/01/25 00:06:00.07
>>776
URLリンク(kmonos.net)
されない。明示的にdeleteしても、scope属性を付けても保証されるのはデストラクタの実行まで。
core.memory.GC.collect()を呼んでも動かないかも?
URLリンク(bm98.yaneu.com)
↑ちょっと古いけど、この辺の実装今はどうなってるんだろう?

778:デフォルトの名無しさん
12/01/25 00:07:04.54
いえーい!777ゲット!

779:デフォルトの名無しさん
12/01/25 00:07:22.76
oh…

780:デフォルトの名無しさん
12/01/25 00:16:29.13
>>778
777オメw

781:デフォルトの名無しさん
12/01/25 07:49:24.19
>>740-744
PullRequest投げました
URLリンク(d.puremagic.com) id=7359
URLリンク(github.com)

782:デフォルトの名無しさん
12/01/25 07:58:58.20
>781
もうマージされてた
URLリンク(github.com)

783:デフォルトの名無しさん
12/01/26 02:00:58.42
すぐバグ修正されるのは素晴らしいね

784:デフォルトの名無しさん
12/01/27 18:00:14.63
if ( DialogResult.YES == msgBox( msg, caption, MsgBoxButtons.YES_NO), MsgBoxIcon.QUESTION )
doSomething();


785:デフォルトの名無しさん
12/01/28 01:07:17.94
しまった、オカルト板と間違えた

786:デフォルトの名無しさん
12/01/28 11:32:26.21
闇言語だからだいたいあってる

787:デフォルトの名無しさん
12/01/28 15:33:27.90
いつから出来なくなったん・・
auto f = FILE("test.txt", "w");

788:デフォルトの名無しさん
12/01/28 16:42:32.13
>>784
ついった見ててやっとわかったけど `, MsgBoxIcon.QUESTION` の位置を間違えてるせいで
毎回doSomething()が実行されてナニコレ、って言いたかったんだな

789:デフォルトの名無しさん
12/01/28 20:35:04.94
auto f = File("test.txt", "w");

790:デフォルトの名無しさん
12/01/29 01:19:23.20
>>789
その考えは盲点でした。すばらしい!!

791:デフォルトの名無しさん
12/01/29 16:33:18.48
Add new => lambda syntax.
なにこれ
つーかアップデートのたびBug直されまくってるのな

792:デフォルトの名無しさん
12/01/29 16:38:36.32
これかな
URLリンク(www.d-programming-language.org)

793:デフォルトの名無しさん
12/01/29 16:51:09.63
dmdやphobosのバグに対処するのは楽しいがoptlinkだけはダメだ
血管が切れそうになる

794:デフォルトの名無しさん
12/01/29 17:24:14.36
URLリンク(d.puremagic.com)
RESOLVED WONTFIX だと・・・? orz

795:デフォルトの名無しさん
12/01/29 20:08:19.93
ラムダ式って => になんの?
既存の演算子を使い回すのやめてくれよ

796:デフォルトの名無しさん
12/01/29 20:11:30.02
既存?
Dの外の話でもしてるのか?

797:デフォルトの名無しさん
12/01/29 20:11:32.91
新しい文法だそうで
=>これまで使われてたか?

798:デフォルトの名無しさん
12/01/29 20:26:31.18
未使用

799:デフォルトの名無しさん
12/01/29 21:06:53.00
Haskell とかで別の意味の演算子として使われてるとかそういう話か?

800:デフォルトの名無しさん
12/01/29 21:30:41.51
C#とかでも=>だから合わせた方がいいんだろな

801:デフォルトの名無しさん
12/01/30 21:56:29.10
久しぶりにD言語スレ見てみたが相変わらず破壊的変更はあるようで
Rangeについて詳しい資料公式に転がってないか?

802:デフォルトの名無しさん
12/01/30 22:17:51.92
ここが最近の詳しく解説しているページ。公式かどうかは知らない。
URLリンク(ddili.org)

803:デフォルトの名無しさん
12/02/01 01:02:10.04
class A{void f(){}}
class B: A{override void f(){}}

のとき、Bを継承したクラスがfをオーバーライドしてるか判断する方法ってありますか?


804:デフォルトの名無しさん
12/02/01 01:08:55.00
Bをさらに継承したクラスCがあった場合
(&B.f is &C.f) で判断できる
これがtrueの場合オーバーライドしていない

805:デフォルトの名無しさん
12/02/01 01:31:01.79
import std.stdio;
class A{void f(){}}
class B:A
{
  void p(B b){
    if(&b.f is &f){
      writeln("---");
    }else{
      writeln("override!");
    }
  }
  override void f(){}
}
class C:B{}
class D:C{override void f(){}}

void main()
{
  auto b = new B;
  b.p(new C);
  b.p(new D);
}

実行結果
override!
override!


なぜ・・・orz

806:デフォルトの名無しさん
12/02/01 01:44:59.45
auto v1 = &b.f;
auto v2 = &f;
(v1.funcptr is v2.funcptr)
これで判断できました。ありがとうございます。

807:デフォルトの名無しさん
12/02/01 21:27:54.19
scopedってもう使ってもいい系?

808:デフォルトの名無しさん
12/02/01 22:02:42.96
なんか悪い噂とかあったっけ?

809:デフォルトの名無しさん
12/02/01 22:19:17.76
scope記憶クラスの代用品として仮実装中ってどっかで見たような記憶があるようなないような

810:デフォルトの名無しさん
12/02/02 01:21:12.60
class A { }

void main() {
Object[] a = new A[2];
}

これ暗黙変換できなくなったの?

811:デフォルトの名無しさん
12/02/02 02:11:51.89
それ元からできないと思う

812:デフォルトの名無しさん
12/02/02 02:25:44.57
>>810
それを許すと以下のような問題が起きる

class A { } 
class C { } 

void main() { 
Object[] a = new A[2]; 
a[0] = new C; // Aしか入らない所にCを入れている


813:デフォルトの名無しさん
12/02/02 02:34:58.93
いやその理屈はおかしい

814:デフォルトの名無しさん
12/02/02 02:41:46.52
Javaでもできたお

815:デフォルトの名無しさん
12/02/02 02:42:33.29
動的に静的の問題じゃないの?

816:デフォルトの名無しさん
12/02/02 18:27:31.78
>>810
>Object[] a = new A[2];
これと
Object[] a = [ new A(), new A() ];
これは違うよね。上は暗黙変換出来なくていいと思う。


817:デフォルトの名無しさん
12/02/02 19:00:50.88
A[2] b;
pragma(msg, typeof(new A[2]));
pragma(msg, typeof( [new A(),new A()] ));
pragma(msg, typeof(b));

A[]
A[]
A[2u]

818:デフォルトの名無しさん
12/02/02 19:06:16.22
>>817
ほお…知らなかった
Dの静的配列と動的配列の値渡し/参照渡しとかの仕様が頭の中でこんがらがる

819:デフォルトの名無しさん
12/02/02 20:56:50.02
前から気になってたんだけど
static if(...) {
} else static if(...) { ← ここのstaticってなんで必要なの?
}

820:デフォルトの名無しさん
12/02/02 21:20:36.45
static if(...) {
} else {
  static if(...) {
   ...
  }
}
の略だから

821:デフォルトの名無しさん
12/02/02 21:28:43.30
>>817
816で言いたかったのは、動的か静的かではなく、
>Object[] a = new A[2];
は配列長を確保してるだけなので必要な場面が思いつかない。
暗黙変換できなくていいと思う。
でも810がやりたかったのはエスパーすると
Object[] a = [ new A(), new A() ];
こっちじゃね?なら暗黙変換できるよーと言う事です。

822:デフォルトの名無しさん
12/02/02 21:52:58.62
new A[2];の結果は各要素(参照)がnullである長さ2の動的配列ってことか

new A[2];はnew A[](2);に読み替えられてるのかな

823:821
12/02/02 22:02:22.30
あ、「先祖クラスの配列へのcastは例外的に暗黙でいいやん」と言う話だったならたしかにそう思います。

824:デフォルトの名無しさん
12/02/02 22:10:09.59
>>822
Error: cannot implicitly convert expression (new A[](2u)) of type A[] to Object[]

と出てるからまさにその通りだと思う。

825:デフォルトの名無しさん
12/02/02 22:20:34.66
>>822
C++感覚で new A[2] と書くとドツボにはまりそう。

826:デフォルトの名無しさん
12/02/02 23:53:54.57
静的配列
サイズがコンパイル時に決定
値渡し、返り値にも使える
静的配列の代入は複製
動的配列はサイズが同じなら代入できる、違えば例外、この場合も複製されるはず(うろ覚え)

動的配列
参照型
int[]にint[10]とかを代入できるはずだがどうなるかは忘れた

827:デフォルトの名無しさん
12/02/03 01:53:58.80
>>826
int[10] a;
int[] b;
b = a; // 複製されない
assert( b.ptr == a.ptr );
b = a.dup; // 複製される
assert( b.ptr != a.ptr );
b[] = a; // 複製される
assert( b.ptr != a.ptr );

828:デフォルトの名無しさん
12/02/03 19:48:53.28
$ type reg.d
import std.regex;
import std.stdio;
void main() {
writeln(match("他"d, regex("バ"d)));
writeln(match("他"d, regex("ビ"d)));
writeln(match("他"d, regex("ブ"d)));
}
$ dmd -run reg.d
[]
[]
core.exception.AssertError@D:\devtools\dlang\dmd2\windows\bin\..\..\src\phobos\std\utf.d(800): Attempted to decode past the end of a string


偶然踏んでしまった

829:デフォルトの名無しさん
12/02/03 22:41:57.52
056->057間のstd.regexの変更っぷりに吹いた

830:デフォルトの名無しさん
12/02/04 08:13:07.47
typeidと.classinfoがあるのは歴史的な理由?便利さから?

831:デフォルトの名無しさん
12/02/04 08:28:41.96
>>810
公式ドキュメントのArraysに暗黙変換できるって書いてんだが…

832:デフォルトの名無しさん
12/02/04 12:44:43.72
きっと夢でも見たんだろう

833:デフォルトの名無しさん
12/02/04 12:49:28.15
2.057ではねられるようになって首を傾げてたんだぜ
やっぱり regression か

834:デフォルトの名無しさん
12/02/04 17:44:44.34
Arrayに関しては禁止するべきだと思うんだがな
動的配列に静的配列入れたときも破壊的変更するとき初めてコピーされるという奇妙な仕様になってるし明示的にdupとかキャストさせるべき

835:デフォルトの名無しさん
12/02/04 19:04:51.37
っCopy-On-Write

836:デフォルトの名無しさん
12/02/06 12:32:24.51
>>831-833
URLリンク(d.puremagic.com)

なんか 「D2 では禁止!ドキュメントが古い!」とか
言ってるんすけど・・・ユルセナイ シャザイト バイショウヲ ヨウキュウシル


837:デフォルトの名無しさん
12/02/06 13:12:32.03
trunk のドキュメントをのぞいて見たらこうなってた。(´・ω・`) ショボーン

○ A[] -> const(Object)[]
× A[] -> Object[]

838:デフォルトの名無しさん
12/02/06 19:16:23.41
あー、うーん、まあそうか…

839:デフォルトの名無しさん
12/02/06 19:35:51.35
なるほど、そうじゃないと
auto a1 = new A[](10);
Object[] a2 = a1;
a2[0] = new Object;
でバグっちゃうのか。
明示的に
Object[] a2 = a1.dup;
こうするのは今もできるってことね

840:デフォルトの名無しさん
12/02/06 20:30:19.03
そういやdupでimmutable剥がせる件ってどうなったんだろ

841:デフォルトの名無しさん
12/02/07 17:22:48.20
細かい仕様変更にはもうついていけないよう

842:デフォルトの名無しさん
12/02/08 00:52:17.22
dupはimmutableはがせるでしょ
idupだとimmutableのまま

843:デフォルトの名無しさん
12/02/08 02:57:23.76
constとimmutableの違いがよく分からないよぅ

844:デフォルトの名無しさん
12/02/08 03:03:38.39
const: 不変値を関数間で共有
immutable: 不変値をスレッド間で共有

845:デフォルトの名無しさん
12/02/08 09:54:57.34
2.058ダウンロードどこでできるんですか!?

846:デフォルトの名無しさん
12/02/08 12:12:21.70
まだリリースされてない
どうしてもさわってみたければ github から3点セットでDLしてビルドしる

847:デフォルトの名無しさん
12/02/08 17:35:50.05
>>844
間違ったこと教えちゃいかんよ・・・

const その参照から値は変えられないが、別の要因で変わることがある。
immutable いかなる要因でも値が変わらない。

848:デフォルトの名無しさん
12/02/08 17:50:05.45
constの分かりやすい例。
URLリンク(ideone.com)

849:デフォルトの名無しさん
12/02/08 18:46:46.08
ガンダムで例えると
シールド付きがconstで
フルアーマーがimmutableってことね

この例えはとにかく、なるほど…勉強になりました。

850:デフォルトの名無しさん
12/02/08 18:52:49.18
constは引数変数向けの型ってイメージがあるな
引数と関わりのないconst変数なんて作らないよね?

851:デフォルトの名無しさん
12/02/08 19:05:15.37
クラスのフィールドでインスタンス初期化時に固定するものとかconstにする

852:デフォルトの名無しさん
12/02/08 19:09:39.82
それってimmutableでもいけるんじゃないの?

853:デフォルトの名無しさん
12/02/08 20:19:05.10
Const と Immutable
URLリンク(www.kmonos.net)

>>852
static this()

854:デフォルトの名無しさん
12/02/09 16:56:02.59
static thisでだとimmutable初期化できないのかーと思ったけどできるじゃん
どういうことが言いたかったの?

855:デフォルトの名無しさん
12/02/09 18:53:53.23
>>854
ごめん、勘違いしてた

856:デフォルトの名無しさん
12/02/10 19:16:59.45
下のコードをコンパイルするとdmdが落ちるんですが。
dmdのバージョンは2.057です。
template foo(T){
 enum foo = __traits(hasMember,T,"sizeof");
}
static assert(foo!(int)); //DMD Crash


857:デフォルトの名無しさん
12/02/10 19:33:23.96
久々にGUIライブラリを見て回った
gtkD・wxD・DFL(fork)・DWT辺りは元気だけどQtDが死んでるなぁ
どこか別の所で元気にやってるのかな?

858:デフォルトの名無しさん
12/02/10 19:45:03.62
>>856
trunk の最新ソースを落としてビルドしたら落ちなくなってた(WinXP 32)

859:デフォルトの名無しさん
12/02/10 19:57:57.79
>>858
では、2.058では解決されているのですね
ありがとうございます

860:デフォルトの名無しさん
12/02/12 10:01:51.83
明日は2.058リリースか
3.0とかどうなったんだろな

861:デフォルトの名無しさん
12/02/12 13:11:08.52
D3はmoduleに代わってnamespaceを導入して
呼び出し側でもrefとかoutとかつけて属性を明示できるようになって
プロパティはset/getキーワードを用意して自然に表現できるし
Attributeクラスでメソッドの属性を自作できる上にラムダ式とかも余裕で使えるし
しかも.NETフレームワークで動く

862:デフォルトの名無しさん
12/02/12 13:12:55.18
今更namespaceとかありえないんじゃないかな

863:デフォルトの名無しさん
12/02/12 13:16:46.99
>>861
あとはVisualStudioで開発できれば完璧だな

864:デフォルトの名無しさん
12/02/12 13:29:42.65
D3では多重ディスパッチがついて型推論が進化

865:デフォルトの名無しさん
12/02/12 14:26:26.13
D3ではなんとヘッダーとソースをファイルレベルで分離して記述することができるようになります!

866:デフォルトの名無しさん
12/02/12 14:27:41.37
ヤメテ!

867:デフォルトの名無しさん
12/02/12 15:37:41.30
機能追加を国民投票で選びます
投票券はTDPLに付属

868:デフォルトの名無しさん
12/02/12 17:04:21.14
呼び出し側にrefつけるのは普通に欲しい
必須じゃなくてもつけまくるわ

869:デフォルトの名無しさん
12/02/12 17:49:28.42
>>868
C# とか VBのアレか
アレはすごくほしい

けどタプルとかうまく使ったらいらないぜ
ってものかも知れない

870:デフォルトの名無しさん
12/02/13 00:20:34.12
なにそれ。
D3 と C# の違いを教えてくれ。
const ありの C# としても使えるならぜひ使おうかと思うんだが。

871:デフォルトの名無しさん
12/02/13 00:23:01.61
D3.0はPerl6よりは現実的な開発が予定されてる言語

872:デフォルトの名無しさん
12/02/13 01:02:54.60
Perl6ってそんな非現実的なの?w

873:デフォルトの名無しさん
12/02/13 01:12:46.83
はたしてあれ実装できるんだろうか
WebProg板にスレあったはず

874:デフォルトの名無しさん
12/02/13 01:23:54.85
ググってみたら吹いた。
設計開始から10年で初の処理系ってD言語超えてるな

875:デフォルトの名無しさん
12/02/13 07:09:01.91
心配すんな、クリスマスには出る

876:デフォルトの名無しさん
12/02/13 19:03:17.74
Dは登場と共に処理系もあったじゃないか
永遠に開発中だけど

877:デフォルトの名無しさん
12/02/13 19:16:20.31
設計完了に先立つこと10年にして早くも処理系

878:デフォルトの名無しさん
12/02/13 20:23:52.67
C言語だって・・・最終仕様より先に初期実装があったんだ!


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch