5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

D言語 Part21

1 :デフォルトの名無しさん:2009/02/11(水) 23:45:51
プログラミング言語 D (D Programming Language) について語るスレッドです。
過去スレ、関連スレは >>2

■前スレ
http://pc11.2ch.net/test/read.cgi/tech/1226631916/

■本家
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/3da5oa (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)

2 :デフォルトの名無しさん:2009/02/11(水) 23:46:31
過去スレ、関連スレ
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統合M26【Java/C/PHP/Ruby/Python/Perl】
http://pc11.2ch.net/test/read.cgi/tech/1224536200/

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/

3 :デフォルトの名無しさん:2009/02/11(水) 23:49:30
>1の変更点はldcと前スレ部分
以上

4 :デフォルトの名無しさん:2009/02/11(水) 23:51:18
>>1
乙です

5 :デフォルトの名無しさん:2009/02/12(木) 00:16:39
なんか気がついたら1000きてた、みたいなまったりさが好きだ。
>>1乙。

6 :デフォルトの名無しさん:2009/02/12(木) 00:43:44
Dのさらなる繁栄を願う

>>1

7 :デフォルトの名無しさん:2009/02/12(木) 02:04:26
auto D = D >>1;

8 :デフォルトの名無しさん:2009/02/12(木) 03:16:45
http://jp.rubyist.net/magazine/?0025-RareAreGCTalk
D言語タンのGCのアルゴリズムはなんて奴で実装されてるの?


9 :デフォルトの名無しさん:2009/02/12(木) 03:29:29
まーくあんどすうぃーぷ

10 :デフォルトの名無しさん:2009/02/12(木) 05:15:37
全ての関数の返値は第一out引数にしよう!
そうすればopCastオーバーロード問題も一気に解決!

11 :デフォルトの名無しさん:2009/02/12(木) 08:57:34
>>8
一時期世代別が実装されそうな雰囲気になったけど
druntimeが抽出された時にどこかへ行ってしまったw

12 :デフォルトの名無しさん:2009/02/12(木) 09:59:03
>>1

うぉるたんかわいいようぉるたん

13 :デフォルトの名無しさん:2009/02/12(木) 10:05:05
>>12

7 :デフォルトの名無しさん [↓] :2008/11/15(土) 16:36:07
おっさんだぜ?

14 :デフォルトの名無しさん:2009/02/12(木) 10:08:49
ttp://www.astoriaseminar.com/images/walter.gif

15 :デフォルトの名無しさん:2009/02/12(木) 20:30:51
おいおい夢を壊すなよ

16 :デフォルトの名無しさん:2009/02/12(木) 20:35:18
その壊された夢がすごく気になる…

17 :デフォルトの名無しさん:2009/02/13(金) 01:10:00
[1] 授業単元:D
[2] 問題文(含コード&リンク):
1から9までの数字を縦横方向に同じものが並ばないように下記の例のように並べる
並べ方が全部で何通りあるかとその並びをすべて列挙する
[3] 環境:特になし
[4] 期限: 明日まで
[5] その他の制限:

534681297
685293714
948367125
153472869
426538971
261759483
817945632
379126548
792814356

18 :デフォルトの名無しさん:2009/02/13(金) 03:38:28
マルチ乙

19 :デフォルトの名無しさん:2009/02/13(金) 08:55:36
どこの大学でDの授業があるのか教えてくれたら、解いてやるよw

20 :デフォルトの名無しさん:2009/02/13(金) 09:34:16
return net.hatena.quest("1から9までの数字を縦横方向に同じものが並ばないように並べる\n"
"並べ方が全部で何通りあるかとその並びをすべて列挙する").primaryAnswer;

21 :デフォルトの名無しさん:2009/02/13(金) 22:20:33
ループ中にGUIを更新したいんだけどdflではどうしたらいいの?
C#で言うところのDoEventだっけかな。

22 :デフォルトの名無しさん:2009/02/13(金) 23:46:23
>>21
今ちょっとヘルプ見てみたら、dflにApplication.doEvents()ってあるらしいよ。
確認してないけど、使えるんじゃないかな?
でもdflは意外と地雷があったりするから、凝ったの作ろうとする場合は
気をつけて。

23 :デフォルトの名無しさん:2009/02/14(土) 00:09:36
>[1] 授業単元:D
??!

24 :21:2009/02/14(土) 02:04:10
>>22
Application.doEvents()で上手くいきました、どうもありがとう。

25 :赤西仁:2009/02/14(土) 15:39:21
1年間悩んでます。お力をお貸しください。

アークザラッドUというタイトルのゲームの、ゲーム画像(歩行画像など)を抽出したいのですが、
かれこれ1年ほど経ちますが、なかなかうまくいきません。
*もちろん抽出した画像は個人範囲内で利用するつもりです。

◆試してダメだったこと

 ネット上からダウンロードできる、ありとあらゆる抽出系ツールを試した。
 (ちなみに他のゲームはほとんど抽出可能)

◆教わったこと

 ・アークザラッドUは独自の画像形式を使っているから抽出できない。
 ・PS上で表示されてるということは絶対に摘出はできるはず。

◆抽出は不可能ではないということを知ったとき

 2ちゃんねるで質問したところ、
 ある方が実際にキャラクターの歩行画像を抽出して
 私が立てたスレにアップしてくださいました。

スクリーンショットじゃ嫌なんです。どうか皆さん、お力をお貸しください。

26 :デフォルトの名無しさん:2009/02/14(土) 17:22:11
バージョンアップまだー?

27 :デフォルトの名無しさん:2009/02/15(日) 02:26:24
ttp://www.digitalmars.com/d/1.0/changelog.html#new1_040
Version D 1.040   Feb 11, 2009
なんかいつの間にか出てる…
2.024が出てないから気付かなかった。

28 :デフォルトの名無しさん:2009/02/15(日) 02:38:30
1.xだけver upだと!?
    * Added Mac OSX support.
    * Separated bin and lib directories into windows, linux, and osx.
    * No longer need to download dmc to use the windows version.


29 :デフォルトの名無しさん:2009/02/15(日) 03:15:22
Macサポートは有難いけどページがまだ出来てないし
やはり2.xでのサポートが待ち遠しい

30 :デフォルトの名無しさん:2009/02/15(日) 06:18:46
正式なアナウンスきたね
2.024はどこに行ってしまったんだろうか…

31 :デフォルトの名無しさん:2009/02/15(日) 08:16:32
>>30
Extrawurst wrote:
> Very nice, but what happened to version 2.024 ?

test version

32 :デフォルトの名無しさん:2009/02/15(日) 14:27:29
Version D 2.025 Feb 14, 2009
New/Changed Features

Added Mac OSX support.
Separated bin and lib directories into windows, linux, and osx.
No longer need to download dmc to use the windows version.
Use version(OSX) for Mac OSX. Although version(darwin) is also supported for the time being, it is deprecated.
Bugs Fixed

Bugzilla 2448: template return by reference causes seg fault

33 :デフォルトの名無しさん:2009/02/15(日) 15:41:59
目玉はmac対応ってことくらい?

34 :デフォルトの名無しさん:2009/02/15(日) 15:43:22
CEにも対応してもらいたいんだが。。>うぉるたん

35 :デフォルトの名無しさん:2009/02/15(日) 15:49:14
binのパス変わってるのね

36 :デフォルトの名無しさん:2009/02/16(月) 01:59:25
Mac対応、どれだけ待ち望んでいた事か!

37 :デフォルトの名無しさん:2009/02/16(月) 02:56:50
次にどかんとくるとしたらRangeライブラリあたりかな?

38 :デフォルトの名無しさん:2009/02/16(月) 06:27:47
バージョン更新でMacへ移植いけるぜ!
しかし更新してコンパイル部でコードは通らなくなったがな!
さすが言語の破壊王だ!

Internal error: ..\ztc\cod4.c 357

39 :デフォルトの名無しさん:2009/02/16(月) 08:12:44
dmd 2.024〜

struct Bar { real x; }

class Foo {
        Bar x;
        const(Bar) func() {
                return x;
        }
}

コンパイラエラー
Internal error: ..\ztc\cod4.c 357

# Barの要素にrealだと再現する(doubleなら通る、Intel向け)
# funcの返値型がconst(Bar)ではなくBarなら起きない
# return cast(const Bar)(x)としても起こる
# 中間変数を入れてconst Bar y=x; return y;とすると起きない

40 :デフォルトの名無しさん:2009/02/16(月) 14:10:09
D2.0の更新見てみたら
2.024飛ばして2.023から2.025になってるんだけど
どういうこと

41 :デフォルトの名無しさん:2009/02/16(月) 16:04:46
>>40
>>31 のようにウォルたんが言ってる

42 :デフォルトの名無しさん:2009/02/16(月) 18:09:30
ウォルたんのことを思うと胸のドキドキが止まらない

43 :デフォルトの名無しさん:2009/02/16(月) 23:13:24
ttp://www.astoriaseminar.com/images/walter.gif

44 :デフォルトの名無しさん:2009/02/17(火) 01:26:04
やっぱりhigeがないとなぁ

45 :デフォルトの名無しさん:2009/02/17(火) 02:08:34
みんながソースを提示するときに hoge を hige と書けばいんじゃね?

46 :デフォルトの名無しさん:2009/02/17(火) 02:55:48
hige hage piyo

47 :デフォルトの名無しさん:2009/02/17(火) 12:43:24
誰かOPTLINKをまともに書き換えてくれる人はいませんか?
ttp://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=84330

48 :デフォルトの名無しさん:2009/02/17(火) 13:52:44
getcwd()を使うとカレントディレクトリとexeのパスがくっついた文字列が帰ってくるんだけど、なんで

49 :48:2009/02/17(火) 14:31:52
別の場所でexeのパス表示してたww

50 :デフォルトの名無しさん:2009/02/17(火) 16:52:52
どん☆まい

51 :デフォルトの名無しさん:2009/02/17(火) 17:07:58
>>49
ウォルたんも笑って許してくれるさ

52 :デフォルトの名無しさん:2009/02/17(火) 17:55:28
exeを起動しても正常に終わるのに、exeにファイルをD&Dするとなぜか途中で終了してしまいます。
どうしてでしょうか?

import std.stdio , std.file;

void main(string[] files){
string ini = cast(string)read("_.ini");

for(int i = 0 ; i < files.length ; i ++){
writefln(files[i]);
}

writef("end"); readln();
}

53 :デフォルトの名無しさん:2009/02/17(火) 18:28:08
BigIntを言語ネイティブにいれてくれー!

54 :デフォルトの名無しさん:2009/02/17(火) 19:00:02
じゃあ僕はdecimalを

55 :デフォルトの名無しさん:2009/02/17(火) 19:14:08
俺は四元数を

56 :デフォルトの名無しさん:2009/02/17(火) 19:17:21
>>52
ini を読む前にカレントディレクトリを表示してみるとどうだろう?


えーい、101キーボードでアンダースコートの入れ方がわからん!

57 :デフォルトの名無しさん:2009/02/17(火) 19:18:29
>>52 落ちないけど

58 :52:2009/02/17(火) 19:41:08
>>56
exe起動だとカレントディレクトリなのに
ファイルのD&D起動だとDocument and setteing\userを表示する
なんでだろ

59 :デフォルトの名無しさん:2009/02/17(火) 20:00:45
>>58
windowsの場合、現在のカレントディレクトリがファイルのD&Dで
D&Dされた先に変更されたりしないからかも。
以前VC++でコードを書いていたとき、同じような感じで悩んだことがある。
そのときはフルパス取得して処理したんだっけな?

60 :デフォルトの名無しさん:2009/02/17(火) 20:01:28
ファイルのD&Dで起動したときのカレントディレクトリが%USERPROFILE%だからじゃないのか?
実行ファイルの場所 == カレントディレクトリ とは限らない

61 :52:2009/02/17(火) 20:11:22
よく見ると知らないうちにDocument and SettingフォルダにD関係で処理してたファイルがたまってた

とりえあず
>void main(string[] files){ ... }
のfiles[0]にexeのパスが入ってるから、そこからiniのパス作って見ようと思います

どうもありがとうございました

62 :デフォルトの名無しさん:2009/02/17(火) 21:35:30
>>56
アンダースコアならalt押しながら95入力して放せばいいんじゃね。

63 :デフォルトの名無しさん:2009/02/18(水) 04:01:12
earthquake changes of std.regexp to come

In the upcoming releases of D 2.0 there will be rather dramatic breaking
changes of phobos. I just wanted to ask whether y'all could stomach yet
another rewritten API or you'd rather use std.regexp as it is for the
time being.


Andrei

64 :デフォルトの名無しさん:2009/02/18(水) 05:19:44
earthquake changes

ガクテカ

65 :デフォルトの名無しさん:2009/02/18(水) 07:40:33
英語わかんないなりに翻訳するとぶっ壊すよ、ってこと?

66 :デフォルトの名無しさん:2009/02/18(水) 07:58:24
アンドレイ詩人過ぎる

67 :デフォルトの名無しさん:2009/02/18(水) 09:44:10
元スレッドからざっくり訳すと

今のstd.regexpは設計、命名規則、実装、全部滅茶苦茶なんだよwww
streamも撮れないとかutf-8しか認識しないとかカスすぎるwww
俺が根っこから全部書き換えてやるから、トラブりそうなやつは今のうちに挙手しとけwww

という感じ

68 :デフォルトの名無しさん:2009/02/18(水) 09:56:47
で、onigu組み込んだらワロス

69 :デフォルトの名無しさん:2009/02/18(水) 11:02:29
初歩的な質問ですが、
バイナリファイルを指定サイズずつ読み込みたいんだけど、phobosだとどの関数使えばいいんですか?

70 :デフォルトの名無しさん:2009/02/18(水) 11:58:52
ちょwstd.rangeどうなったw

71 :デフォルトの名無しさん:2009/02/18(水) 19:43:24
>>68
oniguruma をDで焼き直して実装ならそれはそれでうれしいかも試練。
下手に独自仕様でこられると逆に厄介だ。

正規表現は方言多すぎなんだよ…


72 :デフォルトの名無しさん:2009/02/18(水) 20:01:27
QtのDバインディング、来てて嬉しーすげーと思ってたのに
Tango使ってんのな・・・

Phobos使用者にとっては、導入の敷居が高い。
利用者数ってPhobos<Tangoなの?

73 :デフォルトの名無しさん:2009/02/18(水) 20:40:06
>>72
これよくわからんよなぁ。

Tango使ってる人が布教に熱心なのかPhobos使ってる人が無口なのか。
いつまでたっても次期標準ライブラリなTangoよりPhobosの方が安心なんだが貧弱だからなぁ。

74 :デフォルトの名無しさん:2009/02/18(水) 21:34:09
>>69
std.stream.InputStream の readExact とか?
使った事ないから、違ってたらゴメンね

75 :デフォルトの名無しさん:2009/02/18(水) 22:15:57
std.stream.File.read(指定サイズのubyte配列)で適当にやってちょ

76 :デフォルトの名無しさん:2009/02/18(水) 22:17:40
正規表現はECMAScriptの規格になると思われ

phobosはad hocくさい実装と、練ってレビューを受けた実装が入り混じっているからなあ。
Tangoは網羅的で労力は頑張ったなという感じだが品質が保証済みかというとそうでもない。

Java、.NET、Pythonにあるような無駄にでかい、標準扱いのライブラリがちょっと欲しかったり。
Deimosという名前で。

77 :69:2009/02/19(木) 11:59:50
>>75なんとか読み込めました、ありがとうございます;

ubyte[1000] dat;
Stream file = new std.stream.File(path);
while(!file.eof()){
file.read(dat);
writefln(dat);
}
sleep(3);
file.close();

でもこれ、(読み込んだサイズ < ubyte[1000])の場合前回の情報が残ったままみたいですね

78 :デフォルトの名無しさん:2009/02/19(木) 12:23:23
while内にいれれば大丈夫だった、0x00で埋まってるけど

Stream file = new std.stream.File(path);
while(!file.eof()){
ubyte[1000] dat;
file.read(dat);
writefln(dat);
}

79 :75:2009/02/19(木) 14:49:04
>>77-78
なんていうかその、ごめんね

80 :デフォルトの名無しさん:2009/02/19(木) 15:31:56
read は実際に読み込まれたバイト数を返すみたいだから

while(!file.eof()){
auto len = file.read(dat);
writefln(dat[0 .. len]);
}

にした方がいいんじゃね

81 :デフォルトの名無しさん:2009/02/19(木) 16:28:34
>import core.thread;
って書くと
>test.d(2): module thread cannot read file 'core\thread.d'
って帰ってくるんですが
コアってどこにあるんですか?

82 :デフォルトの名無しさん:2009/02/19(木) 17:21:11
心の中にあるよ

83 :69:2009/02/19(木) 19:51:38
>>80
うまく末尾の0x00を切り捨てられました、ありがとうございます。

84 :デフォルトの名無しさん:2009/02/19(木) 20:37:55
>>67
Tangoもそうだけどなんで増築じゃなくて改築なんだろうな
リンカを通すって特徴をわざわざ殺すやり方ばかりするのが理解できん

85 :デフォルトの名無しさん:2009/02/19(木) 20:50:30
Dが互換性に配慮し始めたらおしまいだと思う

86 :デフォルトの名無しさん:2009/02/19(木) 21:14:05
>>84
意味不明。
変なコードを標準ライブラリに残しておく意味なんてないだろ。

87 :デフォルトの名無しさん:2009/02/19(木) 21:48:13
変なコードでもそれに依存してるものがある以上できるだけ壊すべきじゃない。
ランタイムライブラリが必要な言語は古い物と新しい物の両方を抱えると実行時の
パフォーマンスに影響しかねないけど、Dは使ってないものに関してはオーバーヘッドが
ないようにできるわけだから、そこをもっと生かすべきじゃなんじゃないかなぁと思うんだ。

88 :デフォルトの名無しさん:2009/02/19(木) 22:02:44
>>87
言いたいことは分かるし共感も出来る。
ソフトウェア製作においても重要なことだと思う。
でもね、このスレでその発言はおかしい。

89 :デフォルトの名無しさん:2009/02/19(木) 22:08:10
っつかD2.0系はAlpha扱いだしな。
普通に言語仕様に破壊的変更が起きるし、正規表現なんざ屁の河童だろ。

90 :デフォルトの名無しさん:2009/02/19(木) 22:11:52
>>87
残念なことに、今はなるべくそうしようという方向に進んでいるようです。
Version D 2.020のあたりのcore.threadとかはその前兆かと。
すでにPhobosですら隔離されつつある。
TangoはまだD2.0に対応する気はなさそうですが。

91 :デフォルトの名無しさん:2009/02/19(木) 22:32:32
std.regexpという貴重なパッケージ名を占有されたまま居座られても困るしね。

ダメなコードを消せるって幸せなことだよね……

92 :デフォルトの名無しさん:2009/02/19(木) 23:25:57
>>88
ワロタwww

93 :デフォルトの名無しさん:2009/02/19(木) 23:38:03
いろいろわかるが(むしろそっちの方が常識的だが)
過去のしがらみに縛られないのがDのいいところ

94 :デフォルトの名無しさん:2009/02/20(金) 00:01:04
そして永遠に誰も使わない

95 :デフォルトの名無しさん:2009/02/20(金) 00:43:36
ネット上の情報もただでさえ少ないのにD1/D2.0、phobos/tangoで分かれてるし

96 :デフォルトの名無しさん:2009/02/20(金) 01:37:17
標準ライブラリが2つあるという状況自体が既に色々と終わってる感がある

97 :デフォルトの名無しさん:2009/02/20(金) 02:39:10
でもそんなDが・・・僕は・・・っ!

98 :デフォルトの名無しさん:2009/02/20(金) 07:52:44
>>87
完全手探りのアルファ版の段階で互換性気にしてたら、
ほんとぐちゃぐちゃでわけわかんないことになるぞw

99 :デフォルトの名無しさん:2009/02/20(金) 08:16:54
Walter Bright wrote:
> Dejan Lekic wrote:
> > When can we expect 64bit version of DMD?
>
> Nobody's ever satisfied <g>.
>
> It has to be done sooner or later. Probably sooner.

100 :デフォルトの名無しさん:2009/02/20(金) 11:44:37
>>96
D1はD1でひとつの言語だと考えるといいと思う
あとD2に対応してない時点でTangoは使えないんだよなー
今のところD2やるならPhobosしかない

101 :デフォルトの名無しさん:2009/02/20(金) 17:07:57
配列の s[0..2] って s[i..i+2] みたいな書き方できなかったっけ

102 :101:2009/02/20(金) 17:10:57
あっ、できた

103 :デフォルトの名無しさん:2009/02/21(土) 02:11:57
おめ

104 :デフォルトの名無しさん:2009/02/21(土) 16:23:19
ファイルパスに日本語があると読み込めない

105 :デフォルトの名無しさん:2009/02/21(土) 16:33:22
主語と目的語を

106 :デフォルトの名無しさん:2009/02/21(土) 18:24:46
//test.exe
import std.stdio , std.file , std.stream;

void main(string[] files){
foreach(path ; files){
writefln(path);
if(std.string.count(path,"test.exe") > 0) continue;
Stream fs = new std.stream.File(path);
writefln(fs);
fs.close();
}
}

これのexeに日本語パスのファイルをD&Dすると途中で終了してしまいます。
パスに日本語がなければ動くし、直接日本語を含むパスを入力しても動くのに、D&Dだけ動かないみたいです。

107 :デフォルトの名無しさん:2009/02/21(土) 20:06:22
当方XPのdmd2.025だけどテスト.txtやフォルダ\テスト.txtをD&Dしても途中で終了せず…
txtの中身も「あいう!」にしてSJISとUTF-8形式で保存してD&D試してみたがforeach抜けた後のコードに到達する

108 :107:2009/02/21(土) 20:10:59
フォルダをD&Dしたら落ちたけどそれは別に日本語フォルダじゃなくてもそうなる

109 :106:2009/02/21(土) 20:53:51
レスありがとうございます
一瞬だけど、 ERROR invalid UTF8 sequence とかなんとか表示されて落ちるから文字がらみだとおもうけど・・・
一度通ったファイルを "コピー〜test.d" にしてD&Dしても落ちるから中身は関係なさそう。

>Stream fs = new std.stream.File(path);
の部分で止まってしまうようです。

XPでdmdは最近落としたものです。

110 :デフォルトの名無しさん:2009/02/21(土) 21:35:27
 -g -debug -profile -unittestでコンパイルしても
 -release -O -inlineでコンパイルしても
中身は問題なさそうと言われつつも「このスレを全て選択→コピペ→SJISで保存」したものに中身を変えても
>>109で出てきた"コピー〜test.d"というファイル名に変えてD&Dしても
2バイト目が0x5cな文字と半角カナと半角スペースが混在した二重拡張子の悪質なファイル名
(コピー 〜 ニーモニック 一覧表.d.txt)にしてD&Dしても…ダメだ、落ちない

111 :デフォルトの名無しさん:2009/02/21(土) 21:37:00
パス名はUTF-8で記述されていますか?

112 :106:2009/02/21(土) 21:53:59
WinはANSI?だったから違うと思う。

コンパイルは
>C:\Dev\DSciTE\bud.exe -DCPATHC:\Dev\DSciTE\dmd\bin -IC:\Dev\DSciTE\lib -I.. -I..\.. -full -release -unittest -w test.d

>Exit code: 0


こんな感じです

113 :107:2009/02/21(土) 22:21:15
ちょっと待て、いつの間にか
writeln(x"82A0 82A2 82A4 82A6 82A8");
がERROR invalid UTF8 sequenceで落ちなくなってるぞ
こんなの俺の知ってるwritelnじゃない、おかしい、おかしい

もし>>106のwritelnが俺の知ってる以前のwritelnだとしたら…そういうことだ
writeln(x"82A0 82A2 82A4 82A6 82A8");
の挙動を試してみるべし

114 :106:2009/02/21(土) 22:40:22
「あいうえお」でした

115 :106:2009/02/21(土) 23:03:13
> Stream fs2 = new std.stream.File("D:\\Programing\\D\\あ.txt");

直打ちで通るから、D&Dで受けた文字コードを変換できれば通りそうだけど。

116 :デフォルトの名無しさん:2009/02/22(日) 00:11:19
>>109
一瞬メッセージが出てくるということは、例外拾って例外をどこかに吐かせればいいのではないか。

117 :デフォルトの名無しさん:2009/02/22(日) 02:44:51
>>106
druntime導入以降のphobosなら通る。

118 :デフォルトの名無しさん:2009/02/22(日) 03:18:47
とりあえずwindowsでクリップボードに吐かせるSnippet
っても検索して引っ掛かったやつをそのまま移植しただけだが。
最新版ではuser32.libとか付属するからヘッダだけ落としてくれば動くはず


import std.string, std.utf;
import win32.winuser, win32.winbase, win32.windef; //http://www.dsource.org/projects/bindings

void setClipBoard(string str) {
        if(OpenClipboard(NULL)==0) throw new Exception("failed to open clipboard.");

        HGLOBAL        wintext = cast(HGLOBAL)GlobalAlloc( GMEM_MOVEABLE, str.length+1 );
        const char* strz = std.string.toStringz(str);
        char* wintext_ptr = cast(char*)GlobalLock( wintext );
        lstrcpyA(wintext_ptr, strz);
        GlobalUnlock(wintext);

        EmptyClipboard();
        SetClipboardData(CF_TEXT, wintext);
        CloseClipboard();
}

119 :デフォルトの名無しさん:2009/02/22(日) 08:06:29
>>118
ANSI文字列をchar*で扱うべきじゃないと思うのと、各種APIが失敗したときにハンドルリークする可能性がある。

俺の書いたのでよければ参考にして欲しい。
http://ja.doukaku.org/188/lang/d/

120 :デフォルトの名無しさん:2009/02/22(日) 09:23:59
>>119
素晴らしい。
scope, enforceの使い方のお手本みたいな感じですな。

しかしこういった小物コードのいい集積所はないものか

121 :デフォルトの名無しさん:2009/02/22(日) 10:57:46
>>119
これは・・・本物のD言語か
C++と変わらないパチモンコードを書いてた俺に衝撃が走った

122 :デフォルトの名無しさん:2009/02/22(日) 16:48:42
C++もどきくらいの方がいいと思うよ
Dの機能フルで使っちゃうとバージョン変更に極めて弱いコードができてしまう

123 :デフォルトの名無しさん:2009/02/22(日) 17:55:39
バージョン変更が怖くてフルに機能を使わない人がD言語を扱うのは難しい

124 :デフォルトの名無しさん:2009/02/22(日) 18:26:51
実用的にD1.Xで充分と思っているが。

125 :デフォルトの名無しさん:2009/02/22(日) 19:27:34
scope 演算子で質問。

scope(exit) {
// A
}

scope(exit) {
// B
}

と来たら A と B はどちらが先に処理されるの?
A と B の順番は言語的に保障されているの?

126 :デフォルトの名無しさん:2009/02/22(日) 19:31:46
http://www.kmonos.net/alang/d/2.0/statement.html#ScopeGuardStatement
>一つのスコープに複数の ScopeGuardStatement があった場合は、 ソースコード文字列上で現れた順番の逆順で実行さ
>れます。 そのスコープ終了時に破棄されるscopeインスタンスが存在する場合も、 それらのデストラクタも、ソースコード上
>の逆順で ScopeStatement  の間に挟まって実行されます。
つまり、B,Aの順番に処理されて、言語的に保障されている。

127 :デフォルトの名無しさん:2009/02/23(月) 02:29:37
ありがとー

128 :デフォルトの名無しさん:2009/02/23(月) 04:11:55
>>119 がみられない・・・

129 :デフォルトの名無しさん:2009/02/23(月) 04:12:57
あ,URLをコピペしたら見られた

130 :デフォルトの名無しさん:2009/02/23(月) 04:14:18
>>119
enforce か。初めて知った。
D2 って良さそうだなぁ・・・

131 :デフォルトの名無しさん:2009/02/23(月) 04:57:33
D言語にしちゃスレの伸びが速い

132 :デフォルトの名無しさん:2009/02/23(月) 07:24:06
>>130
真偽値として扱える任意の型の引数を取り、
真偽を判定して真ならそのまま返して偽なら例外を出すだけなので、
C++でも問題なく書ける。


T enforce(T)(T value, lazy Exception ex)
{
    if (!value) throw ex();
    return value;
}

T valueが真偽を判定されるべきものなのかどうかチェックする機構はない。
まあCとのバインディング用が主たる用途だろうからそんな機構を付けてもしょうがないのではあるが。

133 :デフォルトの名無しさん:2009/02/23(月) 08:45:57
GDCの引き継ぎはまだかー

134 :デフォルトの名無しさん:2009/02/23(月) 13:12:13
個人的にはDDLとかも開発を続けてほしいなぁ

135 :デフォルトの名無しさん:2009/02/23(月) 19:12:27
引数に配列演算突っ込むとaccess violationと言われた
不便だ。もっと変数みたいに扱わせてくれ

136 :デフォルトの名無しさん:2009/02/23(月) 20:00:01
ttp://www.digitalmars.com/pnews/read.php?server=news.digitalmars.com&group=digitalmars.D.learn&artnum=13788

D でもドライバーとかかけるんかな・・・。

137 : :2009/02/23(月) 20:08:33
Dって普通に使ってたらめったにコンパイラのバグなんかに遭遇しない?安定してる?
コンパイラはオープンソースなの?

138 :デフォルトの名無しさん:2009/02/23(月) 20:59:57
>>137
D1.0ならめったにコンパイラのバグには遭遇しない。あるにはあるけど十分回避可能。
何を指して安定と呼ぶかによると思うけど、なぜかたまにリンカが死ぬ。
よくタスクマネージャで殺したりしてる。あまり問題に思ったことはない。
コンパイラはオープンソース。コンパイラに同梱されてる。

139 :デフォルトの名無しさん:2009/02/23(月) 21:13:26
>>137
>>138ではないが補足
gdcはgccのフロントエンドでオープンソース
dmdはバックエンドがdmcと共通らしくて非公開
だからdmdを自分でビルドすることはできない

ちなみにdmdの主なバグ一覧(みんなが直して欲しい順)
http://d.puremagic.com/issues/buglist.cgi?query_format=advanced&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&votes=1&order=bugs.votes,bugs.bug_id

>>136 書けると思うけど

140 : :2009/02/23(月) 21:18:59
>>138 >>139
どうもありがとう。

141 :デフォルトの名無しさん:2009/02/23(月) 21:34:30
誰かdrutimeの導入方法をテンプレに書いてよー

142 :デフォルトの名無しさん:2009/02/23(月) 21:36:31
誰かdruntimeの導入方法をテンプレに書いてよー

143 :デフォルトの名無しさん:2009/02/23(月) 21:45:40
導入方法って何のこと?

144 :デフォルトの名無しさん:2009/02/23(月) 21:57:11
よく分からないけどぼくのdmdだとcore.とかうごかない

145 :141:2009/02/23(月) 22:10:48
http://www.dsource.org/projects/druntime
あと、ここに書いてある
http://svn.dsource.org/projects/druntime/trunk
から順集でcoreとかまるごと落としてbuild-dmd.bat起動してみたけどファイルが見つからないって言われました

146 :デフォルトの名無しさん:2009/02/23(月) 22:41:41
>>145
druntimeは既にdmd.zipに導入済みなんだけど?
build-dmd.batなんて実行しなくてもcore.*は使えてるよ
あとdmd2.025ではdmcはいらなくなったみたいだよ

147 :141:2009/02/23(月) 23:03:32
まじですか?ファイルが見つからないんでダウンロードからやりなおしてみます。

148 :デフォルトの名無しさん:2009/02/24(火) 00:09:59
XOmB Bare Bones
http://wiki.xomb.org/index.php?title=XOmB_Bare_Bones
D言語で書かれたOSとのこと

149 :デフォルトの名無しさん:2009/02/24(火) 00:27:00
なんという恐ろしいOS……

150 :デフォルトの名無しさん:2009/02/24(火) 00:58:32
D3.0はまだか…

151 :デフォルトの名無しさん:2009/02/24(火) 02:38:09
D言語で 64bit OSって、素敵すぎる.
要gdcクロスコンパイラ(構築?)だったりで、
敷居高くて手がだせないけど.
※ソース、fxで落とせたけどieだとダメぽい?

152 :デフォルトの名無しさん:2009/02/24(火) 03:45:04
XMLリテラルよこせよ

153 :デフォルトの名無しさん:2009/02/24(火) 09:52:03
いらねえよw

154 :デフォルトの名無しさん:2009/02/24(火) 10:27:05
まあ複素数リテラルに比べたらw

155 :デフォルトの名無しさん:2009/02/24(火) 10:31:40
ボード線図とか描くときめちゃくちゃ使ったけどな。複素数リテラル。

156 :デフォルトの名無しさん:2009/02/24(火) 11:47:07
XMLリテラルあったらどう便利なん?

157 :デフォルトの名無しさん:2009/02/24(火) 14:43:01
>>139
配列を引数にとる関数meanofを作った時
double mean = meanof(arr[]);
は動くんだが
double sqrmean = meanof(arr[]*arr[]);
みたいな引数にすると動かない
arr[]+1 にしてもダメだった

環境はWinXPでD2.025

158 :デフォルトの名無しさん:2009/02/24(火) 18:49:17
http://www.kmonos.net/alang/d/2.0/arrays.html#array-operations
> ベクトル演算は、スライス演算子が =, +=, -=, *=, /=, %=, ^=, &=, |= 演算子の左辺に来たときに行われます。
これをみた感じ、arr[]*arr[]はベクトル演算に該当しないので計算不可能…普通にできないのではないかと。

159 :デフォルトの名無しさん:2009/02/24(火) 20:39:05
>>158 だよね

160 :デフォルトの名無しさん:2009/02/24(火) 20:45:38
>>158
なるほど
仕様がねえな

161 :デフォルトの名無しさん:2009/02/24(火) 21:39:10
wxD・gtkD・QtD(・etc)、使うならどれが良いと思う?

162 :デフォルトの名無しさん:2009/02/24(火) 23:16:59
>>161
wktkD に見えた。

163 :デフォルトの名無しさん:2009/02/24(火) 23:40:47
AkinatorがDのマスコット知らなかったから教えておいた

164 :デフォルトの名無しさん:2009/02/25(水) 01:07:12
>>161
俺はlinuxとwindowsで使うツールをgtkDで作ってる。
windowsだとちょっともっさりとしてるけど、一応使えてる。
マルチスレッドと相性が悪いらしくて、マルチスレッドと絡むとたまにウィジットが真っ白になったりするけど、気にしなければどうということはない。

165 :161:2009/02/25(水) 01:47:33
>>162
Dには常にwktkで溢れてて貰いたいですね

>>164
やはりマルチスレッド周りは不完全ですか・・・
しかし諦めも肝心ですよね、gtkD使いたいと思います
ありがとうございます

166 :デフォルトの名無しさん:2009/02/25(水) 01:51:44
DWTも選択肢に入れるとよろしいかと。
JavaのSWTにある程度サンプルが多いから、資料の点であんまり困らない。

167 :デフォルトの名無しさん:2009/02/25(水) 02:10:14
ttp://www.dsource.org/projects/bindings/browser/trunk/win32
>(checked in by SnakE, 1 day ago)
>Fix for 'forward reference to CPtr!' in winnt.d
>The forward reference was caused by mutual import of winnt.d and
>basetsd.d. basetsd was only needing HANDLE definition from winnt so I
>just moved its definition to basetsd instead of importing winnt. This
>should cause no problems since winnt publicly imports basetsd anyway. The
>HANDLE definition should stay visible everywhere it was visible before.
そういえば前スレあたりで誰か困ってたけど、とりあえず対処がなされた模様。

168 :デフォルトの名無しさん:2009/02/25(水) 08:37:49
http://d.puremagic.com/issues/show_bug.cgi?id=2658
> Comment #9 From Walter Bright 2009-02-20 21:17
> ... it's time to clean out some detritus.

粛正が始まるよー

169 :デフォルトの名無しさん:2009/02/25(水) 11:11:42
ttp://tinyurl.com/3da5oa (C/C++に疲れた人のD言語)

つながらない

170 :デフォルトの名無しさん:2009/02/25(水) 11:18:49
http://d.hatena.ne.jp/haru-s/20090221/1235243354

171 :デフォルトの名無しさん:2009/02/25(水) 12:09:45
>>169 ごめんなさい
今度からこれテンプレにしてください
tinyurlってアドレス選べるんですね
ttp://tinyurl.com/ccpp2d (C/C++に疲れた人のD言語)

172 :デフォルトの名無しさん:2009/02/25(水) 12:27:52
つながった、ありがとう

173 :デフォルトの名無しさん:2009/02/25(水) 16:15:39
>>168
非文字外のバックスラッシュ付き文字を文字列リテラルとする仕様を外し、
デリゲートのシンタックスシュガーに使うと。
こんな感じか?

array.map \(ref i) { i+=1; }
widget.onClick \{ doSomething; }

174 :デフォルトの名無しさん:2009/02/25(水) 17:58:08
widget.onClick = delegate void() { doSomething; }
widget.onClick = delegate () { doSomething; }
widget.onClick = () { doSomething; }
widget.onClick = { doSomething; }
これだけあるのに
widget.onClick = \{ doSomething; }
わざわざ文字数増やす意味がわからないんだけど

175 :デフォルトの名無しさん:2009/02/25(水) 18:11:19
ソースが増えてきたんだけど、
import folder/hello2;
とか無理なの?

176 :デフォルトの名無しさん:2009/02/25(水) 18:23:34
例がよく分からないけどJavaみたいに
import folder.*;
みたいなのがしたいってこと?

177 :デフォルトの名無しさん:2009/02/25(水) 18:24:08
>>175 よくわからないので詳しく

178 :デフォルトの名無しさん:2009/02/25(水) 19:35:49
ファイルがmain.d m1.d m2.d m3.d …って増えて20以上になりそうだから、
m1.d m2.d m3.d をフォルダmの中に入れて管理したくなった。
VC#はできたんだけどJavaは知らないです。

179 :デフォルトの名無しさん:2009/02/25(水) 19:45:46
base\main.d -> module main;
base\dir\d1.d -> module dir.d1;
base\dir\d2.d -> module dir.d2;
base\dir\d3.d -> module dir.d3;

--------------------

module main;

import dir.d1;
import dir.d2;
import dir.d3;

void main() {...}

--------------------

bud main.d -Ibase\

やっつけだけどこんな感じで階層化できた気がする。


180 :デフォルトの名無しさん:2009/02/25(水) 20:12:21
モジュールでこんな感じでできました、ありがとう

//hello.d
import std.stdio , mod.hello2;
void main(char[][] args){
  writef(hello2);
}

//mod\hello2.d
module mod.hello2;
string hello2(){
  return "hello";
}


でもhello2に()つけ忘れて実行したけどこれでも動くんですね。

181 :デフォルトの名無しさん:2009/02/25(水) 20:57:05
>>173-174
いや、そこに書いてあるのはラムダ式。

auto square = \x => x * x;

とかだろ。

182 :デフォルトの名無しさん:2009/02/25(水) 21:25:19
>>180
Dでは引数がない関数は括弧を省略することが出来る

183 :デフォルトの名無しさん:2009/02/25(水) 22:26:13
string hello2()  return "hello";

こうですか?

184 :デフォルトの名無しさん:2009/02/25(水) 22:39:38
あんまり面白くないな

185 :デフォルトの名無しさん:2009/02/25(水) 23:17:08
>>181
ラムダ式しか書けず、ラムダ計算できるが最終的にはデリゲートとして扱われるリテラル、という感じ?

186 :デフォルトの名無しさん:2009/02/26(木) 02:13:11
auto square = x => x * x;
ラムダ式はC#風にこれでよくね?
他のことに使うとしたら何があるだろう

187 :デフォルトの名無しさん:2009/02/26(木) 13:37:25
Dscite使ってるけど、もっといいエディタないかな・・・

188 :デフォルトの名無しさん:2009/02/26(木) 13:59:08
ぽせいどん

189 :デフォルトの名無しさん:2009/02/26(木) 18:50:29
\がバックスラッシュの形に見えないせいでまた日本人は苦しむのですね!

190 :デフォルトの名無しさん:2009/02/26(木) 19:55:16
うぉるたん鬼畜!

191 :デフォルトの名無しさん:2009/02/27(金) 02:19:02
Dに複素数演算があってよかった
工学系で複素数演算を使う人は多いと思うんだが、どうだろう。

192 :デフォルトの名無しさん:2009/02/27(金) 03:11:15
いや別に構造体と演算子オーバーロードでいいし・・・

193 :デフォルトの名無しさん:2009/02/27(金) 03:16:23
確かにユーザー定義リテラルがあればね。

194 :デフォルトの名無しさん:2009/02/27(金) 08:40:05
浮動小数点が単にNaNのときってどの演算子を使えばいいんだろう?
n !<>= 0.0
とやっているが、正しいんだかどうだか

195 :デフォルトの名無しさん:2009/02/27(金) 09:13:27
is式とnanプロパティ使って
 n is n.nan
でよくね?

196 :デフォルトの名無しさん:2009/02/27(金) 09:21:50
n == n

197 :デフォルトの名無しさん:2009/02/27(金) 14:21:40
std.mathのisnan?

198 :デフォルトの名無しさん:2009/02/28(土) 01:25:28
>>167
>そういえば前スレあたりで誰か困ってたけど、

それは俺。
とりあえず2.025でコンパイル通りました。
directxフォルダはまだ無理っぽいけど。

いい情報をありがとう。>167

199 :デフォルトの名無しさん:2009/02/28(土) 02:21:28
あの14種類の比較演算子ってギャグだよな?

200 :デフォルトの名無しさん:2009/02/28(土) 08:08:02
200

201 :デフォルトの名無しさん:2009/02/28(土) 13:37:33
>>199
ギャグではないとおもうよ。必要な物だし。
あれが最善の表現方法かどうかはわからないけど、
少なくとも関数スタイルにするよりはなんぼかましだとおもう。

x.isLessThanEqualToOrGreaterThan(y) とか、
fpcmp(x, y, FpCmp.LESS | FpCmp.EQUAL | FpCmp.GREATER) とか、どうよ。

202 :デフォルトの名無しさん:2009/02/28(土) 14:55:32
すごく
きもいです

203 :デフォルトの名無しさん:2009/02/28(土) 19:54:50
あるいは名前をつけて、fpcmp(x, y, FpCmp.ORDERED) とかか。
演算子よりぱっと見で意味はわかりやすいが、いずれにせよ煩雑だな。

204 :デフォルトの名無しさん:2009/02/28(土) 20:55:44
<(より小さい) >(より大きい) =(等しい)の組み合わせて出来てるんだから
比較不能を表す何かがあればいいんだよ

今は!の否定で無理矢理表してるからわかりにくい

205 :デフォルトの名無しさん:2009/02/28(土) 21:02:40
Less, Equal, Greater, Unorderedの和集合は浮動小数点数全体に一致するの?

206 :デフォルトの名無しさん:2009/02/28(土) 21:11:21
×浮動小数点数全体
○二つの浮動小数点数の関係の全体

でした。

207 :デフォルトの名無しさん:2009/02/28(土) 22:21:02
それ以外にどんな二項関係があると思うの?

208 :デフォルトの名無しさん:2009/02/28(土) 22:29:53
それがわからないから聞いているんです。

209 :デフォルトの名無しさん:2009/02/28(土) 23:41:31
考えてみれば実数どうしで比較して、比較不可能ってのなんかおかしくね?数学的に。

210 :デフォルトの名無しさん:2009/02/28(土) 23:44:54
>>209
Dの浮動小数点数 = 実数 ∪ {非数}

だから、なにもおかしくない。

211 :デフォルトの名無しさん:2009/03/01(日) 18:15:07
ddbgを単独でGUI表示できるプログラムってある?


212 :デフォルトの名無しさん:2009/03/01(日) 19:10:32
http://www.astoriaseminar.com/compiler-construction.html

うぉるたんの授業うけたいなあ

213 :デフォルトの名無しさん:2009/03/01(日) 20:09:34
BOFに1000人くらい集まるようになれば来るかもね

214 :デフォルトの名無しさん:2009/03/04(水) 23:51:00
しかしリンカが良く死ぬ。
回避方法とかあったりします?

215 :デフォルトの名無しさん:2009/03/05(木) 00:19:55
ささやき えいしょう いのり ねんじろ

216 :デフォルトの名無しさん:2009/03/05(木) 09:29:29
初歩的なことで恐縮なのですが…
dmdでコンパイルしたら.exeではなく.objが生成されました。
で、それを実行出来ないのですがどうすればいいでしょうか?

217 :デフォルトの名無しさん:2009/03/05(木) 09:31:58
-c付けずに実行すれば実行ファイルができると思うが。
あるいは後に何も残らないが-runつけるとか

218 :デフォルトの名無しさん:2009/03/05(木) 09:33:20
>>216
objは中間ファイルなので実行できません。
コンパイルした段階でなんかエラーメッセージ出てませんか?
何もエラー出てない限り実行ファイルは生成されないと思います。

219 :デフォルトの名無しさん:2009/03/05(木) 15:03:55
>>216です。自己解決しました。
dmd.zipの他にdmc.zipも必要だったのでした。
そしてdmd.zipを解凍して出来た\dmdと\dmの\dmを
dmc.zipを解凍して出来る\dmに置き換えてやればいいとのこと。
その中のlink.exeが必要だったみたいなのです。
そして無事コンパイル出来ました。
皆さん有難うございました。
ついでに言っておくと、.exeのほかに.mapと.objも生成されました。

220 :デフォルトの名無しさん:2009/03/05(木) 15:13:04
dmc.exeってC言語のコンパイラーなんですね。
ちゃんとコンパイル出来ました。
D言語と違ってそのままでも日本語を表示出来ました。
またD言語と同様に.exeのほかに.objと.mapが生成されました。
私は普段C言語はGCC&Cygwinを使っていますがそれでは.exeだけです。
だからびっくりしました。

221 :デフォルトの名無しさん:2009/03/05(木) 15:26:50
DMD1系?
DMD2.025からdmc不要になったはず。
っつかCでも.objはできるような気が。
そうでないと分割コンパイルする意味がない。

222 :デフォルトの名無しさん:2009/03/05(木) 15:37:36
ビルダがリンク後に自動で消してるだけだろ。

223 :デフォルトの名無しさん:2009/03/05(木) 15:59:56
>>219 dmは置き換えるんじゃなくて一緒にしてしまえばいい

224 :デフォルトの名無しさん:2009/03/05(木) 17:46:02
>>220です。
調べたらヴァージョンは2.011でした。

225 :デフォルトの名無しさん:2009/03/05(木) 17:47:22
もっと新しいの使えよw

226 :デフォルトの名無しさん:2009/03/05(木) 19:52:03
http://www.digitalmars.com/d/2.0/changelog.html#new2_026
最新バージョン来たよ!

227 :デフォルトの名無しさん:2009/03/05(木) 20:04:21
ちょ、さっき2.025ダウンロードして Hello,world コンパイルして確認したところだったのに。

228 :デフォルトの名無しさん:2009/03/05(木) 20:06:25
Added buildable dmd source.

これ、ついに dmd のソース公開ってことですか?

229 :デフォルトの名無しさん:2009/03/05(木) 20:12:09
Version D 2.026   Mar 3, 2009
New/Changed Features

    * Escape string literals deprecated, see Bugzilla 2658
    * Tripled speed of exp, expm1, and exp2. std.math is now less dependent on the C standard library.
    * Added nested structs.
    * Added buildable dmd source.
    * Many changes to std.math for speed, accuracy, and Tango compatibility:
          o Improved accuracy of exp, expm1, exp2, sinh, cosh, tanh on Mac OSX, and tripled speed on all platforms.
          o Now using IEEE754-2008 camelCase names for isNaN, isFinite, isNormal, isSubnormal, isInfinity. Aliases for the old names have been retained.
          o The non-functional nan(char[]) is replaced with NaN, getNaNpayload.


230 :デフォルトの名無しさん:2009/03/05(木) 20:21:23
Bugs Fixed

    * Bugzilla 1603: String literals bind to pointer types
    * Bugzilla 1629: Link error: Previous Definition Different: blablah__initZ
    * Bugzilla 1662: Falls back to libphobos if -debuglib isn't used when -g is
    * Bugzilla 1681: cast(real) ulong.max == 0
    * Bugzilla 2416: Slice of typedef'ed array should preserve the typedef'ed type
    * Bugzilla 2597: auto return doesn't work for a variety of cases
    * Bugzilla 2612: immutable not accepted wherever invariant is
    * Bugzilla 2619: Locally-instantiated structs are not instantiated locally
    * Bugzilla 2621: ref binds to rvalues of user-defined types
    * Bugzilla 2622: ref returns not allowed in complex template
    * Bugzilla 2623: Function type drops ref spec
    * Bugzilla 2670: std.file.read() should read files of 0 length
    * Bugzilla 2673: Static constructors sometimes do not run when compiling with -lib
    * Bugzilla 2675: cannot foreach structs with copy constructor
    * Bugzilla 2676: alias parameters not matched in concept if clause
    * Bugzilla 2677: Alias type parameters not visible in concept-if clauses
    * Bugzilla 2678: for loops are already assumed to terminate
    * Bugzilla 2679: Spurious "warning - " messages and erratic behaviour with is(typeof({void function}()))
    * Bugzilla 2684: Associative arrays have wrong opIndex signatures
    * Bugzilla 2690: DMD aborts with MALLOC_CHECK_ set


231 :デフォルトの名無しさん:2009/03/05(木) 22:36:16
>>228
そうらしい。コンパイルしてdmdができるのを確認した。
linuxで試したんだが、そのままだと通らなかったんでパッチ。
ttp://a-draw.com/uploader/src/up0516.lzh.html
1.0はdmdとphobosが通るように。2.0はdmdだけ。

232 :デフォルトの名無しさん:2009/03/06(金) 02:31:41
要するにこれSymantec C++の一部だよね?

こんなすばらしいコードが見られるなんて、ありがたいことだ。

233 :デフォルトの名無しさん:2009/03/06(金) 02:43:16
ありがたやありがたや

みんな気に入らないところ直してパッチ送ろうぜ

234 :デフォルトの名無しさん:2009/03/06(金) 08:20:59
dmdはdmcで出来ている?

235 :デフォルトの名無しさん:2009/03/06(金) 09:10:21
dmd本体はC++で作ってる。コンパイラがdmcかどうかは知らない。

236 :デフォルトの名無しさん:2009/03/06(金) 11:53:58
dmdの出力をCOFFになるように改造できないかねぇ

237 :デフォルトの名無しさん:2009/03/06(金) 16:10:26
需要があるかどうか全く分からないMac向け簡易エディタ拡張
ttp://crossacross.org/misc/

238 :デフォルトの名無しさん:2009/03/06(金) 22:33:33
>>236
この前から本家フォーラムで「optlinkは死ね」というタイトルで論争やってて、
いつまでOMF使ってんだとかそんな感じの話が展開してたから、
そのうちボランティア作業でなおる気がする

239 :デフォルトの名無しさん:2009/03/07(土) 11:14:08
さりげなくバックスラッシュ文字列リテラルを多用してたんで直すの苦労したわ

240 :デフォルトの名無しさん:2009/03/07(土) 16:29:34
今年はD3へ向けて色々変わりそうだ

241 :デフォルトの名無しさん:2009/03/07(土) 16:59:06
optlinkって悪いの?何のリンカならいいの?

242 :デフォルトの名無しさん:2009/03/07(土) 18:10:03
たまにドジしちゃうoptlinkちゃんかわいい!

243 :デフォルトの名無しさん:2009/03/08(日) 02:02:19
うひょーとうとうビルドできるほどソース公開されたかー
うちのARMなGlanTankでも通らないかなぁ。やってみようかなぁ。

244 :デフォルトの名無しさん:2009/03/08(日) 04:05:18
ARMでdmd使えたら面白いね
GUIとかどうやるのか知らないけど

245 :デフォルトの名無しさん:2009/03/08(日) 04:57:11
x86しか生成できないから無理だろう。
一から書き直す覚悟が要ると思う。

246 :デフォルトの名無しさん:2009/03/08(日) 05:16:50
これを期にGDCとLDCが活発化することに期待

247 :デフォルトの名無しさん:2009/03/08(日) 11:20:40
static opCallを使った構造体をref付き引数を持つ関数に指定できなくなった
これってバグ?それとも仕様変更?

struct A {
int x;
static A opCall(int _x){x = _x;}
}
void func(ref A a)
{
}
int main()
{
func(A(3));
}

function main.Game.func (ref A a) does not match parameter types (A)
Error: opCall(3) is not an lvalue

248 :247:2009/03/08(日) 11:28:13
いろいろと間違えてた失礼。正しいコードはこっち↓

struct A {
int x;
static A opCall(int _x){A a = {_x}; return a;}
}
void func(ref A a)
{
}
int main()
{
func(A(3));
return 0;
}

エラー内容(dmd v2.026):
function a.func (ref A a) does not match parameter types (A)
Error: opCall(3) is not an lvalue

249 :デフォルトの名無しさん:2009/03/08(日) 11:30:47
>>247-248
struct A{
  int x;
  static A opCall(int _x){
    A a={_x};
    return a;
  }
}
void func(ref A a){}
void main(){
  auto a = A(3); //
  func(a);
}

250 :デフォルトの名無しさん:2009/03/08(日) 12:26:21
ref ってことは、昔の inout で、出力先がないとあかんってことだよね。
lvalue ではないってのは代入不可能ってこと。
逆に今までそんなコード書いていて大丈夫だったのかが気になるな。

251 :247:2009/03/08(日) 12:56:01
opCallの戻り値を値型にしとけばスタックに確保されるんじゃ?
関数のほうは実はopAssign(ref)とかだから問題ないと思うんだ

C++だと構造体のコンストラクタとこういうことができたんですよ
Dはなぜかコンストラクタを持たせると怒られる

252 :247:2009/03/08(日) 13:06:28
Dの構造体にはコンストラクタを持たせられない
そう考えてた時期が俺にもありました・・・・・

ちくしょー! うぉるたんまたやってくれたな!
ちょっと前のは怒られたのに、今のはこれで通った
struct A {
int x;
this(int x_){x = x_;}
}
void func(ref A a){}
int main()
{
func(A(3));
return 0;
}

なんか解決してしまいました。スレ汚しスマソ

253 :デフォルトの名無しさん:2009/03/08(日) 14:09:26
DMCのBasic Utilitiesに含まれるcl.exeがAVG先生にワームだって言われた(´・ω・`)

254 :デフォルトの名無しさん:2009/03/08(日) 14:59:37
>>253
avast先生も怒ってたなぁ
何でだろね

255 :デフォルトの名無しさん:2009/03/08(日) 16:40:32
十分に進化した構造体はクラスと区別がつかない

256 :デフォルトの名無しさん:2009/03/08(日) 16:45:39
Dでは最初から構造体は一応PODのつもりで設計されていて
今でもそれは変わらないと思う
構造体を操作するときに若干便利な機能が付加されただけだよね

257 :デフォルトの名無しさん:2009/03/08(日) 17:45:31
#define class struct
初期のC++だとこんな実装があったとかなかったとか

258 :デフォルトの名無しさん:2009/03/08(日) 19:11:24
>>247 構造体リテラルがあるよ
struct A {
 int x;
}
void f(ref A){}
void main() {
 f(A(3));
}

259 :デフォルトの名無しさん:2009/03/08(日) 19:57:06
>>252
ChageLog見れば分かるけど2.019から構造体コンストラクタ使えるよ

260 :デフォルトの名無しさん:2009/03/10(火) 15:43:29
http://www.infoq.com/news/2009/03/D-NET
これは

261 :デフォルトの名無しさん:2009/03/10(火) 16:37:35
Dで書いたものをC++に移植しようとしているのだが……
テンプレートミックスインでどうしても引っかかる。
マクロ使うしかないのか?

262 :デフォルトの名無しさん:2009/03/10(火) 16:51:40
>>261
多重継承か委譲かなあ

263 :デフォルトの名無しさん:2009/03/10(火) 17:14:25
仮想関数の継承をミックスインでやってたので、
設計をいじるかマクロ使うかの二択なもんで。
安全テンプレート付きマクロって何気に使いやすいなあ

264 :デフォルトの名無しさん:2009/03/10(火) 17:15:23
継承じゃない、オーバーライドだった

265 :デフォルトの名無しさん:2009/03/10(火) 19:21:25
>>264 どんな風になるの

266 :デフォルトの名無しさん:2009/03/12(木) 19:26:46
>>265
interface I {
        void f();
}
class D : I {
        mixin T;
}

template T() {
        void f() { }
}

auto d = new D; //OK
d.f; //OK

C++でtemplate Tをただstruct Tとして継承してusingしても無理で、
struct TがIを継承していないとならない。
thisを返すCRTPで、かつ何かのインターフェースを継承するときにはこっちの方がはるかにやりやすい。

267 :デフォルトの名無しさん:2009/03/13(金) 18:40:58
この連想配列にどうやって明示的にキーを足すんだろう
string[2][string] hash;

// 以下全部コンパイル可 RangeError
hash[begin] = new string[2];
hash[begin] = null;
hash[begin][0] = "";

268 :デフォルトの名無しさん:2009/03/13(金) 18:42:19
ついでながらこれらもコンパイルエラーにならない
特に後者は言語仕様上のバグである気がする

hash[begin] = "";
hash[begin] = [0,0];

269 :デフォルトの名無しさん:2009/03/13(金) 18:56:19
>>267-268
何かおかしくね?それだと、2つの連想配列でしょ?
3つ目にしたかったら、連想配列追加しないとだめじゃないかい?
もしくは、連想配列に2要素の何かってことなら、添え字が逆。

270 :デフォルトの名無しさん:2009/03/13(金) 19:03:35
>>269
いや、そこはあってるんじゃないの。
C風の書き方すれば
string hash[string][2];
でしょ。

271 :デフォルトの名無しさん:2009/03/13(金) 19:10:01
>>270
え!そうなのか??
ROMってるだけじゃおいてかれるな。すまない。

272 :デフォルトの名無しさん:2009/03/13(金) 20:00:37
string[string] hash[2]; で
hash[0]["x1"]="";で
hash["x2"] = cast(string[2][string])hash["x1"]; が増長キャストかな??


273 :デフォルトの名無しさん:2009/03/13(金) 20:09:31
Dまたは日本語でおk

274 :デフォルトの名無しさん:2009/03/13(金) 22:34:13
うーん???
import std.stdio;
void main() {
string[2][string] hash;
writefln(typeid(typeof(hash["key"])));
writefln(typeid(typeof(["a","b"])));

hash["key"] = ["a","b"];
}

immutable(char)[][2]
immutable(char)[][2]
core.exception.RangeError@a(7): Range violation

275 :デフォルトの名無しさん:2009/03/13(金) 22:42:26
バグレポートあげといてよ

276 :デフォルトの名無しさん:2009/03/13(金) 23:05:50
どうなるべきなのかがよくわからんのですが・・・

277 :デフォルトの名無しさん:2009/03/14(土) 00:22:02
string[][string] hash;
hash[ "key" ] = ["a", "b"];
writefln( hash["key"] );
=>[a,b]
これなら行くのね(D1

string[2][string] hash;
でやると、
main.d(7): Error: cannot assign to static array hash["test"]
というエラー。
静的配列が問題なのかな。

278 :デフォルトの名無しさん:2009/03/14(土) 01:58:20
おお
なるほど
D2でも[2]を[]にして動的配列にしたら動いた

279 :デフォルトの名無しさん:2009/03/14(土) 07:46:20
>>275
2732

280 :デフォルトの名無しさん:2009/03/14(土) 11:23:23
GJ

281 :デフォルトの名無しさん:2009/03/15(日) 03:45:12
with内で、現在withで参照中のthisにあたるデータにアクセスできたらいいのにと思う。
↓こんなときのために
with (new Control) {
    text = "mycontrol";
    dock = DockStyle.FILL;
    with (new Control) {
        text = "childcontrol";
        width = 200;
        dock = DockStyle.RIGHT;
        parent = with.outer;
    }
    with.outer.controls.add(with.inner);
}

282 :デフォルトの名無しさん:2009/03/15(日) 04:07:02
with.outer.controls.add(with.inner);
こうじゃなくて?
...
 parent = with.outer;
 with.outer.controls.add(with);
}
...

283 :デフォルトの名無しさん:2009/03/15(日) 04:09:27
公式で「MyDll D言語DLLの書き方デモ」として例示されてるコードを参考に
適宜修正しながらDLLの作成と静的リンクに挑戦してたんだけど、2.026だと、
リンク先のdllにstatic thisが含まれてると
Error 42: Symbol Undefined _D5mydll12__ModuleInfoZ
って感じのエラーが出る? 2.025にしたら大丈夫だった。

あと、gcstub.objをリンクしないと実行時に
object.Error: Access Violation
ってエラーが出るようになる? こっちは2.025,2.023でもダメだった。

>>281
もうちょっと妥協するとして、
with(auto o = new Object){ ... }
が通るようになれば楽だな。

284 :デフォルトの名無しさん:2009/03/15(日) 04:10:14
Control c;
with(c = new Control){}
これなら通るけど?

285 :デフォルトの名無しさん:2009/03/15(日) 04:13:56
たしかに内部クラスとおなじにするならそうなるかも
なんか意味的にキモく感じたからinnerとか付けたけど

皆さんはこういう場合にはどんな感じに書いてますか?

286 :デフォルトの名無しさん:2009/03/15(日) 10:06:55
そもそも、with はキモイから使わない。
超短期スコープ以外で使うのはダメだろう。

287 :デフォルトの名無しさん:2009/03/15(日) 16:33:32
withなんて有ったのか
VBにもあったよな懐かしい

288 :デフォルトの名無しさん:2009/03/15(日) 18:14:49
流れるようなインターフェース(fluent interface)
(new Control)
.text("childcontrol")
.width(200)
.dock(DockStyle.RIGHT)
.parent(with.outer);

setterは値返さないからthis返すように設計しとけば使えるけど
そういうやり方もあるという

289 :デフォルトの名無しさん:2009/03/15(日) 18:17:57
setterは値返してくれないと困るだろ…

290 :デフォルトの名無しさん:2009/03/15(日) 18:20:16
setterの仕事はsetしたら終了じゃないの?

291 :デフォルトの名無しさん:2009/03/15(日) 18:24:01
ゲッターロボ

292 :デフォルトの名無しさん:2009/03/15(日) 18:25:35
>>290 に同意

293 :デフォルトの名無しさん:2009/03/15(日) 18:32:30
textbox1.Text = textbox2.Text = s;

とか書けないじゃん。

294 :デフォルトの名無しさん:2009/03/15(日) 19:09:58
他人の言葉で悪いけど
コマンド・問い合わせの分離
ttp://capsctrl.que.jp/kdmsnr/wiki/bliki/?CommandQuerySeparation

295 :デフォルトの名無しさん:2009/03/15(日) 19:17:20
>コマンド・問い合わせの分離
でも皆
if ((fp = fopen("smpl.txt", "r")) == NULL)
みたいなコード書くんだよね

296 :デフォルトの名無しさん:2009/03/15(日) 19:19:27
constで思い出したんだけど、constメンバ関数の場合でMutexオブジェクトのロックとかしたいときってどうすればいいの?
C++ならmutable修飾子つければ行けたけど…Dではそういうのはなかったよね?

297 :デフォルトの名無しさん:2009/03/15(日) 19:20:24
それはイディオムだからなぁ
こんな風に書いたらかえってわかりにくいだろ

fp = fopen("smpl.txt", "r");
if (fp == NULL)

298 :デフォルトの名無しさん:2009/03/15(日) 19:22:58
ifの中にいっぱい文字があるのがやだから
fp = fopen("smpl.txt", "r");
if(fp)
みたいに書くわ

299 :デフォルトの名無しさん:2009/03/15(日) 19:26:26
D言語的には、ifによるnullチェックをやめてtryと例外使えってこったな。
ライブラリ側が対応してない場合にはstd.contractsのenforceとか?

300 :デフォルトの名無しさん:2009/03/15(日) 19:47:48
>>294
それは状態を変更しない問い合わせメソッドを用意しろと言う話であって、
状態を変更するメソッドが値を返さないことはさほど重要ではないと思うのだけど。

301 :294:2009/03/15(日) 20:55:13
>>300
よくわからない、そうなのかも

302 :デフォルトの名無しさん:2009/03/15(日) 22:37:33
setterの実装に値をセットする以外のコードを書かされるのは嫌だなぁ……
かと言って>>293が通らないってのも、変数代入との一貫性が失われちゃうのか。
プロパティのgetter/setterって概念をきちんと言語に盛り込んで、
textbox.text = sはsを返すって仕様にすれば両立できるのかな。
C#とかは>>293みたいなコード通ったっけ?

303 :デフォルトの名無しさん:2009/03/15(日) 22:38:51
>>297
俺はまとめる方が分かりにくいよ
代入文と条件式を一まとめにできる事自体どうかと思う

304 :デフォルトの名無しさん:2009/03/15(日) 23:11:29
>>302
C#は>>293の書き方ができる。
setterが値を返すことはできず>>293の場合はsetter, getterの順番に実行される

305 :デフォルトの名無しさん:2009/03/15(日) 23:56:17
>>304
そうだったのか
それいいな

306 :デフォルトの名無しさん:2009/03/16(月) 00:00:32
イディオムの読みやすさはそれがイディオムだから読みやすいだけで
イディオムだと知らなかったら読みにくいでしょ

307 :デフォルトの名無しさん:2009/03/16(月) 00:20:03
RPCとかまで考えると、setter が無闇に値を返すのはまずい。

308 :デフォルトの名無しさん:2009/03/16(月) 11:45:15
setterは右辺値そのまま返せで良くね?

309 :デフォルトの名無しさん:2009/03/16(月) 12:53:43
DにはDのsetter/getterの作法があるんだしC#と同じでいいやん
textbox1.Text = textbox2.Text = s;

textbox2.Text = s;
textbox1.Text = textbox2.Text;
と等価ってことで

310 :デフォルトの名無しさん:2009/03/16(月) 12:57:40
textbox2.Text = s;
textbox1.Text = textbox2.Text;

textbox2.Text(s);
textbox1.Text(textbox2.Text());
と等価ね

311 :デフォルトの名無しさん:2009/03/16(月) 17:38:12
>>304
mono入れて実験してみたけど、getterは呼ばれなくない?
obj.prop = exprがexprとして評価されるだけだと思う。

312 :デフォルトの名無しさん:2009/03/16(月) 20:20:26
dmd2.0.25でstd.process.spawnvpにオプション引数を設定しても、オプション引数が渡されないんだけど、バグかな?

313 :デフォルトの名無しさん:2009/03/17(火) 19:00:26
>>312 std.process.spawnvp って何?

314 :デフォルトの名無しさん:2009/03/17(火) 23:13:27
だめだ、エスパーできんw

315 :デフォルトの名無しさん:2009/03/18(水) 15:09:52
関数呼び出しのスタックから大域脱出するのに例外を使うのはやはりお行儀の悪さを感じてしまう……

316 :デフォルトの名無しさん:2009/03/18(水) 21:17:48
つtypedef Exception GlobalExit;

317 :デフォルトの名無しさん:2009/03/19(木) 11:41:34
馬子にも衣装ですね、わかります。

318 :デフォルトの名無しさん:2009/03/19(木) 17:32:56
C++0xってIEEE 754は対応しないんだよな?

319 :デフォルトの名無しさん:2009/03/19(木) 22:09:35
何故?
今そんな話を?

320 :デフォルトの名無しさん:2009/03/19(木) 23:40:46
.NaNと.infinityをモリモリ使いたいんで、
C++で全部再現するのが面倒だったなあと。

321 :デフォルトの名無しさん:2009/03/21(土) 02:22:11
interface IA{void a();}
interface IB:IA{void b();}
interface IC:IA{void c();}
class CB:IB{void a(){} void b(){}}
class CC:CB,IC{void c(){};}
これでコンパイルエラーでないのおかしくね?@dmd 2.026 & 1.041
これのせいで2日くらいハマった…バグが出る時とでないときがあるらしい…

322 :デフォルトの名無しさん:2009/03/21(土) 02:38:31
どこがおかしいのかわからねえ

323 :321:2009/03/21(土) 02:57:05
>>322 説明不足スマン…
仕様だと継承するinterfaceをスーパークラスとは別に指定した場合、interfaceの関数は継承しないことになってる。
> インターフェイスを再実装するには、その全ての関数を実装しなければなりません。 基底クラスからの継承はされません
つまり、>>321のコードはCCにおいて、ICを指定したためにIAのa()関数が継承されないことになる。
本来なら
class xxx.CC interface function IA.a isn't implemented
とか出るべきでは?ということ。

324 :デフォルトの名無しさん:2009/03/21(土) 20:02:03
D言語研究の既存のページが編集できないのはなんとかならないんでしょうか
たまにスパムを見つけては消してるんで、新しいページ作成削除は誰でもできるみたいですが

325 :デフォルトの名無しさん:2009/03/22(日) 00:19:11
>>320
YouC#使っちゃいなYo

326 :デフォルトの名無しさん:2009/03/22(日) 03:01:48
バージョンアップまだ?

327 :デフォルトの名無しさん:2009/03/22(日) 04:02:03
>>322
なんかおかしいね

328 :デフォルトの名無しさん:2009/03/22(日) 04:05:30
間違えた
>>327>>323

329 :デフォルトの名無しさん:2009/03/22(日) 04:31:11
>>323
削ってみたけどこれでいいかな?
interface I1
{
void a();
}
interface I2 : I1
{
}
class C1 : I2
{
void a(){}
}
class C2 : C1, I2 // invalid-accept
{
}

330 :デフォルトの名無しさん:2009/03/22(日) 04:40:16
>>329
それはアクセプトされるべきだと思うけどなあ

331 :デフォルトの名無しさん:2009/03/22(日) 05:02:39
>>330
そう? interfaceの継承とは何かもっと詳しく定義しないといけないのかな

332 :331:2009/03/22(日) 05:20:31
interface A{void a();} interface B : A {}

interface B {void a();}
のときBだけ見たら両方同じなのかなと思ったんだけど

333 :デフォルトの名無しさん:2009/03/22(日) 09:41:57
IA 自体が基底インターフェースになってるから問題ないんじゃないの?
インターフェース単位で vtbl 作られるという形なので、
IC は IA に対する void a() が存在していればそれで問題ないと思う。

無関係のインターフェース間で同名の関数がある場合、
それは区別しないといけない。

334 :デフォルトの名無しさん:2009/03/22(日) 09:53:53
意味論的にコンフリクトするケースか。
interface IB : IA
interface IC : IA
の IA は、同じものを指しているのか、違うものを指しているのか
ってことになるか。
同じものだ(ICはIAの拡張部分のみだ)とみなしているなら、
再実装を要求しないのはおかしくないし
(「IA自体」の再実装は class CC:CB,IA,IC と 書いていないので要求していない)、
違うものだ(ICの一部だ)とみなすなら、再実装を要求しないといけないと。
仕様には書かれてないよね?

335 :デフォルトの名無しさん:2009/03/22(日) 09:59:57
>>333
それじゃ多重継承と同じ問題があるような…

インターフェースは「こういう関数を持って下さい」という事しか指定しないから
たとえ名前が被っても、その名前の関数を用意するだけなので問題は起こらないのだ!
多重継承なんかとは違うのだよwwwwwwww

ってのがインターフェースじゃん
名前が被ったら被ったインターフェースごとに同名の関数用意させられるんじゃ意味がない

336 :デフォルトの名無しさん:2009/03/22(日) 10:46:57
>>333,335
interface IA{ void a(); }
interface Ia{ void a(); }
interface IB:IA{}
class CA:Ia{ void a(){} }
class CB:CA,IB{ }

で、Ia.aを実装したCAの派生クラスCBではIA.aが実装されてないといけないけど、
これで通るから、仕様はともかく実装上は区別されないっぽいな。

337 :331:2009/03/22(日) 21:43:07
>>335
そうそう
interfaceはsignatureが同じなら同じメソッドと見なすもんだ

338 :デフォルトの名無しさん:2009/03/22(日) 22:06:50
>>332は正しいので>>329はコンパイルできるべきではなくて
>>312,323の言うように
class xxx.CC interface function IA.a isn't implemented
とでも表示してエラーになるべき
でOK?

339 :デフォルトの名無しさん:2009/03/22(日) 22:07:45
>>312.323じゃなくて>>321,323だったorz

340 :デフォルトの名無しさん:2009/03/22(日) 23:03:27
interface IA{ void a(); }
interface IB:IA{ }
class Ca { void a(){};}
class CC:Ca, IB{ }
これも通る。
祖先クラスは関数さえ実装していれば祖先インターフェイスを継承している必要すらないみたい。
 派生インターフェイス=祖先インターフェイスの関数が実装されていることを前提としたインターフェイス
って解釈すればこっちの実装もありかな。

341 :デフォルトの名無しさん:2009/03/22(日) 23:29:27
>>340
> 派生インターフェイス=祖先インターフェイスの関数が実装されていることを前提としたインターフェイス
ごめんよくわからん
「CCはCaからaを継承しているからaの実装を持っている」→
「CCはIBの制約を満たしている」→「CCはvalid」
と言う論理なら
> インターフェイスを再実装するには、その全ての関数を実装しなければなりません。 基底クラスからの継承はされません
この仕様に違反しないか?

342 :デフォルトの名無しさん:2009/03/22(日) 23:36:23
>>340-341
つまりIBのCCに対する制約には2つの考え方があって;
(a)「CCがvoid a()を持っていること」
(b)「CCで新しいvoid a()を定義すること」
今の仕様は(b)なのに実装は(a)になっているという問題か

343 :デフォルトの名無しさん:2009/03/23(月) 01:20:29
>>341
「IBを実装すると言ったが、IAを実装するとは言ってない。だから、
 IBの関数なら再実装するが、IAについてはキャストできれば十分なのだ!」
って理屈。

IAにキャストできるってことは、IAかその派生クラスを継承してる必要があって、
そして当然IAの要求する関数を実装してる必要もある。
だから結局IAの関数は実装されてる必要があるけど、キャストに必要なそれに
ついては(再実装の話じゃないから)基底クラスから継承してもおk、って感じ。

344 :デフォルトの名無しさん:2009/03/23(月) 02:02:23
>>343
interface IA{ void a(); }
interface IB:IA{ }
class Ca { void a(){} }
class CC:Ca, IB{ }
IBの定義が空っぽなので任意の子クラスで実装しなければならない関数はない.
だからIBを継承したCCでは何も実装する必要はない.
ただしCCをインスタンス化するためには祖先のどこかでvoid a()を実装していなければならない」

ということかね.それなら

「a()をXで実装しなければならない」
interface IB {void a();}
class X : IB { ... }

「a()をXで実装するか,あるいは,a()がXの祖先クラスで実装されていなければならない」
interface IA {void a();}
interface IB : IA {}
class X : IB { ... }

を区別することができるが・・・デメリットや不整合になる点はないのかな

345 :デフォルトの名無しさん:2009/03/23(月) 08:49:19
しかしacceptされるものだとしてもだ
何らかの条件でバグが発現するというのだからやっかいな問題だね
具体的に最初に言われたバグが起こるコードを示してもらえたらいいのだけど

346 :321:2009/03/23(月) 17:50:26
>>345 頑張って再現してみた。
interface IA{void func();}
interface IB{}
interface IC: IB, IA{}
interface ID: IC{}
class CA: IC{void func(){}}
class CB: CA, ID{void func(){}}
void main()
{
ID c = new CB;
c.func();
}
これでバグ(Access Violation)が発生する@dmd2.026…バグを回避するにはIDを
interface ID: IC{void func();}
ってして改めて実装しなければならない関数を指定する。
……ここまで簡略化する際に気付いたけど、>>321のとこのバグは関係ないね。
>>321に関連する議論に意味がないわけじゃないけど。

347 :デフォルトの名無しさん:2009/03/23(月) 19:14:31
>>346
よく再現できたね
何がどういうバグなのかわからんのだがw

348 :デフォルトの名無しさん:2009/03/23(月) 21:31:16
.NETプラットフォーム版D言語 ?Cristian Vlasceanu氏へのインタビュー - InfoQ
http://www.infoq.com/jp/news/2009/03/D-NET

Programming and Debugging (in my Underhoosen)
http://the-free-meme.blogspot.com/

D.NET・・何という・・・。

349 :デフォルトの名無しさん:2009/03/24(火) 12:22:29
>>348
懐かしい

350 :デフォルトの名無しさん:2009/03/24(火) 21:54:52
Visual Dがついに・・・
いや、やつならD#とかやりかねないな

351 :デフォルトの名無しさん:2009/03/24(火) 22:59:53
D#よりD/CLIのほうがほしい

352 :デフォルトの名無しさん:2009/03/25(水) 01:58:29
>>346
ttp://d.puremagic.com/issues/show_bug.cgi?id=2758

353 :321:2009/03/25(水) 10:48:03
>>352
おぉ、ありがとうございます。バグ報告お疲れ様です。

354 :デフォルトの名無しさん:2009/03/25(水) 18:16:00
CLR上で動かしたらオリジナルより速い、なんてな。

355 :デフォルトの名無しさん:2009/03/25(水) 18:45:33
DとC#の速度を比べればそうはならんでしょ。

80 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)