D言語 Part21

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
プログラミング言語 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
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
??!
2421: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
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のパスがくっついた文字列が帰ってくるんだけど、なんで
4948: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 落ちないけど
5852: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%だからじゃないのか?
実行ファイルの場所 == カレントディレクトリ とは限らない
6152: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という名前で。
7769: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);
}
7975: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
心の中にあるよ
8369: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] みたいな書き方できなかったっけ
102101: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抜けた後のコードに到達する
108107:2009/02/21(土) 20:10:59
フォルダをD&Dしたら落ちたけどそれは別に日本語フォルダじゃなくてもそうなる
109106: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で記述されていますか?
112106: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


こんな感じです
113107: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");
の挙動を試してみるべし
114106:2009/02/21(土) 22:40:22
「あいうえお」でした
115106: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
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.とかうごかない
145141: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はいらなくなったみたいだよ
147141: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だとちょっともっさりとしてるけど、一応使えてる。
マルチスレッドと相性が悪いらしくて、マルチスレッドと絡むとたまにウィジットが真っ白になったりするけど、気にしなければどうということはない。
165161: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
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
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
248247: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 ではないってのは代入不可能ってこと。
逆に今までそんなコード書いていて大丈夫だったのかが気になるな。
251247:2009/03/08(日) 12:56:01
opCallの戻り値を値型にしとけばスタックに確保されるんじゃ?
関数のほうは実はopAssign(ref)とかだから問題ないと思うんだ

C++だと構造体のコンストラクタとこういうことができたんですよ
Dはなぜかコンストラクタを持たせると怒られる
252247: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
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
それは状態を変更しない問い合わせメソッドを用意しろと言う話であって、
状態を変更するメソッドが値を返さないことはさほど重要ではないと思うのだけど。
301294: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
どこがおかしいのかわからねえ
323321: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の継承とは何かもっと詳しく定義しないといけないのかな
332331: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が実装されてないといけないけど、
これで通るから、仕様はともかく実装上は区別されないっぽいな。
337331: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されるものだとしてもだ
何らかの条件でバグが発現するというのだからやっかいな問題だね
具体的に最初に言われたバグが起こるコードを示してもらえたらいいのだけど
346321: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
353321:2009/03/25(水) 10:48:03
>>352
おぉ、ありがとうございます。バグ報告お疲れ様です。
354デフォルトの名無しさん:2009/03/25(水) 18:16:00
CLR上で動かしたらオリジナルより速い、なんてな。
355デフォルトの名無しさん:2009/03/25(水) 18:45:33
DとC#の速度を比べればそうはならんでしょ。
356デフォルトの名無しさん:2009/03/25(水) 22:24:38
C#ではなく、C++/CLIのアンマネージドコードと比べるべきなのでは?
357デフォルトの名無しさん:2009/03/26(木) 01:11:52
C++/CLIで書いてるとこをD/CLIで書きたいなぁ・・
358デフォルトの名無しさん:2009/03/26(木) 22:46:31
Tangoもうじき新しいバージョンきそうだな
359デフォルトの名無しさん:2009/03/26(木) 23:43:33
vimの補完機能ってD言語で使いたいんだけどどうすればいいの?
360デフォルトの名無しさん:2009/03/27(金) 01:37:45
オムニ補完ならtagsを作るところまではあるけど、dcomplete.vimなるものはないと思う。
本体付属のccomplete.vimを改造するのがよさそうだけど、omnicppcompleteほど便利じゃない気がする・・・

tagsについてはこっちを参照
http://www.prowiki.org/wiki4d/wiki.cgi?ReferenceForTools/ExuberantCtags
http://stashbox.org/v/314221/ctags-5.7-d.patch (↑はリンク切れ)
361デフォルトの名無しさん:2009/03/27(金) 07:27:25
struct Waha {
 int a;
 
 ref int func(int L=__LINE__, string F=__FILE__)() {
  return a;
 }
}
void main() {
 Waha w;
 w.func();
}
________________
variable hoge.Waha.L only parameters or foreach declarations can be ref
variable hoge.Waha.F only parameters or foreach declarations can be ref

どういうこと?(´・ω・`)
funcのref外したら直るけど DMD2.026Win
362デフォルトの名無しさん:2009/03/27(金) 09:17:58
型なしラムダまだー
363デフォルトの名無しさん:2009/03/27(金) 09:24:31
Tango 0.99.8 Sean released
* Final refinement of the IO
* JSON parser/builder
* FTP adapter for the VFS by Lester L. Martin II
* Serial port support by Robin Kreis
* Inter-thread communication by Steven Schveighoffer
* /dev/null support by Fawzi Mohamed
* Random framework by same Fawzi
* BigInt by Don Clugston
* Updated for DMD 1.041, including Mac support
* Support for LDC
* OpenSolaris support by BlueZeniX
* New API docs courtesy of Aziz and Moritz
* More containers such as HashFile
364デフォルトの名無しさん:2009/03/27(金) 16:02:33
>>360
ありがとう
365デフォルトの名無しさん:2009/03/28(土) 01:03:46
Tango 0.99.8 前のバージョンは落とせないのか
これは…あんまりだorz
366デフォルトの名無しさん:2009/03/28(土) 01:07:33
http://www.dsource.org/projects/tango/wiki/PreviousReleases
>* Final refinement of the IO

io.devices.stdout とか出て軒並みこける dsss 無限ループ
みたいになって悩む。というか Previous あるな(恥
367デフォルトの名無しさん:2009/03/28(土) 01:37:19
以前のバージョンを使うのか…?
あんなにみんなが焦がれた大量破壊変更なのに。
といっても、それほど苦労せずに移行出来ると思うけど…
Bufferの機能分岐がちょっと面倒だけど、基本的にそれ以外は難なく移行できたな。
368デフォルトの名無しさん:2009/03/28(土) 18:32:52
* FTP adapter for the VFS by Lester L. Martin II
WebDAVまだー?
369デフォルトの名無しさん:2009/03/28(土) 22:00:56
>>361 バグかな?
ttp://d.puremagic.com/issues/ には見あたらない
370デフォルトの名無しさん:2009/03/29(日) 00:07:17
>>361 >369
ttp://d.puremagic.com/issues/show_bug.cgi?id=2460
この問題かな?

template func(int L=__LINE__, string F=__FILE__) {
 ref int func() {
  return a;
 }
}

という形式に書き直して通る場合、このバグ。
voteすると早く直ると思う
371デフォルトの名無しさん:2009/03/29(日) 03:38:14
でも一番上のimport関係のバグが放置されてるんだよなあ・・・orz
372デフォルトの名無しさん:2009/03/29(日) 10:07:36
すみませんが教えてください。
下記のコードがobject.Errir: Access Violationになってしまいます。
どこか間違えてますでしょうか?

dmd 2.026で確認しました。

import std.stdio;
int main(string[] args)
{
A foo = new A();
writefln("%s", foo.iX.y()); // 5
X* x = &(foo.iX);
writefln("%s", x.y()); // object.Error: Access Violation
return 0;
}

struct X {
int function() y;
}

class A {
this() {
auto dg = &b;
iX.y = dg.funcptr;
}
int b() {
return 5;
}
X iX;
}
373デフォルトの名無しさん:2009/03/29(日) 13:50:34
writeflnの%sにintをぶっこんでるからじゃないの?
374デフォルトの名無しさん:2009/03/29(日) 19:07:32
>>372
非静的なメンバ関数は隠し引数thisを持つ(EAX経由で渡される)が、その関数をiX.yに代入した時に引数が消えているから。
375デフォルトの名無しさん:2009/03/29(日) 19:30:44
やったーtagsデキタヨー
376372:2009/03/29(日) 22:59:35
>>374
thisの情報が消えてしまったから、という理解で正しいでしょうか?
ということはこのコードのように非静的関数をCへのIFっぽく静的関数として扱う
ことはできないということですね。
そういう場合は泥臭く(?)下記のように書くしかない?

import std.stdio;
A foo;
int main(string[] args)
{
 foo = new A();
 X x;
 x.y = &func;
 writefln("%s", x.y()); // 5
 return 0;
}

int func() {
  return foo.b();
 }

struct X {
 int function() y;
}

class A {
 int b() {
  return 5;
 }
}
377デフォルトの名無しさん:2009/03/30(月) 00:27:04
>非静的関数をCへのIFっぽく静的関数として扱う
ごめんわからんのでkwsk
378372:2009/03/30(月) 07:37:24
>>377
わかりにくくてすいません。

要するに...
 ・関数ポインタの集合をもつ構造体を定義する(C,D互換性もたせて)。
 ・C側はその構造体を引数にもつエクスポート関数を実装したDLLを作成する。
 ・D側から(LoadLibrary, GetProcAddressして)そのDLLのエクスポート関数を呼び出す。
 ・C側からは構造体の関数ポインタを経由してDのメソッドを呼び出す。
ということがやりたいです。

すいません、サンプルコードかければいいんですが時間が…。
379デフォルトの名無しさん:2009/03/30(月) 07:51:53
thisを別に渡せばいいのでは…?
Cではむしろこっちの方が普通だと思うのだけど…

import std.stdio;

int main(string[] args)
{
        auto hige = new A();
        X x;
        x.y = &func;
        writefln("%d", x.y(cast(void*)hige)); // 5
        return 0;
}

int func(void* hige) {
        return (cast(A)hige).b();
}

struct X {
        int function(void*) y;
}

class A {
        int b() {
                return 5;
        }
}
380デフォルトの名無しさん:2009/03/30(月) 08:57:14
IFってインタフェースか?
たまに見かけるけどどこの業界でIFなんて略してるんだ
せめてI/Fじゃないとわからん
381デフォルトの名無しさん:2009/03/30(月) 14:40:59
タスクトレイにアイコン表示するのってどうやればいいの?
382デフォルトの名無しさん:2009/03/30(月) 14:59:31
>>381
Win32APIのタスクトレイ関連機能
383デフォルトの名無しさん:2009/03/30(月) 15:13:38
そうか・・・
384デフォルトの名無しさん:2009/03/30(月) 20:09:30
>267-280について。
ttp://d.puremagic.com/issues/show_bug.cgi?id=2732


real[2][int] hash = null;
real[2] v = [3,4];

*(hash[0])=1;    // 代入できてしまう  typeof(*hash[0]) -> real
write(hash[0]);   // -> [1 0]  一方 new real[2] -> [nan nan]

real[1] w = [3,4];
// コンパイラは左辺と右辺の型を知っているのにコンパイル時エラーにならず、
// 実行時にobject.Exception: lengths don't match for array copy.となる

この二つの問題って既に報告されてたっけ?
385372:2009/03/30(月) 21:20:10
>>379
D同士ならそのとおりやるし、C同士でもやるんだけど…。
Dで実装したクラスのメソッド(非動的関数)をCから呼びたい。

Cで作ったDLL
export int CFunc(struct _IF *if)
{
 printf("%d", if->y());
 return 0;
}

Dで作ったプログラム本体
int main(string[] args)
{
 LoadLibrary(), GetProcAddress()でCFunc()をロード。
 A a = new A();
 X x;
 x.y = &(a.b);
 CFunc(&x);
 return 0;
}
みたいに。
ちょっとちゃんとコード書いてきます。。。

>>380
わかりにくくてごめん。
でもInteface用のclassって class CFooIF みたいに命名しない?
386デフォルトの名無しさん:2009/03/30(月) 22:04:17
しません。
387デフォルトの名無しさん:2009/03/30(月) 22:39:40
hige.c http://codepad.org/4Gk9MIag
dmc -ohige.dll hige.c hige.def
hige.d http://codepad.org/N7GzXMeb
dmd -run hige.d
これじゃだめなの?(ひげをこさえすぎた。ちょっと読みにくいかも。
388372:2009/03/30(月) 23:14:38
>>387
おぉ、はい、そうです。
最初はそれを考えたんですが、C側でDのインスタンス(HigeHandle)を意識する
させるのがなんだかなぁと思って>>376しか方法がないかと考えておりました。

ここまで手助けして頂けたので後は考えてみます。
どうもありがとうございました。
389デフォルトの名無しさん:2009/04/01(水) 09:08:34
Tango次のバージョンではスタックトレースきそうだな
trunkでtango.core.stacktrace.*が追加されてる。
390デフォルトの名無しさん:2009/04/01(水) 14:39:46
391デフォルトの名無しさん:2009/04/01(水) 15:02:33
プログラミング初心者だけど、Dでランチャー作ろうと思ったけどWin32APIでウィンドウ出すところでつまずきました、完。
392デフォルトの名無しさん:2009/04/01(水) 15:08:29
Alias Thisはポインタ取れたりするんだろうか?
ともあれ、静的に解決できるアダプタを作るのがかなり簡単になる面白い機能だな。
opDotと合わせると継承不要になる場面がかなり多くなりそう。
393デフォルトの名無しさん:2009/04/01(水) 15:32:08
Qt使えるようにして
394デフォルトの名無しさん:2009/04/01(水) 18:07:52
Windows + Rで呼び出してるからランチャーは要らない
395デフォルトの名無しさん:2009/04/01(水) 18:23:20
いいかげんWindowsのサンプル更新しろよって話か。
一応更新履歴のページに書き換えの必要な部分について書いてあった気がする。
396デフォルトの名無しさん:2009/04/01(水) 19:18:25
>>389 うひょ!
>>391 D1? D2?
>>392 また変わり種の機能が増えたのか。把握しきれてるかな俺
>>395 2.020-2.021のdruntime関係の変更も入ってたっけ?
397391:2009/04/01(水) 19:54:23
いままでD2を使ってたけど、D1の方がいいかと思い始めてる
398デフォルトの名無しさん:2009/04/01(水) 23:28:57
>>397
自身を初心者だと思うなら、D1の方がやりやすいと思うよ
試験的実装について思考を奪われないで済む

もちろん僕はD1!
399デフォルトの名無しさん:2009/04/02(木) 00:08:08
俺はD2一択だがな!
今回はバグ取りばかりだな。あとはOPTLINKの改善を持ってD2もいいところまで行きそうだ。
400デフォルトの名無しさん:2009/04/02(木) 00:33:46
TangoのD2対応はどこまで進んでいるのかな?
401デフォルトの名無しさん:2009/04/02(木) 01:22:23
>>400
相変わらずdruntimeをガン無視しつつ、Winで大量のエラーをはいてコンパイルできない状態って感じだな…
最新のコミットは1週間前
Merged from trunk -r 4021:4401 This did not include runtime (lib) which may no longer be built as it is now part of the compiler.
402デフォルトの名無しさん:2009/04/02(木) 01:24:52
>>401
D2がbetaじゃなくなるまでサポートしない気なのかね
403デフォルトの名無しさん:2009/04/02(木) 02:55:59
>>402
それじゃ一生(ry
404デフォルトの名無しさん:2009/04/02(木) 08:07:15
やっとalias thisきたか。
つぎはstatic引数だな。
405デフォルトの名無しさん:2009/04/02(木) 08:46:00
>>404 static引数ってなんぞ
406デフォルトの名無しさん:2009/04/02(木) 08:50:11
>>402
そろそろD3が出てもいい頃かと・・・
407デフォルトの名無しさん:2009/04/02(木) 15:21:57
dmdのフォルダ構造変わってない?dflはwindowsフォルダへ入れればいいのかな?
408デフォルトの名無しさん:2009/04/02(木) 15:51:29
>>407
Macサポートがついてから変わったよ(実行ファイルの名前が同じになるからかと)
409デフォルトの名無しさん:2009/04/02(木) 16:42:25
>>407
どこでもいいよ
dmd\src\druntime\importに入れておけばsc.iniを編集しなくてもいいけど
410デフォルトの名無しさん:2009/04/02(木) 17:17:48
D1ってパスに日本語がはいってるを読み込んだりできるの?
411デフォルトの名無しさん:2009/04/02(木) 18:43:05
できるけど
412デフォルトの名無しさん:2009/04/02(木) 19:04:52
じゃあD!にかえよ
413デフォルトの名無しさん:2009/04/03(金) 01:18:08
std.path.joinがWindowsだと引数を三つ以上渡しても無効なの、いつ直るんだろう?
414デフォルトの名無しさん:2009/04/03(金) 01:44:55
>>413 patch書いてくれたら投稿しとくけど
415413:2009/04/03(金) 02:18:33
*** C:\D\dmd\src\phobos\std\path.d Tue Sep 2 22:35:10 2008
--- C:\D\dmd\src\phobos\std\path2.d Fri Apr 3 02:14:45 2009
***************
*** 684,689 ****
--- 684,691 ----
}
version (Windows)
{ // The other version fails unit testing when under windows
+ if (!more.length)
+ {
if (!p2.length)
return p1;
if (!p1.length)
***************
*** 722,727 ****
--- 724,732 ----
}
}
return p;
+ }
+ // more components present
+ return join(join(p1, p2), more[0], more[1 .. $]);
}
}
416413:2009/04/03(金) 02:21:16
patchとかよく分からないけど、これでいいのかな?
やってることは、linux版と同様にif (!more.length)とreturn join(join(p1, p2), more[0], more[1 .. $]);を付け足しただけ。
417413:2009/04/03(金) 02:29:53
*** C:\D\dmd\src\phobos\std\path.d Fri Apr 3 02:27:19 2009
--- C:\D\dmd\src\phobos\std\path2.d Fri Apr 3 02:27:03 2009
***************
*** 686,691 ****
--- 686,693 ----
}
version (Windows)
{ // The other version fails unit testing when under windows
+ if (!more.length)
+ {
if (!p2.length)
return p1;
if (!p1.length)
***************
*** 724,729 ****
--- 726,734 ----
}
}
return p;
+ }
+ // more components present
+ return join(join(p1, p2), more[0], more[1 .. $]);
}
}
418413:2009/04/03(金) 02:30:38
415は間違い
419デフォルトの名無しさん:2009/04/03(金) 03:22:48
>>418 ごめんLinux環境がすぐ用意できないので遅くなる
420デフォルトの名無しさん:2009/04/03(金) 03:38:27
>>413 こうなるでおk?
import std.stdio, std.path;
void main()
{
version(Windows){
writefln(join("d","dmd","src")); // d\dmd
}
version(Linux){
writefln(join("d","dmd","src")); // d/dmd/src
}
}
421413:2009/04/03(金) 04:13:47
そう
Windowsだと第三引数以降が無視されちゃってる

んで、join関数のversion(Posix)の中身のように

if (!more.length)
{
・・・
}
// more components present
return join(join(p1, p2), more[0], more[1 .. $]);

というように囲ってあげれば、とりあえずは仕様通りになるんじゃないかと思うわけで
422デフォルトの名無しさん:2009/04/03(金) 12:54:23
version(Linux)じゃなくてversion(linux) or version(Posix)か
了解
423デフォルトの名無しさん:2009/04/03(金) 21:06:27
alias this使えばもはや強いtypedefとかほとんど必要なくない?
強いtypedefよりプロパティとか自由にできていい感じだ
424デフォルトの名無しさん:2009/04/03(金) 22:24:42
typedefの方が軽量じゃね?
425デフォルトの名無しさん:2009/04/03(金) 22:29:28
alias thisとかの使い分けのガイドラインが欲しいぜ
426デフォルトの名無しさん:2009/04/03(金) 23:21:36
427デフォルトの名無しさん:2009/04/03(金) 23:22:58
Effective D的な。
428413:2009/04/04(土) 00:07:42
>>426
ありがとう
429デフォルトの名無しさん:2009/04/04(土) 03:55:48
鯖が移動していたのに気づかなかった俺。専ブラのせいなのかしら。

あーMSあたりがDをパクったの出してくれんかなー。
文法は概ねD程度でいいから、ちゃんとGC・例外・テンプレート関係もサポートしつつネイティブが吐けて。
でもアプリケーション用に.netランタイム並の高機能な標準ライブラリが付いてて、
でもちゃんとリンカがあって必要な分だけ実行ファイルにリンクできるからランタイム要らずで。

俺はVisualStudioのフォームデザイナでd.winforms.FormのデザインをGUIで編集しつつ、
インテリセンスにべったり寄りかかってコード書きながら、
合間合間にリファクタリングブラウザでクラスやメソッドの設計を調整していくわけですよ。
そしてテストを実行してVisualStudio上で緑のバーが伸びきったことを確認すると、
生成されたネイティブなexeファイルを自分のプログラム用フォルダに放り込んで悦に入ると。
430デフォルトの名無しさん:2009/04/04(土) 10:47:41
>>424
検証してみたのでおいておきますね
http://tinyurl.com/c9pbyn
431デフォルトの名無しさん:2009/04/04(土) 13:10:18
括弧の対応とかセミコロンを忘れてコンパイラが無限ループに
なっちゃうとき、どこが問題か見つける方法ってない?
432デフォルトの名無しさん:2009/04/04(土) 17:33:06
alias thisはクラスや構造体をホイホイ扱うためのもので
typedefは移植性を上げるためのものだと思う
433デフォルトの名無しさん:2009/04/04(土) 21:40:15
2.027@winがほとんど動かないのって俺だけ?
434デフォルトの名無しさん:2009/04/05(日) 02:25:45
>>432
型に小さなラッパをつけたい場合の用途も結構大きいと思うが。
435デフォルトの名無しさん:2009/04/05(日) 08:28:05
typedefで済むんならtypedefでいいんじゃね。一行だし。
仮にtypedefをalias thisで完全置換したらわかりにくくなりそうだ。
まあ必要ないってこともないんじゃないかなと思う。
436デフォルトの名無しさん:2009/04/05(日) 08:49:26
intと等価な型を宣言したいときなんかはalias thisは使えないかな
437デフォルトの名無しさん:2009/04/05(日) 13:01:25
>>433
ちょっと動くってことはimport関連のパス間違ってるんじゃないか?
sc.iniとか調べてみるといいよ。
438デフォルトの名無しさん:2009/04/05(日) 23:10:12
動かないときは
全部消して入れ直すべし
439デフォルトの名無しさん:2009/04/06(月) 02:03:13
あれ???
typedefした/された型同士は相互に代入できなかったんじゃなかった?
440デフォルトの名無しさん:2009/04/06(月) 02:05:48
リテラルは暗黙変換されるのか
知らなかった
441デフォルトの名無しさん:2009/04/07(火) 00:05:06
>>436
完全に等価なのは無理だよね
テンプレートでは外側の型が優先されるから
そこでも適切に化けないと引っかかったりする
442デフォルトの名無しさん:2009/04/07(火) 17:53:54
誰かD言語wiki作ってよ
443デフォルトの名無しさん:2009/04/07(火) 18:17:56
既存のwikiじゃ駄目な理由でもあんの?
444デフォルトの名無しさん:2009/04/07(火) 18:37:45
導入方法とか詳しく書いてほしい
445デフォルトの名無しさん:2009/04/07(火) 18:57:15
詳しく書かないとわからないような人が
この言語を使うのは難しい
446デフォルトの名無しさん:2009/04/07(火) 19:01:14
>>444
最低限どの導入か書いてくれないと
dmdとかだと展開してPATH通すだけだし
447デフォルトの名無しさん:2009/04/07(火) 19:14:21
今から新しくwikiを作ったり導入方法を書き下ろす必要があるのかな
既存の情報だけでこの10年近く大勢のの人間が導入できたというのに…
448デフォルトの名無しさん:2009/04/07(火) 19:25:09
もうあるからいらね>wiki
449デフォルトの名無しさん:2009/04/07(火) 19:27:37
イラネ
450デフォルトの名無しさん:2009/04/07(火) 19:34:36
Dsciteどこいったの?
451デフォルトの名無しさん:2009/04/07(火) 19:57:05
お亡くなりになりました
452デフォルトの名無しさん:2009/04/07(火) 21:08:04
Version D 1.043   Apr 6, 2009
New/Changed Features

    * Added FreeBSD 7.1 support.

Bugs Fixed

    * Bugzilla 2796: Dependency on libstdc++-v3
453デフォルトの名無しさん:2009/04/08(水) 01:38:10
そうか
454デフォルトの名無しさん:2009/04/08(水) 02:41:58
バージョンアップはいいことだ
455デフォルトの名無しさん:2009/04/08(水) 08:45:11
Dsciteのページが無くなった
456デフォルトの名無しさん:2009/04/09(木) 01:38:46
Version D 2.028 Apr 7, 2009
New/Changed Features

Bugs Fixed

* Bugzilla 2812: sqrt(2.0) is about -2.7341e-53
457デフォルトの名無しさん:2009/04/09(木) 09:28:43
早っ
そして酷いバグだ
458デフォルトの名無しさん:2009/04/09(木) 12:45:14
四則演算を間違うバグの次にひどいかもしれんなw
459デフォルトの名無しさん:2009/04/09(木) 12:46:33
ちゅうかテスト書こうよ・・・
DStressのD2版必要だよなあ
460デフォルトの名無しさん:2009/04/09(木) 12:51:46
言語組み込みの単体テストは何のためにあるのかw
461デフォルトの名無しさん:2009/04/09(木) 15:01:13
Internal error: ..\ztc\cod4.c 353

どうしたもんかな
462デフォルトの名無しさん:2009/04/09(木) 17:01:29
unittest書きまくって送ったら導入してくれるだろうか?
463デフォルトの名無しさん:2009/04/09(木) 20:25:14
店員「当店のポイントカードはお餅でしょうか」
おれ「えっ」
店員「当店のポイントカードはお餅ですか」
おれ「いえしりません」
店員「えっ」
おれ「えっ」
店員「まだお餅になってないということでしょうか」
おれ「えっ」
店員「えっ」
おれ「変化するってことですか」
店員「なにがですか」
おれ「カードが」
店員「ああ使い続けていただければランクがあがってカードが変わりますよ」
おれ「そうなんだすごい」
店員「ではお作りいたしましょうか無料ですよ」
おれ「くさったりしませんか」
店員「えっ」
おれ「えっ」
店員「ああ期限のことなら最後に使ってから一年間使わないときれます」
おれ「なにそれこわい」
店員「ちょくちょく来ていただければ無期限と同じですよ」
おれ「なにそれもこわい」
店員「えっ」
おれ「えっ」
464デフォルトの名無しさん:2009/04/09(木) 22:10:07
そもそも、特定の値(ビットパターン)でコケるバグの unittest なんて
全ビットの組み合わせになるように書かない限り
どうやったって書けないぞ。

でも、最近はCPUパワーで何とかなっちゃうのかね。
32bitなんか一瞬でカウントしちゃうし、確かにそういうテストを書くこともあるんだが…
465デフォルトの名無しさん:2009/04/09(木) 22:17:52
そこは別の言語の実装を使ってDのソースを書いてだな
466デフォルトの名無しさん:2009/04/09(木) 22:21:49
別の言語の実装の標準ライブラリとリンクすれば…
467デフォルトの名無しさん:2009/04/09(木) 23:57:20
>>466 候補が思いつかないw
468デフォルトの名無しさん:2009/04/10(金) 12:29:17
いやいや、sqrtなんてマシン語レベルで1命令だろ。
469デフォルトの名無しさん:2009/04/10(金) 16:19:15
だったらバグらなかったんじゃね?
470デフォルトの名無しさん:2009/04/11(土) 10:53:44
逆にどこをどう間違えたらそんなバグが出るのか興味ある。
最適化かなんかのバグかね?
471デフォルトの名無しさん:2009/04/11(土) 11:07:19
bugzillaの方を読むと、-O 有りの時に
リテラルをsqrtに渡した結果がおかしかったらしいから
CFTE周りだと思う。
472デフォルトの名無しさん:2009/04/11(土) 11:08:33
>471
ageちまった、すまん。
473デフォルトの名無しさん:2009/04/11(土) 12:02:56
言語自体がバグってるときにunittestって有効なのかな
今回の場合はさすがに意味ありそうだけど
474デフォルトの名無しさん:2009/04/11(土) 12:09:07
コンパイラのコードに unittest 入れるってことだろ。
でも、dmd は C++ で書いてあるわけだが。
475デフォルトの名無しさん:2009/04/11(土) 12:34:41
CppUnitとか使ってよね・・・
何も使ってないだろ今
476デフォルトの名無しさん:2009/04/11(土) 12:39:01
うん。理想は素晴らしいのに、コンパイラ自体はダメダメ。
いわゆる医者の不養生。
477デフォルトの名無しさん:2009/04/11(土) 12:54:50
andrei作の新phobos触った人いない?
感想とか求む
478デフォルトの名無しさん:2009/04/11(土) 14:58:32
ええい破壊的変更はまだか!
479デフォルトの名無しさん:2009/04/11(土) 16:58:47
バグといえば
Internal error: ..\ztc\cgcod.c 1549
とか出てコンパイルできないバグも全然直らないし
480デフォルトの名無しさん:2009/04/11(土) 18:28:10
interfaceとclassを複数継承しているとき、
両方の型がある関数オーバーロードの解決ってどうなっているんだっけ。
曖昧だからダメといわれるのだろうけど、優先順位は付けられるのかしら。
481デフォルトの名無しさん:2009/04/11(土) 19:35:05
http://www.kmonos.net/alang/d/2.0/function.html
>もっともよく マッチする関数が選択されます。 マッチの適合度は以下の4段階あります
>   1. マッチしない
>   2. 暗黙変換によるマッチ
>   3. constへの変換によるマッチ
>   4. 正確なマッチ
>複数の関数が同じマッチ適合度にある場合、 partial ordering  によって最適なマッチが決定されます。
> Partial ordering では、もっとも特殊化された関数が選択されます。
> 他と比べてより特殊化されていると言える関数が無い場合、 曖昧な関数呼び出しとしてエラーになります。

以上よりこんな感じに優先順位がつくはず。

interface A{}
class B{}
class C: A{}
class D: C, A{}
class E: B, A{}
void func(A){}// (a)
void func(B){}// (b)
void func(C){}// (c)
void main(){
    func(new D);// 2. 暗黙変換によるマッチで、(a)より特殊化されている(c)が呼ばれる
    func(new E);// 2. 暗黙変換によるマッチで、(a)と(b)であいまい
    func(cast(B)new E);// 4. 正確なマッチで(b)が呼ばれる
}
482デフォルトの名無しさん:2009/04/11(土) 21:19:27
>>461,479 コードも出さずにバグとな
483デフォルトの名無しさん:2009/04/11(土) 22:01:38
>>481
ありがとう。
結局Eがやりたいのだが、やっぱ曖昧なままか。
派生を外してopDotやalias thisでどうなるかも試してみる
484デフォルトの名無しさん:2009/04/12(日) 00:29:11
485デフォルトの名無しさん:2009/04/13(月) 15:00:13
サイトは残ってるけどDSciTEだけ無くなってる、もう手に入らないの?
http://dronten.googlepages.com/dscite (DSciTE)
486デフォルトの名無しさん:2009/04/15(水) 01:54:55
更新まだかなー
487デフォルトの名無しさん:2009/04/16(木) 20:55:23
opInって使い道ある?
488デフォルトの名無しさん:2009/04/16(木) 22:40:00
inの役割を踏まえたらopIn_rしか使わないような
489デフォルトの名無しさん:2009/04/17(金) 12:38:24

00 名前:null[sage] :2009/04/17 12:37
      ☆ チン 
       ☆ チン  〃  ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        ヽ ___\(\・∀・) < D.NETマダー?
            \_/⊂ ⊂_ )   \________
          / ̄ ̄ ̄ ̄ ̄ ̄ /|
       | ̄ ̄ ̄ ̄ ̄ ̄ ̄|  |
       |  愛媛みかん  |/

490デフォルトの名無しさん:2009/04/17(金) 12:42:33
他にもっとやることあるから.NETはまだいいよ
491デフォルトの名無しさん:2009/04/17(金) 13:32:31
C#に契約プログラミングが導入されればなあ
492デフォルトの名無しさん:2009/04/17(金) 16:44:58
言語仕様でunittestは神過ぎた
493デフォルトの名無しさん:2009/04/17(金) 22:39:44
>>491
4.0から入るんじゃ?
494461:2009/04/18(土) 00:07:50
最小コードが抽出できた
Internal error: ..\ztc\cod4.c 353

struct S {        real v; }
S f() { S s; return s; }
const(S) g() { return f(); }


再現条件:
Sのメンバにrealが含まれている
gの返り値はconst(S)である
fを直接gの返り値としている

古いコードで瑣末なエラーだが……
495デフォルトの名無しさん:2009/04/18(土) 01:11:18
Dの言語仕様の中でC#に無い機能って契約とテンプレートしか思いつかなかったけど
なんか他にも言語仕様上ででっかい違いある?
496デフォルトの名無しさん:2009/04/18(土) 01:24:21
>>495
文字列ミックスイン
CTFE
497デフォルトの名無しさん:2009/04/18(土) 01:44:04
クラス乱立vsそうでもない
498デフォルトの名無しさん:2009/04/18(土) 01:46:23
typedef
499デフォルトの名無しさん:2009/04/18(土) 10:33:16
スコープガードは?
500デフォルトの名無しさん:2009/04/18(土) 13:25:53
phobosのsocketで構造体をsendしたいんですけどやり方がわかりません。。
socket.sendでvoid[]にcastしようとすると
'cannot implicitly convert expression '
って怒られるしどうすれば良いのでしょう……
501デフォルトの名無しさん:2009/04/18(土) 14:05:47
S s;

auto d = (cast(void*)&s)[0 .. S.sizeof];

としてみたら?
502デフォルトの名無しさん:2009/04/18(土) 15:16:17
foreach (v; s.tupleof)
503デフォルトの名無しさん:2009/04/18(土) 21:17:29
できました、ありがとう!
再び質問なのですが、受け取ったchar[]なバイナリデータを構造体に戻すにはどうすればよいのでしょうか。
504デフォルトの名無しさん:2009/04/18(土) 21:35:30

void[] data;

assert(data.lengh >= S.sizeof);
auto s = *(cast(S*)data.ptr);
505デフォルトの名無しさん:2009/04/18(土) 21:39:09
エンディアンとか考えなくていいのか?
506デフォルトの名無しさん:2009/04/19(日) 04:46:17
>>504
こういうチェックってassertでいいの?
それとも、普通にifで比較して例外投げた方がいい?
507デフォルトの名無しさん:2009/04/19(日) 05:24:54
実行時にdata.lengh < S.sizeofとなる可能性があって、それが困るなら、
普通にifで比較して例外投げ。
コーディングのバグとしてしかありえず、それを検出したいのなら(関数の使い方が間違っているとか)、
assert。
508デフォルトの名無しさん:2009/04/19(日) 06:19:30
enforce(data.lengh < S.sizeof);
509デフォルトの名無しさん:2009/04/19(日) 16:36:05
Windows用というかC用のインターフェース関数を作ってるんだが、
MBSってどの型にすべきなの?
phobosではtoMBSz(string)はchar*になってるけど、ubyte*にすべき?

また、wchar*をwstringに変換する関数がないっぽいんだけど
みんなどうしてるの?
int len = wcslen(buf);
wstring str = buf[0..len].idup;
みたいな感じ?
510デフォルトの名無しさん:2009/04/19(日) 17:33:01
ubyteだろうな。

俺は
typedef ubyte achar;
alias invariant(achar)[] astring;
ってして使ってる。

wchar*からwstringはそんな感じの関数を自作
511デフォルトの名無しさん:2009/04/19(日) 17:50:02
phobosじゃないけど、使ってるライブラリでchar*だから自動的にchar*になってるな。
自分のソースコードにはTCHARとしか出てこないからあんまり気にしてないけど。
変換にはわなDのtchar.dを使ってるけど、それだとlstrlen使ってるな。
512デフォルトの名無しさん:2009/04/19(日) 20:21:25
import my.windows.ansistring;でいいよ。
513デフォルトの名無しさん:2009/04/19(日) 23:01:31
なるほどね、やっぱりubyte*にすべきなのね。
ありがとう。

charがUTF8で思い切ったのはいいけど、Cとの互換性が鬱陶しくなったなぁ。
514デフォルトの名無しさん:2009/04/19(日) 23:58:42
Winなら、Unicode系の関数と、std.utf.toUTF16zとか使えばいいのでは?
いまさら98系に対応しています!とかいうアプリケーション作っても喜ぶ人はほとんどいない気がする。
515デフォルトの名無しさん:2009/04/20(月) 01:58:16
そうするとCとかから呼び出す時に面倒じゃない?
516デフォルトの名無しさん:2009/04/20(月) 03:15:37
さてubyte[]かubyte*か?
517デフォルトの名無しさん:2009/04/20(月) 16:40:46
518デフォルトの名無しさん:2009/04/20(月) 19:37:27
ttp://www.digitalmars.com/d/2.0/changelog.html
Version D 2.029 Apr 19, 2009

大規模アップきたよー\(^p^)/
519デフォルトの名無しさん:2009/04/20(月) 20:01:40
>Added template function literals
520デフォルトの名無しさん:2009/04/20(月) 20:33:37
あんま破壊的じゃないなあ……
521デフォルトの名無しさん:2009/04/20(月) 20:45:22
破壊的というよりは順調に便利になる変更な気がするけど、よく分からんから和訳待ちだなあ。
Fileにバグがあって云々、って文言からすると、あんまり間を置かずに2.030になりそうだけど。
522デフォルトの名無しさん:2009/04/20(月) 21:14:45
きたー
523デフォルトの名無しさん:2009/04/20(月) 22:03:31
破壊的ではないと思っていたら全然そんなことはなかったぜ

std.stdio.write(int)が使えなくなっている(エラーメッセージが分かりづらい)
std.randomが破壊的に変わりまくり(前のが無駄に分かりにくかったのは確かだが)
std.string.toStringがstd.conv.to!(string)になっていた(deprecatedメッセージが適切すぎてこの機能にありがたさを感じる)
524デフォルトの名無しさん:2009/04/20(月) 22:05:55
しかし……単に数字を吐くだけのときはwrite(ln)を使っていたが、なんか面倒になったな。
525デフォルトの名無しさん:2009/04/20(月) 23:10:54
deprecatedは地味に効いてる気がするよな
526デフォルトの名無しさん:2009/04/21(火) 00:08:48
to!(wchar[])(100); が使えなくなってしもうた
527デフォルトの名無しさん:2009/04/21(火) 01:32:31
to!(wstring)(100)でよくね? 必要に応じて .dup すべし
528デフォルトの名無しさん:2009/04/21(火) 01:37:12
ちなみにD2.xで言ってる
529デフォルトの名無しさん:2009/04/21(火) 02:32:36
rangeの書き方はどうなったのかな?
530デフォルトの名無しさん:2009/04/21(火) 06:23:08
三角関数その他初等関数が早くなっている気がする
しかし各種特異点近傍の振る舞いもやっぱり変わった気がする
あとで確かめてみるけど
531デフォルトの名無しさん:2009/04/21(火) 11:38:13
std.c.stdio.flush()どこ行ったの?
532デフォルトの名無しさん:2009/04/21(火) 15:11:38
    * Bugzilla 2812: sqrt(2.0) is about -2.7341e-53

Version D 2.028 Apr 7, 2009
New/Changed Features

Bugs Fixed

    * Bugzilla 2812: sqrt(2.0) is about -2.7341e-53

どうして2回言うのカナ?
どうして2回言うのカナ?
533デフォルトの名無しさん:2009/04/21(火) 15:13:21
大事なことだから(ry
534デフォルトの名無しさん:2009/04/21(火) 15:24:11
>>531
core.stdc.stdio.fflush
535デフォルトの名無しさん:2009/04/21(火) 15:45:53
2.028から2.029にしたら
object.d: Error: module object cannot read file 'object.d'
とか出てコンパイルできんようになった…
536デフォルトの名無しさん:2009/04/21(火) 16:12:07
>>534 おおそこかありがとう
537デフォルトの名無しさん:2009/04/21(火) 16:21:40
Windowsなら動いてるけど>>535
動かないときは一旦全部消すのがdmd更新の定石
538デフォルトの名無しさん:2009/04/21(火) 19:29:46
linux版使ってるけど、インストールのたびにdmd.confに書いてあるphobosとdruntimeの位置を修正してる
どうファイルを置くように想定してるのかいまいち分からない
539デフォルトの名無しさん:2009/04/22(水) 11:57:12
string a = std.conv.text(1, "X", new A );
string b = std.string.format(1, "X", new A );
どっちがお好み?
540デフォルトの名無しさん:2009/04/22(水) 12:13:09
意味的に前者かな。
後者を使うなら、やはりフォーマット文字列を与えるべきだと思う。
541デフォルトの名無しさん:2009/04/22(水) 23:45:09
is({ /*code*/ }())

がきもすぎる。
542535:2009/04/22(水) 23:49:10
パス名に空白入ってただけでした。死ねばいいのに
543デフォルトの名無しさん:2009/04/23(木) 00:37:29
>>541 それ有効なDのコードかどうかを判定する is か?
544デフォルトの名無しさん:2009/04/23(木) 01:15:50
std.rangeで使われてるね
545デフォルトの名無しさん:2009/04/23(木) 06:29:57
>>542
パスに空白入れると面倒そうなものは
%SystemDrive%dev\とかにぶっ込むと無難。
546デフォルトの名無しさん:2009/04/23(木) 12:54:19
>>541
is式の中にdelegateの呼び出しがあるのか?
どうなるコード?
547デフォルトの名無しさん:2009/04/23(木) 15:20:04
>>546
デジゲートの中身にセマンティクスエラーがなければtrue、さもなくばfalse。
548デフォルトの名無しさん:2009/04/23(木) 16:51:29
電子SFもののアニメかなんかに出てきそうだなw
549デフォルトの名無しさん:2009/04/24(金) 00:57:41
デジゲートを通って現れる"is構文チェック"や"文字列テンプレート"などの変態的コード軍団。
人類オブジェクトの全配列は、やつらに処理を移譲してしまうしかないのか……!
みたいな。寝よう。

いや違う。そんなことはどうでもいいんだった。
> /usr/local/src/phobos/std/stdio.d(511): Error: template std.format.formattedWrite(Writer,F,A...) does not match any function template declaration
コンパイラ最新に変えて普通に再コンパイルしたらこんなんが出た。え? これphobosのコンパイルエラー?
こっちのコードに責任があるにしても、エラーメッセージにはまったく登場しないもんでどこを修正すりゃいいのやらさっぱりだ。
対して調べてないけど今日はもう寝る。
550デフォルトの名無しさん:2009/04/24(金) 10:33:49
>>549
writefln(10)とか第一引数にフォーマット与えずに使ってるんじゃないの?
551デフォルトの名無しさん:2009/04/24(金) 11:59:36
writeflnは第一引数にフォーマット必須
writelnはフォーマットなし
ちゃんと使い分けするようになった
552デフォルトの名無しさん:2009/04/24(金) 15:53:11
D言語でC言語で作ったライブラリをスタティックリンクする方法ってありますか?
553デフォルトの名無しさん:2009/04/24(金) 16:18:42
>>552
dmdに引数で*.libなり*.aなり渡してやるか、pragma(lib)つかえば、
特に複雑なことをしなくてもリンクできるはずだが。
554デフォルトの名無しさん:2009/04/24(金) 16:40:02
うーん。
windowsでdmd2.0.26なんだけど
そのままだと Not a Valid Library File て怒られて、
coffimplibとやらで変換してもC側の関数をDから呼ぶと
undefinedになってしまう。
555デフォルトの名無しさん:2009/04/24(金) 16:44:19
そのC言語のライブラリがDMCで作ったやつならなんの問題もないと思うけど、
VCだとほぼ無理だしBCBだと形式に互換性はあるけどちょっと工夫しないとリンクできなかったと思う。
DLLにしてインポートライブラリ作るならどのコンパイラで作ったやつでもリンクできるはず。
556デフォルトの名無しさん:2009/04/24(金) 17:11:13
>>554
リンケージあわせてるか?
557デフォルトの名無しさん:2009/04/24(金) 19:24:46
rangeって結構期待してたが,結局統一できてるのは読み込みだけなんだな.
今後,insertとかも追加されたりするだろうか.
558sage:2009/04/25(土) 00:53:07
"helloworld"のサイズ比較をしてみた
dmd 2.029 --> 120k
gcc 4.3.3 --> 6k
20倍違うのね(;;)

dmd はビルドが速いっていいますけれども
どれくらい速いですか?
559デフォルトの名無しさん:2009/04/25(土) 01:01:32
Delphiと比較して遜色ない程度に速い。
560デフォルトの名無しさん:2009/04/25(土) 02:21:15
>559
ソースによっていろいろ変わってくるでしょうけれども例えばの話で、
gcc で 1時間 程掛かかる物が dmd だと 30分 程で済むという位ですか?
561デフォルトの名無しさん:2009/04/25(土) 03:32:03
>>560
と言うかC/C++言語は基本的にコンパイルがむちゃくちゃ遅いので恐らく比較にならんです。Cで1時間ならDで5〜6分くらいでは。
gdcと比較してと言う意味なら大差ないんじゃないでしょうか。
562デフォルトの名無しさん:2009/04/25(土) 03:43:03
Dで30分もかかるとなると、どれくらいの規模になるんだろう
563デフォルトの名無しさん:2009/04/25(土) 04:56:09
そんなに速い物なのですね。

Delphiをいろいろ調べてきました、ほとんどコンパイル(やビルド)に時間が掛からなくて
ほとんど、あっという間に終わるってかいてありました。
すごいです。

とても使いたいですけれども、ただ、仕様が安定していないのとライブラリが少ないのが痛いです。

(SDLライブラリを使用しようと、SDL1.2.13のヘッダーを手動で変換してたのですけれども途中で疲れました。
dmd用のを探したけれども古い物しか見つかず、ヘッダーをbit→bool変換しなくてはいけなかったりlibがWIN用でしかも
2種類あったりで?。ビルド時エラー連発になったので、どうせならと新しいのをソースから落としてきました(Linux))
564デフォルトの名無しさん:2009/04/25(土) 07:59:57
>563
>ほとんど、あっという間に終わるってかいてありました。
Linux環境だとGNUのldが足をひっぱるのか、OpenGLとかgtkとかでかいものを
使うと結構重くなる。勿論C++よりずっと速いのだけど、DelphiやC#並って意
味での快適さはないと思う。

>SDLライブラリ
http://dsource.org/projects/derelict/
svnで落として(svnはsvn.dsource.orgから)適当に自分に必要なリビジョンを
探して使うといい。

>仕様が安定していない
1.0系は安定してる。
http://www.digitalmars.com/d/1.0/changelog.html

>手動で変換
ある程度はhtodで
http://www.kmonos.net/alang/d/2.0/htod.html
565デフォルトの名無しさん:2009/04/25(土) 12:18:05
>>564
いろいろありがとうございました
ライブラリ、OpenGL関係もあって、めっちゃ感激でした。
566デフォルトの名無しさん:2009/04/25(土) 17:46:16
>>558
Dのが実行ファイルのサイズがでかいのはガベージコレクタが付いてるからで、
特に無駄なコード生成してるというわけではないです。
gccであってもC++でiostreamなんか使うと200KB超えるのであまり気にすることもないと思います。
567デフォルトの名無しさん:2009/04/25(土) 19:45:54
gcstubリンクするという裏技が
568デフォルトの名無しさん:2009/04/26(日) 17:41:50
なんかネタないの?
569デフォルトの名無しさん:2009/04/27(月) 01:37:23
>>568
新しいPhobos解説して
570デフォルトの名無しさん:2009/04/27(月) 21:33:30
>>569
解説って言ってもなあ…
なんか難解なとこある?
571デフォルトの名無しさん:2009/04/27(月) 22:36:48
>>570
どういうときに使うと便利なのか
とか
572デフォルトの名無しさん:2009/04/27(月) 23:59:25
そもそもDってどういうときに使うと便利なんだ
573デフォルトの名無しさん:2009/04/28(火) 00:06:59
バイナリ吐きたいけどC/C++はもうこりごりな時……とか?
574デフォルトの名無しさん:2009/04/28(火) 00:30:20
>>572
サクッと短いアプリ(スクリプトではなく)作ったり
とか
575デフォルトの名無しさん:2009/04/28(火) 00:38:22
軽くてシンプルなGUIライブラリがPhobosにあったらDだけで
生活できるんだがなぁ
576デフォルトの名無しさん:2009/04/28(火) 01:09:57
無いならば 作ってしまおう ライブラリ
577デフォルトの名無しさん:2009/04/28(火) 01:14:58
完成間近になったところで破壊的仕様変更ですね
578デフォルトの名無しさん:2009/04/28(火) 01:17:31
賽の河原かよ
579デフォルトの名無しさん:2009/04/28(火) 12:05:06
そろそろ標準GUIライブラリを決める戦争を始めようか・・・
580デフォルトの名無しさん:2009/04/28(火) 13:43:23
DWTはマルチプラットフォームで使い勝手もいいが、SWTの移植だしDの利点をいかしきれない。そして重い。
DFLはDっぽいコードがかけるしGUIで外観作れて使い勝手がよく軽いが、Winのみ。あと手の込んだものが作りにくい。

標準というにはどちらも惜しい感じだ…

gtkDとかwxDとかってどうなの?
581デフォルトの名無しさん:2009/04/28(火) 23:32:10
http://www.vimeo.com/4333802
Metaprogramming in D by Walter
582デフォルトの名無しさん:2009/04/29(水) 10:08:22
Win32API
583デフォルトの名無しさん:2009/04/29(水) 11:52:52
>>580 DFLでは手の込んだものが作りにくいとはどういうこと?
584デフォルトの名無しさん:2009/04/29(水) 11:57:24
DFLのようにせいぜい.NET Frameworkライクなライブラリならともかく
ベースになるライブラリが存在するgtkD/DWT/wxWidgetsを
標準にするなんてことができるのだろうか?
585デフォルトの名無しさん:2009/04/29(水) 12:00:49
あ wxWidgetsじゃなくてwxDか

せっかくDの標準にするんだったらDらしいのがいいね
586デフォルトの名無しさん:2009/04/29(水) 15:11:18
手の込んだものが作りにくいと言うのは、DWTと比べたとき、
DFLだけだとTableTreeとかCoolBarとか使えないから、そういうのは自分で作る必要があるってあたり。
そういうときはDWT使うけど、簡単なものはDFLの方が気軽に使えて好きだな。
587デフォルトの名無しさん:2009/04/29(水) 18:48:38
最新版DMDを入れたら自作のリストコンテナがコンパイル通らなくなった。
どうもforeachが上手くいかない
どうやらメソッドにfront()があるとおかしくなるみたいで、
いままでopApplyでぶん回してたのが、なにやらRangeループに展開されてしまうようだ
エラー内容が突っ込みどころ多すぎてもうぬるぽ

import std.stdio;
class Test {
int a = 3;
int opApply(int delegate(ref int) dg)
{
int result;
for (int i = 0; i < 3; i++) {
result = dg(a);
if (result)
break;
}
return result;
}
ref int front(){return a;}
}
int main() {
auto list = new Test;
foreach (it; list)
writefln("%d", it);
return 0;
}
↓↓↓
Error: no property 'empty' for type 'test.Test'
Error: no property 'popFront' for type 'test.Test'
588587:2009/04/29(水) 19:16:44
Rangeのforeach文に関わるのはfrontじゃなくてheadだし変だなって思って、
ttp://www.digitalmars.com/d/2.0/phobos/std_range.html を見たら
どうやらDMDはisInputRangeと勘違いしているようだ
うぉるたん勘弁してください><
589デフォルトの名無しさん:2009/04/29(水) 20:07:58
isInputRangeは

R r;             // can define a range object
if (r.empty) {}  // can test for empty
r.popFront;          // can invoke next
auto h = r.front; // can get the front of the range

これだけ満たしてないとtrueにならないようにしてくれないと困るということか
590デフォルトの名無しさん:2009/04/29(水) 20:09:22
DFLのイベントシステムはテンプレートを使って自分で
拡張できるようになっているから若干Dっぽいと言えなくもないんだ

でもまだ標準としては物足りないよね
591587:2009/04/29(水) 22:30:12
DMDのソース覗いたらこんなんなってた
#if 1
    { "Fempty", "empty" },
    { "Fhead", "front" },
    { "Ftoe", "back" },
    { "Fnext", "popFront" },
    { "Fretreat", "popBack" },
#else
    { "Fempty", "empty" },
    { "Fhead", "head" },
    { "Ftoe", "toe" },
    { "Fnext", "next" },
    { "Fretreat", "retreat" },
#endif

つまり
foreach (e; range)

for (auto __r = range; !__r.empty; __r.next) { auto e = __r.head;
だったのが
for (auto __r = range; !__r.empty; __r.popFront) { auto e = __r.front;
こうなったということか

foreachにコンテナ指定すると、出てくるときには空になってるだと・・・?
592デフォルトの名無しさん:2009/04/29(水) 22:56:54
>>591
rangeがForwardRangeならコピーをとってるから、foreachからでた後もrangeは同じ場所を指している。
ForwardRangeでないなら(たとえばソケットとか)、空になってしまうのは仕方ない。
593デフォルトの名無しさん:2009/04/30(木) 00:40:43
仕方ないって言っても・・・
コピーをしないでイテレートしたいケースもなんとかして欲しいっしょ
594デフォルトの名無しさん:2009/04/30(木) 16:01:36
>>593
いや、言ってること意味不明
595デフォルトの名無しさん:2009/04/30(木) 16:36:46
確かに何が言いたいのかわからん。

まあ、ForwardRangeでないRangeもラッパかぶせればForwardRangeにできるけれども。
596587:2009/04/30(木) 17:37:50
コピーをとるって、そのコンテナの要素に値を代入するときはどうするのかと
foreach (it; container)
はやめて
foerach (it; container.begin)
にすれば解決しそうだが、どうも納得いかないな
597デフォルトの名無しさん:2009/04/30(木) 17:44:19
>>596
Rangeをコピーしたときに複製されるのはビューなはずだが。
コピーに破壊的操作をすれば、コピー元も変化する。
598596:2009/04/30(木) 17:47:14
勘違いしてた、イテレータは関係ないじゃん
foreach (Iterator it; container) とやったときはイテレータループにすればいいんだ

問題は foreach (ref value; container) とやったとき
コピーしたやつを渡すとループ後に破棄されるからこまる
599デフォルトの名無しさん:2009/04/30(木) 18:03:52
Rangeとイテレータは全く別物なのだが…
600デフォルトの名無しさん:2009/04/30(木) 18:33:50
foreach前後でrangeの状態に変化してほしくない場合は、
コンテナ構造体の場合はコピーコンストラクタでRange状態をコピー元と別に持つようにして、
コンテナクラスの場合は、おとなしくコンテナとは別のオブジェクトをRangeとして実装しろ、
って感じ?
601デフォルトの名無しさん:2009/04/30(木) 18:51:57
そういう使い方ができるrangeはそもそもclassで実装すべきじゃない。
602デフォルトの名無しさん:2009/04/30(木) 19:07:05
boost::rangeでググってきた
RangeとはIteratorの開始点と終了点を持ったものらしい
利点はコンテナに対するアルゴリズムをそのまま使えるということ
D言語はRangeの前にコンテナを用意しろと
603デフォルトの名無しさん:2009/04/30(木) 19:41:58
>>598
> 問題は foreach (ref value; container) とやったとき
> コピーしたやつを渡すとループ後に破棄されるからこまる
containerのfront関数やpopFront関数の返値型を、
ref int front() というように参照返しにしてやればいいっぽいよ。
ref front()だとダメだった。
604デフォルトの名無しさん:2009/04/30(木) 20:39:27
コンテナくらい自分で作れよ… by Andrei
605デフォルトの名無しさん:2009/05/01(金) 00:55:28
foreach (val; container.range)

foreach (val; range(container))
で我慢するしかないか
606デフォルトの名無しさん:2009/05/01(金) 00:58:59
構造体で実装すれば何も悩む必要ない
607デフォルトの名無しさん:2009/05/01(金) 14:25:46
const(char)[]をconst(ubyte)[]にキャストしたいんだけど、どうすればいい?
cast(const(ubyte)[])使うと、うっかりconst書き忘れそう。
608デフォルトの名無しさん:2009/05/01(金) 17:48:45
もうここのやつらでコンテナ作ってウォルターに叩きつけようぜ
609デフォルトの名無しさん:2009/05/01(金) 19:11:16
const_cast
610デフォルトの名無しさん:2009/05/01(金) 19:12:09
途中送信

const_cast欲しいなぁ
Dがキャスト1つにしてる理由ってなんだっけ
611デフォルトの名無しさん:2009/05/02(土) 00:33:40
参考にするからエディタ・コンパイラVer等、開発環境を教えて
612デフォルトの名無しさん:2009/05/02(土) 03:16:05
2.029+サクラエディタ。
コンパイルツールは付属のmake使ったりとかしてる。dsssよくわかんねー。
613デフォルトの名無しさん:2009/05/02(土) 04:06:07
D2.028+サクラエディタ+mingw-make+バッチファイル+writelnデバッグ
中途半端なツールを使うくらいなら、使わない方がすっきりとしててわかりやすい。
まあ、VisualStudioぐらいしっかりとしたものなら別だが。

dmdのバージョンアップは、大きく変化したときは様子見。
安定してきたなと思ったらする。
614デフォルトの名無しさん:2009/05/02(土) 05:27:59
>>607
alias const(ubyte) cubyte;
const(char)[] x = "hoge".dup;
cubyte[] y = cast(cubyte[])x;
615デフォルトの名無しさん:2009/05/02(土) 06:28:16
>>614
cubyteを誤ってubyteと書く可能性があるから、根本的解決になってない。
616デフォルトの名無しさん:2009/05/02(土) 06:45:14
DMD2.025+xyzzy+コマンドプロンプトでmakeとかdmd -runとかだな。
IDEとかdsssとかは何度かチャレンジしてるけどダメだった。
617デフォルトの名無しさん:2009/05/02(土) 07:53:42
mutable, immutable, constを変化させずに型だけキャストできたら便利だな
618デフォルトの名無しさん:2009/05/02(土) 09:40:43
dmd1.043 + dsss(rebuild) + make + vim [linux/cygwin]
デバッガはgdb(cgdb)使ってたけど1.028かその辺でステップ実行できなくなり、
その後zerobugsを使ったけどフリー版が期限切れになり(それにクソ重い)、
結局ロギングコードを埋め込みまくるスタイルになった。
619デフォルトの名無しさん:2009/05/02(土) 10:24:20
>>615
お前の人生誤ってばかりだからな。
620611:2009/05/02(土) 10:26:50
IDEが上手くいかないの俺だけじゃなかったんだな
621デフォルトの名無しさん:2009/05/02(土) 10:43:13
dmd2.029 + Poseidon rev265 + ddbg

VSっぽく開発が進められて、なかなか安定感あると思う。なにより軽い!
でもPoseidonが参照返し関数があるモジュールの解析に
失敗して自動補完つかえなくなったりしてマズー
622デフォルトの名無しさん:2009/05/02(土) 10:49:08
gdc1(Rev246) + mingw-make + サクラエディタ。
GUIライブラリはwxD。
わかってたけどgdcユーザ少なそうだな。
623デフォルトの名無しさん:2009/05/02(土) 17:01:23
delegateオブジェクトが指すメンバ関数を所持しているオブジェクトを取得する方法ってありますか?
624デフォルトの名無しさん:2009/05/02(土) 17:05:49
>>623
.ptr
625デフォルトの名無しさん:2009/05/02(土) 17:25:59
誰かDとIDEとGUIをまとめてパッケージにしてくれ〜
626デフォルトの名無しさん:2009/05/02(土) 17:35:58
自分でやれよ
627デフォルトの名無しさん:2009/05/02(土) 18:11:33
Visual Dまだー?
628デフォルトの名無しさん:2009/05/02(土) 18:42:13
eclipseとか重くて使ってらんないからなぁ
629デフォルトの名無しさん:2009/05/02(土) 19:36:28
そもそもdmdって(改変)再配布ってありなの?
ソースはあるけどオプソじゃないよね?
630デフォルトの名無しさん:2009/05/02(土) 19:44:18
ライセンスはソースに同梱されてるものだと思うが
631デフォルトの名無しさん:2009/05/02(土) 19:44:24
>>629
バックエンドの再配布はできないから、
OSI的オープンソースではないね。
632デフォルトの名無しさん:2009/05/02(土) 22:14:51
dmd2.029 + nmake + emacs

>>624
623じゃないけどそんなのあるってすっかり忘れてた!
どうもありがとう!
633デフォルトの名無しさん:2009/05/02(土) 23:14:27
void Func(){
 byte Array[] = new byte[1024*1024*256];
 delete Array; // あってもなくても駄目
}

int main(){
 Func();
 core.memory.GC.collect();
 core.memory.GC.minimize();
 while(1){
  usleep(1);
 }
 return 0;
}

これでwhileの時点でFunc内で取得した256Mが開放されてないっぽいんだけど、この挙動は正しいのかな?mainの3行目でGCが開放すると想定してたんだけども。dmd2.025で確認。
634デフォルトの名無しさん:2009/05/02(土) 23:20:31
どう確かめたか知らんけど、足りなくなったらmmapし、ゴミ集め時はプールに戻すだけ。
635デフォルトの名無しさん:2009/05/03(日) 01:11:03
PowerShell使ってる人が一人ぐらいはいるだろう
俺は使ってないけど
636デフォルトの名無しさん:2009/05/03(日) 02:14:03
某スレでD言語にもconcept的なものがあるのにって言われているけど
そんなのあったっけ
template A(T) if (これのことか?) {}
637デフォルトの名無しさん:2009/05/03(日) 02:19:52
ごめん構文適当かもしれんw
638デフォルトの名無しさん:2009/05/03(日) 02:21:02
D言語開発者 FreeBSD移植の経緯を紹介
ttp://gihyo.jp/admin/clip/01/fdt/200905/01
639デフォルトの名無しさん:2009/05/03(日) 02:36:51
D言語でメモリを開放しようなどと考えないほうがいい・・・
640デフォルトの名無しさん:2009/05/03(日) 02:43:41
>>636
それであってる
省略した形でも勿論使えるので新しいPhobosでは積極的に使われてる
641デフォルトの名無しさん:2009/05/03(日) 02:46:55
だがDにはconcept_mapがない。
642デフォルトの名無しさん:2009/05/03(日) 02:53:25
そこで登場するのがこないだ実装されたalias thisだろう。
ラッパ構造体を作ってやればいい。
643デフォルトの名無しさん:2009/05/03(日) 03:06:09
それっぽいことやってるサンプルコード書いてみてくれん?
644デフォルトの名無しさん:2009/05/03(日) 03:07:21
>>643
それはどれに対するレス?
645デフォルトの名無しさん:2009/05/03(日) 03:21:14
>>643

const T min(const T x, const T y) if(isLessThanComparable!(T)) {
return x < y ? x : y;
}

template isLessThanComparable(T) {
enum isLessThanComparable = is(typeof(T < T));
}
646デフォルトの名無しさん:2009/05/03(日) 04:30:41
>>643>>641-642
647デフォルトの名無しさん:2009/05/03(日) 10:29:41
alias thisの使い道がよく分からない
継承っぽいよね、継承でよくないの?
648デフォルトの名無しさん:2009/05/03(日) 16:12:10
委譲だと思う
649デフォルトの名無しさん:2009/05/03(日) 17:26:50
ダイナミックキャスト専用のswitch文みたいなものが欲しい。
でかいオブジェクトツリーを辿って型別に処理を書く場合、
else ifでキャストを羅列するか、visitorパターンを使うことになるが、
前者はパフォーマンスが気になるし、後者はツリーの型を増やす拡張がやりにくい。
Dのキャストの実装を見たところ、classinfoとインターフェースを辿って比較してるだけなので、
switch文中でそれをマージして無駄のないジャンプを作ってくれれないかなぁみたいな。
650デフォルトの名無しさん:2009/05/04(月) 06:01:39
>>649
テンプレートを駆使してそれらしいものを作ってはみたが,毎度のごとくコンパイラのバグでコンパイルすらできなかった……orz
651デフォルトの名無しさん:2009/05/04(月) 07:42:30
>>649
ちょっと例文を頼む
本家にポストしてみるわ
652デフォルトの名無しさん:2009/05/04(月) 11:46:33
>>651
// こういうif elseがあったとして
if (auto c = cast(C)obj) { ... }
else if (auto b = cast(B)obj) { ... }
else if (auto a = cast(A)obj) { ... }

// 今はこういう処理になるはず
if (
foreach (cinfo; obj.classinfo_list) {
if (cinfo == C.classinfo) {
return obj;
}
}
// find interface ...
)
else if (
foreach (cinfo; obj.classinfo_list) {
if (cinfo == B.classinfo) {
return obj;
}
}
// find interface ...
)
653デフォルトの名無しさん:2009/05/04(月) 11:47:20
>>652 (続き)
// こういう記述で
type_switch (o; obj) {
case C: break;
case B: break;
case A: break;
}

// こういう感じに展開してくれるといいかなぁと。
void* p = cast(void*)obj;
switch (obj.classinfo_list.depth) {
case 3:
switch (obj.classinfo_list[2]) {
case C.classinfo: auto o = cast(C)p; break;
}
case 2:
switch (obj.classinfo_list[1]) {
case B.classinfo: auto o = cast(B)p; break;
}

case 1:
switch (obj.classinfo_list[0]) {
case A.classinfo: auto o = cast(A)p; break;
}
}
654デフォルトの名無しさん:2009/05/04(月) 14:50:21
>>652-653
念のためだが、classinfo_listはclassinfoのinterfacesとbaseをたどって作るrangeでいいんだよね?
655デフォルトの名無しさん:2009/05/04(月) 14:51:38
それとも内部構造?
656デフォルトの名無しさん:2009/05/04(月) 15:11:08
ふつうにclassinfoでswitchできればよくない?
switch(o.classinfo){
case C.classinfo: break;
case B.classinfo: break;
case A.classinfo: break;
}
新しい構文とか必要ないし、こんな感じの拡張の方が嬉しいな
657デフォルトの名無しさん:2009/05/04(月) 15:40:24
>>654
baseを辿って作るrangeか配列で。インターフェースはこの配列自体を
複数持たせるとかが必要かな・・・。クラスの階層を使ったswitchを
やめてただのループにすればbaseとinterfaceを混ぜた配列でいいと思うけど、
折角使えそうなものを使わないのも勿体ないかなぁと。

>>656
それのcaseをダイナミックキャスト相当にすると現存のコードが動かなくなるんでは。
あと、キャスト後の変数の宣言も一回で済ませられると便利かなぁと。
658デフォルトの名無しさん:2009/05/04(月) 15:43:25
>>656
ClassInfoの時だけセマンティクスが変わるのはよくない
659デフォルトの名無しさん:2009/05/04(月) 15:57:14
http://codepad.org/QzZrsxqF

> Internal error: toir.c 183
あばばばばば
660デフォルトの名無しさん:2009/05/04(月) 16:53:22
>>657
oの型はそれぞれのcaseで決めるということは、

switch (o; obj)
{
    case C:
    case B: break;
    case A: break;
}

この場合は
    case C:
    case B:
はそれぞれ展開するのかな?
テンプレート展開的に考えるとfall throughするルールとのマッチが一番難しいかも。

interfaceを交ぜると複数マッチするケースがかなり面倒なので、
基本的にはclass一本かなという気もする。

ひとまず、template展開で作れるか考えた方がいい気がするのでポスト中断。
661デフォルトの名無しさん:2009/05/04(月) 17:05:55
template展開で作れたとしてもnativeで対応した方が良いのは確かだと思う。
あと予約語増やしてやって欲しい。
type_switch(o; obj){
  case C: break;
  case B: break;
  case A: break;
}
あと以下も実装して欲しいかも?
type_switch(i; 10){ // 一番狭いものにマッチ、型は変えない(fall through対策)
  case int: break; // int.min 〜 int.max
  case long: break; // long.min 〜 int.min-1, int.max+1 〜 long.max
}
662デフォルトの名無しさん:2009/05/04(月) 17:44:18
>>660
fall throughは考えてなかった。fall throughさせると変数宣言が
曖昧になるので、caseの後ろに変数宣言をつけられるようにするとかかな。
type_switch (obj) {
case C:
case B, b: break;
case A, a: break;
}
663デフォルトの名無しさん:2009/05/04(月) 19:42:28
fall throughを考えるとswitch構文は向いてない希ガス
これでよくね?

static void delegate()[ClassInfo] typeMap = [A.classinfo:A_func, B.classinfo:B_func];
auto dg = obj in typeMap;
if (dg) (*dg)();
void A_func(){}
void B_func(){}
664デフォルトの名無しさん:2009/05/04(月) 20:20:04
>>663
それだとAの派生クラスCを作ったときにtypeMapも更新しなくちゃいけないよね?
665デフォルトの名無しさん:2009/05/04(月) 21:59:15
なんのためのコンパイルタイムリフレクションだと思ってるんだよ。
666デフォルトの名無しさん:2009/05/04(月) 22:09:53
baseクラスへのキャストが考慮されてないし、typeMapを複数作りたかったら
無条件の登録はできないわけで、リフレクションがあったって大して変わらんかと。
667デフォルトの名無しさん:2009/05/04(月) 22:46:56
ケースの数nに対して、O(n)オペレーション必要になるが、>>659みたいなのでいいんじゃないかね。
668デフォルトの名無しさん:2009/05/06(水) 16:40:05
また (new A).method(); を new A.method(); と書きたいと言ってる人がいる
669デフォルトの名無しさん:2009/05/06(水) 19:13:48
いっそA.new.method()と書きたいなぁ
670デフォルトの名無しさん:2009/05/06(水) 21:18:52
それなんてRuby?
671デフォルトの名無しさん:2009/05/06(水) 22:39:27
AutoHotKeyいじってるんだけど
これ使えば好きなエディタを使ってIDEで使いたい機能のほとんど実装できそう
インテリセンスも辞書引きも、デバッガ呼び出しも
コード解析してdotにクラス図描いて表示も、クラスビューも
頑張ればほとんどの事が出来そうな気がする
672デフォルトの名無しさん:2009/05/07(木) 01:19:41
言い出しっぺの(ry
673デフォルトの名無しさん:2009/05/07(木) 02:44:38
dmd2.029を使ってコンパイルしたDLLをCのプログラムからLoadLibrary()すると
WinXP環境ではLoadLibrary()が失敗する。
Win7RCならいけたからたぶんVistaでもいける気がする。
DのプログラムからDで作ったDLLを読むとWinXPでも成功する。

GetLastError()で取り出したエラーコードは998(メモリロケーションへのアクセスが無効です)。

わけがわからん。。。。
674デフォルトの名無しさん:2009/05/07(木) 03:20:03
GCまわりじゃねえの
675デフォルトの名無しさん:2009/05/07(木) 04:03:33
win7でいけるのがおかしいのかもよ
676デフォルトの名無しさん:2009/05/07(木) 18:24:38
>>668
むしろカッコがないほうが気持ち悪いよな。
C#だと、
new A().MethodOfA();
が通って
(B)a.MethodOfB();
が通らないのが気持ち悪くて、わざわざカッコを書いちゃう。
677デフォルトの名無しさん:2009/05/07(木) 19:27:00
dsssを使ってるんですが、
Could not detect versions
ってなんでしょうか。
Descentを使ってやると上記のエラー文が出てくるんです。

最初は¥がだめなんだと思ってたんですが、違ってたようで、
コマンドラインでスラッシュに変えて打っても
DSSS config error: unrecognized line '[D:/d/main.d]'.
と出ます。
どうしやったらコンパイル通るんでしょうか?
678デフォルトの名無しさん:2009/05/07(木) 19:31:31
>>676
new Class.Method;を認めるならこんなんも認めることになるかな
new Module.Class.Method();
new Class.StaticInnerClass.Method();

あとDではこれってどうなるべきなんだろう
new StaticClass.StaticInnerClass.Method();
679デフォルトの名無しさん:2009/05/07(木) 19:41:08
DSSSは使ってみようとしたもののエラー出てから使ってないので
680デフォルトの名無しさん:2009/05/07(木) 21:04:07
>>677
ドライブレターを削って相対パスにしてみるとかプロジェクト
ファイルとソースを同じパスになるようにしてみたらどうだろ。
681デフォルトの名無しさん:2009/05/07(木) 23:18:05
新しいdsssだとだめだった用です。
1個古いやつで試したらあっさり動きました。

お騒がせしました。
682デフォルトの名無しさん:2009/05/08(金) 23:33:34
Poseidonの最新版ktkr
パース失敗するバグが直ってた!
683デフォルトの名無しさん:2009/05/09(土) 02:32:41
スクリーンショット付きでブログにて紹介してくれたら素晴らしいと思うw
684673:2009/05/09(土) 02:49:08
やっと原因がわかった!
DLL_PROCESS_ATTACHで前のサンプルようにgc_init()とか書いてたけど、
新しいサンプルにあるようにRuntime.initialize()するようにしたら問題なく
ロードできた。

サンプルなんて変わってないだろーとチェックを怠っていた凡ミスだ。。。
685デフォルトの名無しさん:2009/05/09(土) 17:16:14
前から謎だったんだけどstd.openrjって誰か使ってるの?
686デフォルトの名無しさん:2009/05/09(土) 17:16:49
それは言ってはいけない
687デフォルトの名無しさん:2009/05/09(土) 21:05:18
じゃあstd.demangle使ってる人は?
688デフォルトの名無しさん:2009/05/09(土) 21:20:19
標準ライブラリにも準標準ライブラリがあってだな・・・
689デフォルトの名無しさん:2009/05/09(土) 21:25:04
std.demangle微妙すぎない?
なんでデマングルだけなの?
マングル化も
690デフォルトの名無しさん:2009/05/09(土) 21:57:50
ウォルたん作も思いつきで作ったようなやつが多いからな。
Phobosで信頼できるのはAlexandrescu先生の作品だけだぜ!
691デフォルトの名無しさん:2009/05/10(日) 02:05:58
>>689
mangleofを忘れて貰っちゃ…
692デフォルトの名無しさん:2009/05/10(日) 03:17:00
>>691
そんなのあったなぁ…。
プロパティかぁ。
693デフォルトの名無しさん:2009/05/10(日) 08:41:22
static importをメインに使っていきたいんだけど
自動的にstatic importされるmoduleの書き方とかないの?
694デフォルトの名無しさん:2009/05/10(日) 08:51:27
>>693
…なぜstatic importをメインに使っていこうと思ったのか詳しく
695デフォルトの名無しさん:2009/05/10(日) 23:36:02
static import 使ってないけど、完全修飾にはした方が読みやすいのか?
とは思うな。
std.とかはいらないにしても 俺ライブラリの関数ぐらいは。
696デフォルトの名無しさん:2009/05/10(日) 23:46:36
改名importでよくない?と思う
697デフォルトの名無しさん:2009/05/11(月) 01:03:55
1つの関数だけをモジュールから改名importして
それ以外をそのままの名前で全部importする方法が欲しいんですけど
import std.stdio : p = writeln;
import std.stdio;
これすると衝突・・・しないじゃないか
なんてこったい
でもwritelnという名前は残ってしまうのはなんとかなりませんか
698デフォルトの名無しさん:2009/05/11(月) 09:51:06
void writeln(T...)(T args) {
assert(false, "muripo");
}
699デフォルトの名無しさん:2009/05/11(月) 12:07:49
static assert
700デフォルトの名無しさん:2009/05/11(月) 12:51:42
できないですか
いい構文も思いつかないです
701デフォルトの名無しさん:2009/05/12(火) 15:39:42
import std.stdio : !writeln;

みたいに…
702デフォルトの名無しさん:2009/05/12(火) 19:26:46
703デフォルトの名無しさん:2009/05/12(火) 22:05:38
すげーことするねw
704デフォルトの名無しさん:2009/05/12(火) 22:31:23
なんかちょっと見ないうちに黒魔術度が深刻化しつつあるような
705デフォルトの名無しさん:2009/05/13(水) 02:46:07
わけわからんw
706デフォルトの名無しさん:2009/05/13(水) 06:49:49
なんかLispのマクロみたいになんでもできそうだなw
707デフォルトの名無しさん:2009/05/13(水) 07:21:05
いったんテンプレート内でimportしてから選別して輸出するのか。
こんなことできるんだなー。
708デフォルトの名無しさん:2009/05/13(水) 19:40:28
Version D 2.030   May 11, 2009
New/Changed Features

    * added -vtls compiler switch
    * classic global storage now defaults to TLS (Thread Local Storage). This is a big change, see Migrating To Shared.
    * std.algorithm: added minPos. Improvements to Splitter suggested by Brad Roberts.
                     Splitter now is bidirectional.
                     Also Splitter has one extra trailing element if it ends with a separator.
                     Added variadic arguments for setUnion and setIntersection.
                     Added functions setSymmetricDifference and largestPartialIntersection.
                     Improved BinaryHeap's interface and implementation.
    * std.array: Improvements to Appender. Now it works with string and other immutable-element arrays, and accepts ranges in put().
    * std.format: added raw specifier for reading
    * std.range: Added iota with two arguments. Added FrontTransversal and Transversal.
    * std.stdio: added File.byChunk
    * std.traits: Added isImplicitlyConvertible.
    * std.tuple: Added Tuple.opComp.
    * Folded in compiler changes by Unknown W. Brackets to support Solaris.
    * added .typeinfo to ClassInfo Bugzilla 2836: Navigate from ClassInfo to TypeInfo
709デフォルトの名無しさん:2009/05/13(水) 19:41:46
bug fixたくさん
710デフォルトの名無しさん:2009/05/13(水) 21:28:33
>classic global storage now defaults to TLS
おお凄い。来てるな未来。
マゾも狂喜w
711デフォルトの名無しさん:2009/05/13(水) 22:50:46
        *'``・* 。
        |     `*。
       ,。∩      *    もうどうにでもな〜れ
      + (´・ω・`) *。+゚
      `*。 ヽ、  つ *゚*
       `・+。*・' ゚⊃ +゚
       ☆   ∪~ 。*゚
        `・+。*・ ゚
712デフォルトの名無しさん:2009/05/13(水) 23:31:17
これだからD追っかけはやめられない
713デフォルトの名無しさん:2009/05/13(水) 23:42:17
互換性完全無視なのが、うぉるたんって感じだな。
なんというか自分のコードを対応させることを考えるとわくわくしてきたぜ
714デフォルトの名無しさん:2009/05/13(水) 23:57:49
やはり時代は並列プログラミングか。

でも、今回は大した互換性の崩れはなさそうだな。
715デフォルトの名無しさん:2009/05/14(木) 00:59:12
同期処理ってもっとコンパイラに頑張って支援してもらえないのかな
716デフォルトの名無しさん:2009/05/14(木) 01:24:39
おそらくsharedに対しては自動で同期する機能は入るだろう
717デフォルトの名無しさん:2009/05/14(木) 01:24:45
日本初のD言語利用商用サイト作りたいんで早く安定してくれないかな
718デフォルトの名無しさん:2009/05/14(木) 01:42:07
>>717
・・・むりぽ
719デフォルトの名無しさん:2009/05/14(木) 01:52:54
>>717
v1でがまん
720デフォルトの名無しさん:2009/05/14(木) 10:18:29
>>714
static int hoge;
static int* fuga = &hoge;
みたいなのが通らなくなってたのが互換性の崩れかな。
他のは何も考えず__gsharedしてしまえば昔と同じ(バグも同じ)か。

>>715
配列演算もまだ最適化できていない(むしろ遅い)んで、なんとも……
721デフォルトの名無しさん:2009/05/14(木) 14:31:30
int i[3];

i = i[] + 5; // 遅い
foreach(ref u;i) u = u + 5; // 同程度に遅い
i[0] = i[0] + 5; i[1] = i[1] + 5; i[2] = i[2] + 5; // 早い

配列長は分かってるんだから展開してほしいが……
722デフォルトの名無しさん:2009/05/14(木) 17:23:28
そこでstatic foreach…
723デフォルトの名無しさん:2009/05/14(木) 18:12:30
どの程度の長さの配列まで展開すればいいのかね
724デフォルトの名無しさん:2009/05/14(木) 19:15:40
コンパイルオプションで。
-array=256とか。
725デフォルトの名無しさん:2009/05/14(木) 20:07:26
CTFEとかで展開する方が今は早いってことかね
726デフォルトの名無しさん:2009/05/14(木) 21:39:34
CTFEでインラインアセンブラのコードを作って、文字列mixin
727デフォルトの名無しさん:2009/05/15(金) 04:10:57
展開する関数作ろうと思ったけどインラインアセンブラまでわからんのでやめとくw
728デフォルトの名無しさん:2009/05/15(金) 06:55:30
SSEなどに展開することと、
ループ用の処理のフットプリントを考えれば、
まあ4、8までは黙って展開していいと思う
729デフォルトの名無しさん:2009/05/15(金) 07:26:22
実行時型情報をキーとする連想配列を組みたいのだが、

int[TypeInfo] typehash;
typehash[typeid(int)] = 1;

これを

typehash[int] = 1;

みたいにするにはどうしたらいいのだろう。
TypeInfoはClassInfoにしようかなとは思っているが。
730デフォルトの名無しさん:2009/05/15(金) 09:04:26
それは意味解析的に無理だろ。

typehash.get!intとかで我慢するしかない。
731デフォルトの名無しさん:2009/05/15(金) 22:49:26
まあ、この前の動的型情報に基づくswitchと同じようなもんを目指してはいます。
switchの代わりにhashを使うという方法で。
732デフォルトの名無しさん:2009/05/15(金) 23:07:31
>>728
並列化の実装はとりあえずOpenMPに投げてしまってはどうでしょう。
デフォルトならばコア数で配列を分割するよう指示。
必要に応じてコンパイラオプションで分母の値を設定することも可能、とか。
733デフォルトの名無しさん:2009/05/16(土) 10:54:15
Source for the D.NET Compiler is Now Available - InfoQ
http://www.infoq.com/news/2009/05/D-Source
734デフォルトの名無しさん:2009/05/16(土) 16:25:32
数年ぶりに見に来たらD言語がよく分からないことになっていた
C言語で止まってる俺には理解できないw
735デフォルトの名無しさん:2009/05/16(土) 18:43:20
組み込みのstringがあって、配列が便利で、typedefとaliasの使い分けができるCと考えても問題はない
736デフォルトの名無しさん:2009/05/16(土) 19:07:00
コンパイル爆速は重要である
737デフォルトの名無しさん:2009/05/16(土) 19:11:50
ちょっと便利なCとして使うのは楽かな。
738デフォルトの名無しさん:2009/05/16(土) 22:14:56
>>735-737
まとめすぎ
739デフォルトの名無しさん:2009/05/16(土) 23:57:49
お前らがDで一番好きな機能を教えて
740デフォルトの名無しさん:2009/05/16(土) 23:59:07
よければその機能の便利な使い方とかも
741デフォルトの名無しさん:2009/05/17(日) 00:16:29
>>739
配列関係の仕様全部。
長さの情報を他の変数で記憶しておかなくて良いし、連結も演算子ひとつでOKだし、部分抽出もコピーも楽ちん。
C++使ってた頃STLのvectorとstringとmap使いまくってたもんで、
それとほぼ同等の機能を言語仕様として取り込んでくれてる点も素晴らしい。
742デフォルトの名無しさん:2009/05/17(日) 00:55:18
クラスが常に参照で、構造体と区別されてるのが一番好きかな。簡単で。
GCがあって、scope文があって、'->'じゃなくて'.'に統一されてて、
っていう周辺機能があってこそだけど。
743デフォルトの名無しさん:2009/05/17(日) 01:00:58
コンパイル爆速は重要である
744デフォルトの名無しさん:2009/05/17(日) 01:01:02
質問です
C/C++と比べて、D言語に大きなデメリットはありませんか?
いい加減C++に疲れてきたから優れているというD言語学んでみようと思ってます
745デフォルトの名無しさん:2009/05/17(日) 01:24:57
>>744
GCに完全に依存しきったコードを書かなければならないこと。
よって、マイコン用のプログラムには不向き。
746デフォルトの名無しさん:2009/05/17(日) 01:37:05
>>744
・IDEとかの開発環境が微妙。
・ライブラリなんかはやっぱC/C++の充実っぷりが最強。
・コンパイラやライブラリにバグがあったり。
・バージョンアップでコンパイル通らなくなったりする。

まあ、最後のデメリットはさいきんあんまないし、あってもだんだん喜びに変わっていくんだぜ。
まとめると言語そのものはいいけど周辺と実装がやっぱなー、みたいな感じだ。個人的には。
747デフォルトの名無しさん:2009/05/17(日) 01:38:12
開発環境はVCに比べたら微妙だけどUNIX-Cと比べるならたいして差はない
748デフォルトの名無しさん:2009/05/17(日) 04:34:20
うぉるたんがカッコイイOS作れば流行るんじゃね?
Objective-Cみたいに
749デフォルトの名無しさん:2009/05/17(日) 04:42:12
かっこいい
Digital Mars D-OS
750デフォルトの名無しさん:2009/05/17(日) 04:49:58
アップデートの度に当然のごとくアーキテクチャや標準ライブラリに修正が入り、
全てのアプリケーションをコンパイルし直すどころかコードを書き直さなければならない。
751デフォルトの名無しさん:2009/05/17(日) 04:56:16
そして、さっぱり使い道のわからないシステムコールが巨万とあるんですよね
752デフォルトの名無しさん:2009/05/17(日) 08:48:53
ver.7 くらいになったらさすがに安定するんじゃないの?
753デフォルトの名無しさん:2009/05/17(日) 11:17:38
GCと例外のおかげで自然なコードが書けるのが一番嬉しい。
もう関数呼び出しの度に結果用バッファを用意したり、
毎回戻り値をチェックしてエラーだったら何返そうかなんて考えるのは嫌だお
でもタイプセーフなのがいいし、ランタイムもできればないほうが嬉しいんだお


あと関係ないけどJava7からプロパティもクロージャも外されて超がっかりだお……
754デフォルトの名無しさん:2009/05/17(日) 18:28:25
D言語の64bit変数ってビングエンディアンなの?
ulongをStream.writeBlockで出力したらビッグエンディアンだった件
755754:2009/05/17(日) 18:40:51
どうみても勘違いでした。スマソ
756デフォルトの名無しさん:2009/05/17(日) 22:37:54
このような、エンディアンの問題にしても、仕様としてversionで分けられるように考えられているところが好み。
Cでも定石で簡単に分けられるけど、言語仕様としてこういうのが入ってるのがいい。
757デフォルトの名無しさん:2009/05/17(日) 23:47:31
ささやかだがtypedefで初期値を与えられるのがいい
配列作るときに重宝する
758デフォルトの名無しさん:2009/05/18(月) 14:35:51
クラス名をコンパイル時にstringとして得る方法ってありましたっけ
759デフォルトの名無しさん:2009/05/18(月) 14:40:00
.stringof?
760デフォルトの名無しさん:2009/05/18(月) 14:47:44
ありがとうございました。できました。
本当はモジュール名込みでほしいのだが、まあ動くのでよし
761デフォルトの名無しさん:2009/05/18(月) 17:26:20
>>760
this.classinfo.name
762デフォルトの名無しさん:2009/05/18(月) 19:13:13
>>761
.classinfoがランタイムにしか取れんのです
ClassName.classinfo.nameは静的に決まっていてもいいはずなのにランタイム扱いなので、
実行時にclassinfoを取って比較したいのにできなくて困っていたという。
763デフォルトの名無しさん:2009/05/18(月) 19:38:03
>>762
コンパイル時の話か。
ごめんね、ちゃんと読んでなかった。
764デフォルトの名無しさん:2009/05/19(火) 23:34:46
struct A {
int x;
int opCmp(A o) {
return x - o.x;
}
}
int main() {
A[2] a;
a[0].x = -1;
a[1].x = 1;
a.sort;
assert (a[0] < a[1]);
return 0;
}

これのassertが落ちるんだけどバグ?
765デフォルトの名無しさん:2009/05/19(火) 23:42:10
バグに見える。
766デフォルトの名無しさん:2009/05/20(水) 10:02:28
-2になってtrueってわけではないのかなぁ。
最近、ROMってるだけじゃわからんくなってきたなぁ。
767デフォルトの名無しさん:2009/05/20(水) 11:46:35
javascript風のイベント処理を書こうとしたら、
なんか違うものになってた。車輪の再発明っぽい
コンパイル時にアップキャスト可能か調べたりできたっけ?


class ObjectDispatcher {
        struct Socket {
                void function(in Object passed) callback;
        }
        private Socket[const ClassInfo] socket;

        void append(T)(void function(in T obj) cb) {
                if(cast(void function(in T obj)) cb)
                        socket[T.classinfo] = Socket(cast(void function(in Object obj))cb);
        }
        void exec(in Object obj) { socket[obj.classinfo].callback(obj); }
}

class onClick {}
class onKeyDown {}

void main() {
        auto x = new ObjectDispatcher;
        x.append = function void(in onClick e) { writeln(e.classinfo.name, "+"); };
        x.exec(new onClick);
        x.append = function void(in onKeyDown e) { writeln(e.classinfo.name); };
        x.exec(new onKeyDown);
}
768デフォルトの名無しさん:2009/05/20(水) 11:49:16
そういえば、下手な-inlineよりpureな関数の最適化の方が速いことがあるな
769764:2009/05/20(水) 15:42:38
書いたやつだとopCmpが一度も呼ばれてなかったみたい。
で、いろいろやってみたら const int opCmp(ref const (A) o) { hogehoge; } にしないといけないらしい、面倒だ…
自己解決で申し訳ない。
770デフォルトの名無しさん:2009/05/21(木) 17:45:41
>>767 よくわからない
771デフォルトの名無しさん:2009/05/21(木) 18:48:23
>>770
> コンパイル時にアップキャスト可能か調べたりできたっけ?
の話は、コンパイル時にテンプレートやstatic ifで受け取った型があるクラスの派生かどうかを調べたい、というものです。
std.traits.BaseTypeTupleのうちから特定のクラスを探すには……というので簡単な方法があればいいのですが、
なければ自分で作るのかなと。
772デフォルトの名無しさん:2009/05/21(木) 19:02:12
>>771
is使えば出来るだろ。
773デフォルトの名無しさん:2009/05/21(木) 19:21:32
is ( : )
っすね。すっかり忘れていましたorz
774デフォルトの名無しさん:2009/05/21(木) 23:39:17
isXxxxxx templateにしたほうがいいかもな
ややこしいのは自分様用に
775デフォルトの名無しさん:2009/05/22(金) 00:09:18
なんだ自分様用ってwごめんw
じぶんよう^H^Hようなんだ・・・・
776デフォルトの名無しさん:2009/05/22(金) 02:09:22
久々に触ってみたら構造体のthisがリファレンスになっとるんだね
普通に使ったら値型なのにコレはキモチワルイw
777デフォルトの名無しさん:2009/05/22(金) 12:33:40
thisは参照!ってことだね
778デフォルトの名無しさん:2009/05/23(土) 01:46:00
静かだ…
779デフォルトの名無しさん:2009/05/23(土) 22:11:13
D/CLIまだー?
780デフォルトの名無しさん:2009/05/23(土) 23:16:58
まず標準ライブラリだろうに
781デフォルトの名無しさん:2009/05/24(日) 02:04:14
CLIになれば.NETが使えるよ
782デフォルトの名無しさん:2009/05/24(日) 03:07:54
.NETが使えれば本格的なGUIライブラリがあるからさ
783デフォルトの名無しさん:2009/05/24(日) 05:09:56
C#のポジションじゃなく、使いやすいC++/CLIというポジションなら、ありかもしんない。
784デフォルトの名無しさん:2009/05/24(日) 12:14:46
Dの時代はあと何年後に訪れますか?
785デフォルトの名無しさん:2009/05/24(日) 12:20:43
RubyのようにD言語にとっての海外コミュである日本から盛り上げるしかあるまい
786デフォルトの名無しさん:2009/05/24(日) 14:55:53
久しぶりにD触ったんだけど過去に作ったの全部コンパイル通らなくなってた\( ^ o ^ )/
1.x系は安定してる?
破壊的バージョンうっぷは2.x系のみ?
そろそろ1.x系で自作アプリをごにょごにょ作っても大丈夫?
787デフォルトの名無しさん:2009/05/24(日) 15:12:54
作るなら2.xで作ったほうが、D言語の旨味に浸れる
788デフォルトの名無しさん:2009/05/24(日) 16:37:30
おまえらホントMだな
789デフォルトの名無しさん:2009/05/24(日) 21:13:22
1.x用を後々2.x用に直すことを考えながら作るくらいなら
もう最初から2.x専用で作った方が楽だ
790デフォルトの名無しさん:2009/05/24(日) 21:23:33
Javaだって今時は1.4無視してJ2SE5.0以降用に書くのが普通だからな
PHPだって5.2以降じゃないと動かないスクリプトたくさんあるし
過去のバージョンにも対応させる必要はないと思う
791デフォルトの名無しさん:2009/05/24(日) 21:29:06
ちなみに>>786の昔のコードって1.xどころかもっと前のでは?
だったらDではコンパイルできなくて当然
792デフォルトの名無しさん:2009/05/24(日) 21:34:13
template eval(string code) {
version(D_Version2) mixin(code);
else mixin(convert_for_d1(code));
}
793デフォルトの名無しさん:2009/05/24(日) 23:27:00
>767
D2の std.signals の再発明っぽいね。

あと3か月でD2の仕様を固めるらしい。
http://lists.puremagic.com/pipermail/digitalmars-d/2009-May/057124.html
794デフォルトの名無しさん:2009/05/24(日) 23:50:20
そしてD 3.0へ
795デフォルトの名無しさん:2009/05/24(日) 23:54:07
std.rationalはまだですか。
多倍長整数型はあるのに有理数型がないなんて。
796デフォルトの名無しさん:2009/05/25(月) 00:32:31
gdcどうなったん?
797デフォルトの名無しさん:2009/05/25(月) 00:41:35
>>796
メンテナンスする人いなくて止まってる。
798デフォルトの名無しさん:2009/05/25(月) 08:28:42
>>784 D2の時代なら3ヶ月後だそうです
D3を作り始める原因になる最大の破壊的変更はなんだろう
799デフォルトの名無しさん:2009/05/25(月) 10:29:19
ソースが長くなってくるとファイルサイズもどんどん大きくなってくる
C#で作ったソフト移植してみたけど比較にならないくらいでかくなった
800デフォルトの名無しさん:2009/05/25(月) 10:33:10
>>798
メニーコア・・だったらいいなと思う
801デフォルトの名無しさん:2009/05/25(月) 11:46:49
>>799 なんでかな
802デフォルトの名無しさん:2009/05/25(月) 14:25:00
>>789
2007のカンファレンスでの内容としていまだ無いのっていったら
構造体のinterface継承、macro、暗黙変換の演算子オーバーロード、DTL
とかかな?ほかにも面白そうな機能まだ残ってるけど
803デフォルトの名無しさん:2009/05/25(月) 14:46:02
ライブラリかなあ。なんだかんだ言っても.NETは強力。
804デフォルトの名無しさん:2009/05/25(月) 14:47:05
>>802
以前からチマチマ話題に出しているコンテキストに応じた名前の選択がないかな
enum E { A, B, C};
void f(E e);
f(E.A); ← 現在は完全な修飾が必要
f(A); ← こうしたい

まあ言語としてはだいぶ洗練されてきたが、
標準ライブラリの弱さがどうしてもなあ。
JavaほどでなくていいがCよりは充実させてほしい
805デフォルトの名無しさん:2009/05/25(月) 16:00:50
>>804
別々enum同士で同じ名前が定義できなくなりそうだ。C++みたいに。
806デフォルトの名無しさん:2009/05/25(月) 16:01:45
なんで?
807デフォルトの名無しさん:2009/05/25(月) 16:10:33
関数引数で列挙型要求されてるときに実引数として列挙型定数を渡す場合、
型名を修飾しなくていいようにしてほしい、って話だろうな。
C++のように常に修飾が要求されないのは気持ち悪い気がする。
808デフォルトの名無しさん:2009/05/25(月) 16:46:46
>>806
関数がオーバーロードされていればそうなるかと

enum D { A, B, C};
enum E { A, B, C};
void f(D d);
void f(E e);
f(A);
809デフォルトの名無しさん:2009/05/25(月) 16:47:09
>>806
enum E1 { A, B, C }; enum E2 { C, D, E, F };
void f(E1 e); void f(E2 e);
f(C);
これが曖昧になるって話だと思う。

もっとも、そーゆー曖昧なケースではエラーにすりゃいいだけだと思うんだが。
810デフォルトの名無しさん:2009/05/25(月) 17:35:38
型推論さえあれば万事解決
811デフォルトの名無しさん:2009/05/25(月) 20:23:08
>>809
その手の名前の衝突は列挙子のメンバに限らず、モジュールレベルでも起きうることだから、
今更とりあげて問題視すべきこととは思わない。
812デフォルトの名無しさん:2009/05/25(月) 21:10:25
そうだなー
Overload Setsもあるし全く問題ない
でも必要性をあまり感じないな
813デフォルトの名無しさん:2009/05/25(月) 21:11:05
814デフォルトの名無しさん:2009/05/25(月) 23:01:48
dsource繋がらないっす
ドメイン変わった?
サーバ落ちた?
815デフォルトの名無しさん:2009/05/26(火) 00:40:06
OpenMPみたいなのを言語レベルで対応とかしたらすげーな
816デフォルトの名無しさん:2009/05/26(火) 00:49:54
>>813
逆に場当たり的に作られてきた“標準”ライブラリの多さにビビるな
817デフォルトの名無しさん:2009/05/26(火) 09:52:45
andreiが各種コンテナについて言及してないのが気になる
あってほしいが、他をやって3ヶ月でいけるかな?
818デフォルトの名無しさん:2009/05/26(火) 12:49:45
流石に誰か作ってるだろう?
819デフォルトの名無しさん:2009/05/26(火) 12:56:50
A 「流石に誰か作ってるだろう?」
B 「流石に誰か作ってるよね?」
C 「流石に誰か作ってるだろ常識的に考えて」

結果誰も作ってませんでしたパターンがありそうで怖い
820デフォルトの名無しさん:2009/05/26(火) 13:05:24
listとあと何が必要?
可変長配列(vector)って組み込み以外に必要なのかな
821デフォルトの名無しさん:2009/05/26(火) 14:23:43
queueとstack、あとはsetみたいな木構造タイプのコンテナとか?
mapとhash(unordered)は連想配列で足りるな
822デフォルトの名無しさん:2009/05/26(火) 17:28:26
list, queue, stack, deque, set, hash_set
あたりを全部組み込み型にしちゃえばいいんじゃないかな!
ライブラリでは不可能な最適化を行い、最高のパフォーマンスを提供します!みたいな。
823デフォルトの名無しさん:2009/05/26(火) 17:33:31
>>822
ライブラリでは不可能な最適化って具体的にどんな?
824デフォルトの名無しさん:2009/05/26(火) 18:14:36
それ適当に言っただけだと思うけど
825デフォルトの名無しさん:2009/05/26(火) 18:43:13
>>823
VC++でソートの性能を自作したのとSTLで比べたら、圧倒的な差をつけてSTLが勝ったことがある。
なんでか調べたら、C++では標準ライブラリを特別扱いして最適化することを認めてるとかそんな理由だった気がする。
だから漠然とだけど組み込み型の方が速くなる可能性あるのかな、と思ってたけど違うのかな?
826デフォルトの名無しさん:2009/05/26(火) 19:15:40
ちょっと待って
mapとhashとsetの区別はしてる?
827デフォルトの名無しさん:2009/05/26(火) 22:53:48
invariantな連想配列はどう作るのでしょうか
828デフォルトの名無しさん:2009/05/27(水) 01:20:58
>>827
普通に作ってassumeUnique
829デフォルトの名無しさん:2009/05/27(水) 12:56:51
二つのrangeのハミング距離を求める関数が欲しいんだけど、標準であったっけ?
830デフォルトの名無しさん:2009/05/27(水) 13:06:23
>>828
ありがとうございました。

>>829
std.algorithmで見た気がする
831デフォルトの名無しさん:2009/05/27(水) 23:27:03
D始めようと思ってるんですが、コンパイラ何使ってますか?
ちなみにXPとUbuntuです
832デフォルトの名無しさん:2009/05/27(水) 23:42:37
>>796-797らしいからdmd一択じゃね。
バージョンの話なら、2もそろそろ破壊的変更がなくなるらしいから、これから1をつかう理由もないかと。
833デフォルトの名無しさん:2009/05/27(水) 23:47:27
ちょくちょく貼られてるD.NETも忘れないでください
実用度の程は知らんが
834デフォルトの名無しさん:2009/05/28(木) 00:03:52
QtD 0.2 release announcement.
835デフォルトの名無しさん:2009/05/28(木) 12:09:22
>>832
どうもです
dmd入れてみます
836デフォルトの名無しさん:2009/05/28(木) 15:20:33
D.NETもコンパイラはdmdなのでは
837デフォルトの名無しさん:2009/05/28(木) 15:37:32
dmdが.Netのニーモニックはけるの??
838デフォルトの名無しさん:2009/05/28(木) 16:21:32
llvmだな、llvmがjavaとdotnetのvmコード吐けばいい
839デフォルトの名無しさん:2009/05/28(木) 16:43:03
バーチャルマシーンの上でさらにバーチャルマシーンが動くのか。。。
なんかすごいことになってるなぁ。
840デフォルトの名無しさん:2009/05/28(木) 23:10:34
ひさしぶりにD言語使おうと思ったらDSciTE無くなってるCode::Blocksにするか・・・
841デフォルトの名無しさん:2009/05/28(木) 23:13:54
>>840
今WinのCodeBlocksでDバイナリ作るとexe吐く際に異常終了扱いされるバグが出てるんだが、
もしかしたら俺だけかもしれないので試してみていただきたい。
842840:2009/05/28(木) 23:46:30
>>841
Hello worldしたけど問題なかった

> dmd.2.030 & codeblocks-8.02
> import std.stdio ;
> int main(char[][] args){
> printf("hello world\n");
> return 0;
> }
843デフォルトの名無しさん:2009/05/28(木) 23:56:56
ありがとう。
自分の環境だと2台のマシン(Vista&XP)両方でそうなるのだが、まあがんばってみるわ
844デフォルトの名無しさん:2009/05/29(金) 01:42:07
ttp://tinyurl.com/candcpp2d (C/C++に疲れた人のD言語)
すいませんがまたアドレス変わりました
845デフォルトの名無しさん:2009/05/29(金) 23:50:50
ldc 0.9.1 released
846デフォルトの名無しさん:2009/05/29(金) 23:53:16
The release 0.9.1 of LDC, the LLVM based compiler for the D programming
language, contains the following major improvements:

* lots of bug fixes (http://www.dsource.org/projects/ldc/report/15)
* x86-64 support is mature
* inline asm improved (we now define D_Inline_Asm)
* cross-compilation support
* uses boehm-gc during compilation (x86-32 only)
* D specific optimizations:
* turn GC allocations to allocas if possible
* simplify or remove certain calls to D runtime functions
847デフォルトの名無しさん:2009/05/31(日) 00:04:43
sharedで詰まったのでちょっと翻訳

*sharedへの移行

dmd version 2.030より、静的データおよびグローバルデータの記憶クラスが、以前のグローバルデータセグメントからスレッドローカル記憶域(thread local storage (TLS)))に変更されました。
引き続き、ほとんどのDのコードは変更無しで、そのままコンパイルするだけで正常に実行できますが、いくつかの問題が発生します。

**TLS変数の実行速度

TLS変数への読み込みや書き込みは以前のグローバル変数よりも遅くなります。
しかしLinuxでは、少なくとも、PIC ((position independent code)生成設定のコンパイラを
使用してのグローバル変数へのアクセスよりは、TLSはわずかに早くなります。
いったいどのように対処すればよいのでしょうか?

-グローバル変数の仕様を最小限にします。
グローバル変数の仕様を抑えると、コードのモジュール化と保守性を改善できますので、
これは価値のある目標です。
-グローバル変数をimmutableにします。
immutableなデータには同期の問題が発生しないので、コンパイラはTLSに配置しません。
-グローバル変数への参照をキャッシュします。
グローバル変数のローカルなキャッシュを作成し、オリジナルではなくキャッシュされた値に
アクセスすると、キャッシュがコンパイラによってレジスタに割り付けられた場合には特に、
速度は向上します。
-__gsharedを使っちゃう
848デフォルトの名無しさん:2009/05/31(日) 00:06:58
TLS変数の特定

まず始めに、すべてのグローバル変数を探し出して、それぞれの配置を再検討します。
ソースコードの複雑さにも寄りますが、グローバル変数を特定するのは
いつも簡単であるとは限りません。
グローバル変数の宣言は暗黙である(あった)ために、grepする方法がありません。
グローバル変数をすべて確実に探し出すのは困難です。

そこで、新しいdmdコンパイラでは -vtls スイッチが追加されました。
スイッチ付きでコンパイルすると、デフォルトでスレッドローカル記憶域に配置されるようになった
すべてのグローバル変数の一覧が出力されます。


immutableへの移行

immutableなデータは、一度だけ初期化され、決して変更されることはありません。
これは、マルチスレッドで同期の問題が起こらないので、immutableなデータをTLSに
置く必要がないことを意味します。
コンパイラは、immutableなデータをTLSではなく古いグローバルに配置します。

sharedとしてマーク

複数のスレッドで共有されることになるグローバルなデータは、sharedキーワードで
マークされるべきです

849デフォルトの名無しさん:2009/05/31(日) 00:09:49
shared int flag;

これによって、flagが古いグローバルに配置されるだけではなく、共有される型にもなります。

int* p = &flags; // エラー, flags は shared
shared(int)* q = &flags; // ok

sharedの属性はconstやimmutableのように推移的になります。

__gsharedでごにょごにょ

時には、上記の解決策が適用できない場合もあるでしょう

-Cコードとのインターフェースで古いグローバルを使用する
-とりあえず動けばいいんだ、元に戻してくれ、後で修正するから
-このアプリはシングルスレッドのみ。共有の問題は発生しない
-とにかく最高のパフォーマンスを
-すべての同期問題を自分で処理したい

Dはシステム言語なので、もちろんこういうことを行う方法があります。
記憶域クラス__gsharedを使用してください
850デフォルトの名無しさん:2009/05/31(日) 00:11:03
コンパイルエラー

TLSに関して最もよく発生するコンパイラのエラーは:

int x;
int* p = &x;

test.d(2): Error: non-constant expression & x

これは古いグローバルでは動作しますが、TLS変数では動作しません。
TLS変数はリンカやローダーのいずれもメモリ中の配置位置を知り得ないのが理由です。
実行時に値が計算されます。

解決策は、こういったものは静的コンストラクタで初期化するようにすることです。

リンクエラー

グローバル変数についてのリンカから出る奇妙なエラーメッセージに遭遇することがあります。
これはほとんどの場合、あるモジュールでは変数がTLSに配置され、
他のモジュールでは同じ変数が古いグローバルに配置されるのが原因です。

これは、以前のバージョンのdmdで生成されたライブラリをリンクしたときに発生します。libphobos2.aが適切に最新版になっていることを確認してください。

また、これはCとのインターフェイスでも発生します。
Cは、TLS宣言をサポートしていても、グローバル変数はデフォルトで古いグローバルに配置されます。
対応するDの宣言とCの宣言が、TLSか古いグローバルかが一致しているかどうかを確認してください。
851デフォルトの名無しさん:2009/05/31(日) 00:50:08
852デフォルトの名無しさん:2009/05/31(日) 11:49:49
>解決策は、こういったものは静的コンストラクタで初期化するようにすることです。
これでいけた。
853デフォルトの名無しさん:2009/06/02(火) 11:58:09
キーワードが増加するのは見ていて清々しいぜ
854デフォルトの名無しさん:2009/06/02(火) 12:18:04
機能に見合った数だけのキーワードは必要だよな。
C++0xとかきもすぎ
855デフォルトの名無しさん:2009/06/02(火) 19:07:09
invariantとimmutableが意味的にかぶるのが好きじゃないなあ。
856デフォルトの名無しさん:2009/06/03(水) 04:14:58
被るって言うか同じじゃないのけ?
857デフォルトの名無しさん:2009/06/03(水) 09:40:15
こうなる予定かと
alias immutable(char)[] string;
class A{
invariant{}
858デフォルトの名無しさん:2009/06/03(水) 12:45:56
その辺D3ではばっさり変更しそうだけどD2でも変更入るのかな
859デフォルトの名無しさん:2009/06/03(水) 15:31:26
Dが.netに乗っかったてマジすか?
860デフォルトの名無しさん:2009/06/03(水) 23:50:49
>>857
StorageClassとしてのimmutableは、invariantと等価な実装になってるらしいw
861デフォルトの名無しさん:2009/06/04(木) 01:15:30
>>860 今のところはね
862デフォルトの名無しさん:2009/06/04(木) 01:36:41
>>860
違う。記憶域クラスはimmutable、不変性契約がinvariant。
記憶域クラスとしてinvariantが使えるのは一時的な措置だろう。
863デフォルトの名無しさん:2009/06/05(金) 05:55:29
std.xmlを使いたいのですがアンドレイたんが変えたいと言っているので手が出せません><
864デフォルトの名無しさん:2009/06/05(金) 05:59:09
コンテナで思い出したがring bufferを標準に組み込んでるのってあまり見ないよね
865デフォルトの名無しさん:2009/06/05(金) 12:42:02
tynixmlとか
866デフォルトの名無しさん:2009/06/05(金) 16:31:01
Interfaceにどうにかして標準の実装を与えるトリックを考えているのだが、
staticならaliasでどうにかなるが、普通のクラス関数を作るにはどうにかできないかな
配列を第一引数に取る関数をプロパティ化するようなトリックがどうだかとか


void static_fun() {}

interface I {
        alias .static_fun static_fun;
}
867デフォルトの名無しさん:2009/06/05(金) 17:07:53
<妄想>

こういう糖衣構文が欲しい

interface Hoge { void blah(); }
template HogeBase() { void blah() { /* */ } }

class MyHoge : Hoge, HogeBase!() { }
// class MyHoge : Hoge { mixin HogeBase!(); } と等価

</妄想>
868デフォルトの名無しさん:2009/06/06(土) 01:34:11
>>866
なんでクラス or 抽象クラスにしないんだ

>>867
目的がわかんね
869デフォルトの名無しさん:2009/06/08(月) 02:48:20
>>867
インターフェイスがデフォルト実装を持つと、vtblがぐちゃぐちゃになって、
多重継承を禁止している理由に反するから、そういう機能が標準で入ることはないだろう。
870デフォルトの名無しさん:2009/06/08(月) 03:27:50
>>868
多重継承するから

>>869
継承禁止でつけられないかなと思うのよね
仮想関数の引数を固定して呼ぶだけ、みたいなマクロ的用途で欲しいことが
871デフォルトの名無しさん:2009/06/08(月) 03:36:35
>>870
んー確かに

継承ツリーの最上位でメンバメソッドがfinal指定されていると、
仮想関数でなくなって静的に解決できるようになるから、仮想関数テーブルの問題はなくなるね。

あとは、名前の衝突だけど、これは普通に複数のインターフェイスを実装する場合にでも
起こりうることだから、C#みたいにどのインターフェイスを実装するのか明示できるようにして欲しいね。
872デフォルトの名無しさん:2009/06/08(月) 12:00:18
>>870
ああ,多重継承の代わりのmixinをもっと便利に使いたいってか

>>871
C#ってどうやって明示するのん?

こういう呼び分けは可能だろうか
interface A{void f();}
interface B{void f();}
class C:A,B{
 void f() override A{} // 模擬コード
 void f() override B{} // 模擬コード
}
A a = new C;
a.f();//A.f();
B b = new C;
b.f();//B.f();
873デフォルトの名無しさん:2009/06/08(月) 13:41:46
>>872
C#ではこうやって実装する。

class C: A,B{
 void A.f() {} // 明示的な実装
 void f() {} // 明示的でない実装
}

名前を同じくする明示的でない実装は高々一つしか存在してはいけない。
そして、明示的な実装はインターフェイス型にキャストしないと見えない。

(new C()).f == B.f
((A)new C()).f == A.f
((B)new C()).f == B.f
874デフォルトの名無しさん:2009/06/09(火) 01:34:02
そういうことが可能なわけね
875デフォルトの名無しさん:2009/06/11(木) 20:43:25
  イ`ヘ
 /: :| ヽ
/ : :/  ヽ ___   _,,,:. .-: :´彡フ
_ノ\_∠: : : : : : : : :`: :-: :,:_:/彡 /
      ( : : : : : : : : : : : : : : `ゝ  /
  マ  r::/: /: : | : : : : : : : : ::\ /
      //: /: : : |: : | |: : |: _: : : :ヽ
  ジ  {/ 7|`\/i: /|:|/|´: : : : :|ヽ
     〉 ,‐-‐、`|7 || |_::|,_|: : :|:::|: |
  で / r:oヽ`    /.:oヽヽ: :|: | :|
     { {o:::::::}     {:::::0 }/: :|N
  っ  | ヾ:::ソ     ヾ:::ソ /|: : |
 !? ヽ::::ー-.. /ヽ ..ー-::: ヽ::| r--ッ
-tヽ/´|`::::::::::;/   `、 ::::::::::: /: i }  >
::∧: : :|: |J   \   /   /::i: | /_ゝ
. \ヾ: |::|` - ,, ___`-´_ ,, - ´|: : :|:::|
   ヽ: |::|\     ̄/ /|  |: : :|: |
876デフォルトの名無しさん:2009/06/13(土) 09:35:39
877デフォルトの名無しさん:2009/06/13(土) 16:06:05
変態が本書いちゃったのかwwww
D終わったな
878デフォルトの名無しさん:2009/06/13(土) 20:15:44
むしろ始まったんダヨ
879デフォルトの名無しさん:2009/06/14(日) 02:48:51
ミックスインメタプログラミングとかを駆使した変態テクニックがいっぱい載ってるんだろうなぁ
880デフォルトの名無しさん:2009/06/14(日) 04:03:51
コンストラクターは
this(){
}
で宣言できるんだな。
c#だったら
classの名前と同じ名前で宣言してたけど
thisで宣言できるとこっちのほうがわかりやすくていいな。
881デフォルトの名無しさん:2009/06/14(日) 05:01:02
templateがある言語はclassごとにコンストラクタが異なっているといろいろめんどくさいんじゃなかったっけ
882デフォルトの名無しさん:2009/06/14(日) 05:01:42
>>879 案外普通のD言語教本だったりして
883デフォルトの名無しさん:2009/06/14(日) 06:00:27
んで和訳はいつ出るのかなワクワク
884デフォルトの名無しさん:2009/06/14(日) 14:47:31
コンストラクタを表すならthisよりnewの方が自然だったんじゃないかとよく思う
885デフォルトの名無しさん:2009/06/14(日) 15:23:17
アロケータも記述できるようにするなら、
コンストラクタがthisでアロケータがnewな現状でいいと思う。
886デフォルトの名無しさん:2009/06/14(日) 15:25:19
>>884

this() {
this(default_value);
}

this(value) {
...
}

ってのができるので、newだと気持ち悪い、と思った。
887デフォルトの名無しさん:2009/06/14(日) 15:34:30
コンストラクタがthisなのは美しいと思うよ
888デフォルトの名無しさん:2009/06/14(日) 16:21:23
なんかコンパイル通らんと思ったらstd.random変わってたのか
889デフォルトの名無しさん:2009/06/14(日) 16:52:47
コンストラクタをクラス名にしたC++が変態、諸悪の根源。
890デフォルトの名無しさん:2009/06/14(日) 18:03:42
テンプレートが入った時点で変更すべきものだったんだろうけどC++には無理だろうな。
そんなのはヲルたん一人でなんでも決められるDだからできること。
891デフォルトの名無しさん:2009/06/14(日) 23:33:15
>>883
訳本を待ってる間に仕様が変わってる予感
892デフォルトの名無しさん:2009/06/15(月) 00:54:11
それをいうなら、英語版ですら、出版されるまでに仕様が変わってる予感
893デフォルトの名無しさん:2009/06/15(月) 01:05:14
仕様が固まる予定が3ヵ月後で、本が出るのが5ヵ月後か
これがスケジュール通りいくなら、最新の情報で校正して出してくれるかもね
894デフォルトの名無しさん:2009/06/15(月) 02:54:04
一ヶ月ごとに改訂して再版します!!
895デフォルトの名無しさん:2009/06/15(月) 03:55:44
このDってやつはc/c++を超えて(別に越えなくてもいいけど)時代が来る?
896デフォルトの名無しさん:2009/06/15(月) 04:49:35
来るんじゃない
俺たちがするんだ
897デフォルトの名無しさん:2009/06/15(月) 04:50:34
C/C++の代替にはならない
DのライバルはJavaやC#
898デフォルトの名無しさん:2009/06/15(月) 04:53:15
たかがGC
そういう時代がくればいいが
899デフォルトの名無しさん:2009/06/15(月) 04:54:21
GCなんてあって当たり前
ってことね
900デフォルトの名無しさん:2009/06/15(月) 05:14:10
なるほど参考になった。じゃあrubyとかややろうと思ってたけどDやってみるわ
901デフォルトの名無しさん:2009/06/15(月) 05:28:43
rubyのほうがメジャーじゃん、と思いつつも、
さっくりひっくりかえせる力はあるような気がする
902デフォルトの名無しさん:2009/06/15(月) 05:29:19
参考になったならいいんだが
どこが参考になったのかw
903デフォルトの名無しさん:2009/06/15(月) 05:32:47
正直Dに一番近いのはObjective C++な希ガス
904デフォルトの名無しさん:2009/06/15(月) 05:33:45
まちがえた
Objective Cか。Objective C++もあるけど
905デフォルトの名無しさん:2009/06/15(月) 05:35:13
そういえばtemplate shared_ptr(T)ってみたことないな
GCが嫌なんだったらまずはこれを作ってみたらいいのでは。
一時オブジェクトの破棄がスイープまで起こらないことが問題になるような
シビアなコードを本当にC++で書く人なんてまれだろう
906デフォルトの名無しさん:2009/06/15(月) 05:40:34
あれ?deleteしてもGCにマークされるまでメモリ解放されないんだっけ?
907デフォルトの名無しさん:2009/06/15(月) 12:07:15
deleteはデストラクタを呼んで空き領域としてマークするだけ。
オブジェクトが一つフリーになったからといってメモリは解放できない。
908デフォルトの名無しさん:2009/06/15(月) 14:38:46
Dはメモリ開放はできない!!!

そういえばGC持ってるとそこがいいらしいけどなんで?
909デフォルトの名無しさん:2009/06/15(月) 15:00:03
>>908
一度使ってヒープに戻すよりも再活用するほうが色々リーズナブルみたいだ。
910デフォルトの名無しさん:2009/06/15(月) 15:15:31
いや、メモリはOSから塊で貰ってきて、切り分けて使うものだから、
オブジェクト一つを破棄しても、メモリを解放できるとは限らない。

それは、Cのmalloc/freeや、C++のnew/deleteでも同じ話。
911デフォルトの名無しさん:2009/06/15(月) 15:42:50
なるほど
じゃあGCがあるからC++の代わりにはならないというのはデマなんだ
912デフォルトの名無しさん:2009/06/15(月) 16:41:56
かと言ってGCによる開放時にデストラクタが呼ばれる保証ってのも確かないんだよね
DのGCってなんの意味があんの?
913デフォルトの名無しさん:2009/06/15(月) 16:53:13
>>912
いや、GCが解放するときデストラクタは呼ばれるぜ。
GCが解放してくれるっていう保証がないだけw
914デフォルトの名無しさん:2009/06/15(月) 20:49:36
Javaでファイナライザのあまりの使えなさに絶望したけどDもそうなのか
絶望した
915デフォルトの名無しさん:2009/06/15(月) 20:57:54
GCの実装に長けた人がD言語製作に加わってくれれば・・・
916デフォルトの名無しさん:2009/06/15(月) 21:01:20
デストラクタ/ファイナライザ周りでは.NETがよくできてるから、見習って欲しいなあ。
917デフォルトの名無しさん:2009/06/15(月) 23:18:35
scopeクラスでどうにかこうにか
でも、局所で使う以外は面倒だ
918デフォルトの名無しさん:2009/06/15(月) 23:59:32
をるたん曰く「GCは本来OSカーネルが提供するべきもの」
919デフォルトの名無しさん:2009/06/16(火) 00:02:09
KILLされることまで考慮すればデストラクトされる保証なんてできないってか!
920デフォルトの名無しさん:2009/06/16(火) 00:09:16
スコープ外れた時用のデストラクタと
参照カウントが0になった時用のデストラクタと
スイープされた時用のデストラクタがあればいいんだ
921デフォルトの名無しさん:2009/06/16(火) 00:13:42
誰かGCのデストラクタ呼び出しを保証できない理由を三行ぐらいで頼む。
922デフォルトの名無しさん:2009/06/16(火) 00:24:44
メモリに余裕があれば
わざわざGCする
必要がないから
923デフォルトの名無しさん:2009/06/16(火) 00:52:42
さんくす
924デフォルトの名無しさん:2009/06/16(火) 01:26:04
なにか誤解されているような気がするので…
GCが保証されていないってのは、アプリケーションの正常終了時のこと。
メモリが不足したらGC走ってデストラクタ呼ぶのは当然として、
終了時に確実にデストラクタがよばれることがなぜか仕様上定められていない。
実際には最近のdmdでは呼ばれるっぽい?
925デフォルトの名無しさん:2009/06/16(火) 06:47:03
そもそも全てのオブジェクトをGCで回収できないからだろう。
invariantオブジェクトは破壊してはいけないことになってるし。
926デフォルトの名無しさん:2009/06/16(火) 09:36:58
>>918
DOSクルー
927デフォルトの名無しさん:2009/06/16(火) 18:00:19
GCがOSに統合されたら、メモリ管理がハードウェアでサポートされたり、
オブジェクトの移動が仮想メモリ下に隠蔽されたりとかするんだろうか
928デフォルトの名無しさん:2009/06/16(火) 18:06:14
でも移植性考えると世の中のOSが全部GC詰んでくれないと手間が増えるだけだよね。
929デフォルトの名無しさん:2009/06/16(火) 18:13:54
高速化のためには手間かけても良いと思う。
あとLinux辺りにはGC実装したいという利害関係が一致した人が居る予感。
930デフォルトの名無しさん:2009/06/16(火) 19:22:44
931デフォルトの名無しさん:2009/06/17(水) 11:44:20
>>925
それでも非invariantオブジェクトは破壊して解放するのを保証して欲しい
932デフォルトの名無しさん:2009/06/17(水) 11:57:32
モジュールのstaticデストラクタで破壊してくれたらいいじゃないのかなあ
破壊順はstaticコンストラクタの逆順でいいじゃん
933932:2009/06/17(水) 13:01:53
意味不明なことを言ってしまった希ガス
934デフォルトの名無しさん:2009/06/17(水) 15:02:59
GCモジュールがデストラクトされるときに,GCが把握してるオブジェクトを全部破壊すればいいんじゃない?異常終了とか対応するのは面倒くさそうだけど
935デフォルトの名無しさん:2009/06/17(水) 15:45:59
面倒だなあ
訳わかんないからCGとかなくていいよ!
936デフォルトの名無しさん:2009/06/17(水) 18:01:12
激しく一般化されたCLRってとこか。
937デフォルトの名無しさん:2009/06/17(水) 18:01:50
この手の面倒臭い話が解決しない限り
C/C++は生き残り続ける
938デフォルトの名無しさん:2009/06/17(水) 18:08:41
DだってC/C++の資産を全部再利用できるわけじゃないし。駆逐は無理じゃね。
そもそも完全に駆逐された言語ってのも少ない気がするけどなあ。
一般的にって話じゃなくて、このスレ住人で、とか自分の中で、って話なら同意。
939デフォルトの名無しさん:2009/06/17(水) 19:33:02
COBOLとか現役でたくさん使われてるらしいね。
一回業界で根付いたものは、システムとともに長生きするんだろうな。
940デフォルトの名無しさん:2009/06/17(水) 19:39:37
ALGOLはもう廃れたかな?
941デフォルトの名無しさん:2009/06/17(水) 19:44:31
今年でCOBOL生誕50周年だけど、
数年前ガートナーによれば、全世界で稼働してるソフトウェアは
ソースコードにして3100億行で、そのうちの2000億がCOBOLらしいよ。
そして新たに年間50億行書かれてるというから恐ろしい。
942デフォルトの名無しさん:2009/06/17(水) 19:58:47
COBOLもFORTLANもLISPも世界的には現役
楽に綺麗に書ける言語とはまた別
943デフォルトの名無しさん:2009/06/18(木) 19:31:08
D言語久しぶりに触ろうと思ったらいろいろありすぎてワラタ

D1.0 + Phobos
D1.0 + Tango
D2.0 + Phobos
D2.0 + Tango

どれ使うべき?あとIDEとGUI Libraryは何を使うべきかな?
944デフォルトの名無しさん:2009/06/18(木) 20:16:27
D2.0 + Tango これはまだないようなものでは
945デフォルトの名無しさん:2009/06/18(木) 20:19:04
IDEとGUIライブラリは特にこれといったものはないかも
946デフォルトの名無しさん:2009/06/18(木) 20:31:48
andreiはQTとDWTをおすすめしているね
947943:2009/06/18(木) 20:48:25
>944
http://dusers.dip.jp/modules/wiki/?Libraries%2FQtD
じゃ、これなに?w

ってかまだ標準がないのかw何年かかるんだろうなぁ…

とりあえずIDEはAnjutaかDescentかな、GUIはQt使いたいがリファレンスどう?
948デフォルトの名無しさん:2009/06/18(木) 21:19:07
目的によるから何とも言えないな。
とりあえずD2.0+Phobos(新機能目当て)かD1.0+Tango(保守性重視)だと思うけど
D2.0+Tangoは、trunkから引っ張ってくれば使えたバージョンもあった(が、今は無理臭い。)
949デフォルトの名無しさん:2009/06/18(木) 21:22:49
訂正。trunkじゃなかった。svnリポジトリのbranchで実験的なやつだった。
950デフォルトの名無しさん:2009/06/18(木) 21:38:32
>948
とりあえずクロスプラットフォームで動くネイティブGUIアプリをD言語で作りたい。「D言語で」ってのが重要、C++で作るのがもっとも適しているのは承知済み。

なんでD1.0使うべきなんだろうが、PhobosよりTangoの方がいいの?まだバージョン1.00になってないみたいだが…
951デフォルトの名無しさん:2009/06/18(木) 22:27:46
どうせD3.0でもまた標準ライブラリ一から作り直しだろ
その時にTangoも1.0になるんじゃないの
952デフォルトの名無しさん:2009/06/18(木) 23:38:51
class KeyType {
 // 連想配列絡みのメソッドは全てconst
 const override hash_t toHash() {return 1;}
 const override int opCmp(Object o) {return 0;}
 const override bool opEquals(Object o) {return 0;}
}

int[KeyType] table;
int[const(KeyType)] c_table;

void put(KeyType key) {
 c_table[key] = 1; // OK
 table[key] = 1; // OK
}
void c_put(in KeyType key) {
 c_table[key] = 1; // OK
// table[key] = 1; // NG
}

この一番下の奴は通るようにしたら何か不味いことでもあるのかな?
何となく通っても良さそうな気がするけど
953デフォルトの名無しさん:2009/06/19(金) 00:59:24
>>947
> じゃ、これなに?w
これなにって...ないってことじゃないか
954デフォルトの名無しさん:2009/06/19(金) 16:21:00
>>952
> void c_put(in KeyType key) {
>  c_table[key] = 1; // OK
> // table[key] = 1; // NG
> }

typeof(key) == const(KeyType)

955デフォルトの名無しさん:2009/06/19(金) 18:41:42
>>954の意図がさっぱりわからんのだが
>>952の趣旨に合ってる?
956デフォルトの名無しさん:2009/06/19(金) 19:15:53
putの方のc_table[key]が通るのが意外だけど、意味を考えれば別にいいのか。
c_putの方のtable[key]は、constが暗黙に非constにキャストされるような感じなのがダメなのかな。
957デフォルトの名無しさん:2009/06/19(金) 20:15:05
opIndexでindexに変化を起こす実装が作れる可能性もあるんでない?
958デフォルトの名無しさん:2009/06/19(金) 20:33:56
>>955-956
おまえらが何を悩んでるのかわからんが、Tがmutable型のとき
Tからconst(T)へは変換できるが、const(T)からTへの変換はできない。
それだけの話だろ。

いかなる場合でも、これに例外を設けると、それが抜け道となってconst-correctnessが崩壊する。
959デフォルトの名無しさん:2009/06/19(金) 20:40:51
>>954は要するに型が違うからコンパイル通らないことを指摘してるので趣旨に合ってる

まあそれは仕様として当然の事ではあるけど、
こういう場合は特例として暗黙にconst外ししてくれてもいいんじゃね?と思った
というのも、以下のようなクラスを作っててはたと困ったもので

class A {
 private int[KeyType] table;
 /// keyを保持しているか調べる
 /// keyがconst(KeyType)なのでコンパイル通らない
 bool hasKey(in KeyType key) {
  return key in table;
 }
 void methodA() {
  foreach (key, ref value; table) {
   // keyの非constなmethodBの呼出し結果をvalueに保管する処理
   value = key.methodB();
  }
 }
}

・hasKey()のinを取ると連鎖的に全ての箇所でconstが使えなくなる
・tableのkeyをconst(KeyType)にするとmethodA()の処理が行えない
・table.keysとは別にもう一つの非constな配列でも持てば解決できるけど何というか無駄な気がして気分悪い

でも
>いかなる場合でも、これに例外を設けると、それが抜け道となってconst-correctnessが崩壊する。
やっぱりこれだよなぁ…
960958:2009/06/19(金) 21:00:07
>>959
連想配列のopIndexAssignはキーが存在しない場合、キーと値のペアを格納するからダメだけど、
opIndexやopIn_rなら既存のキーと引数で与えられたキーを比較するだけだから、
const(KeyType)を受け付けるべきだと思うよ。

この場合、KeyTypeにbool opEquals(const(Object))のオーバーロードが必要になるが。
961デフォルトの名無しさん:2009/06/19(金) 21:07:51
いっそのこと、foreach(k, v; )と.keysを廃止してしまえば…
962952=959:2009/06/19(金) 21:09:20
この板ID出ないのね

>この場合、KeyTypeにbool opEquals(const(Object))のオーバーロードが必要になるが。
ああ、なるほど
しかしそれは今のObjectには存在しないから追加したとしたらopEquals(Object)をオーバーロードしてる全てのクラスに修正が必要になってきて

ごめんなさい
俺が悪かったです
963デフォルトの名無しさん:2009/06/19(金) 21:22:57
==の左辺がconstなら右辺もconstであるべきだとは思うけどねえ
964デフォルトの名無しさん:2009/06/19(金) 21:38:34
ん?そうなるとopEqualsとかをオーバーライドするときは出来るだけconstつけた方がいいのか
さもないとconstにした途端比較できなくなる
965デフォルトの名無しさん:2009/06/19(金) 21:43:09
class MyClass {

  int value;

  const override bool opEquals(Object o) {

    auto t = cast(const(MyClass)) o;

    return t && t.value == this.value;

  }

}

このぐらいやれば何の問題もあるまい
966デフォルトの名無しさん:2009/06/19(金) 21:55:49
そもそも、Object->const Objectは変換できるわけだから、

const bool opEquals(const Object)

だけがあればいいんじゃないの?
967デフォルトの名無しさん:2009/06/19(金) 21:56:55
const func();ってfunc();をオーバーライドできるの?
968デフォルトの名無しさん:2009/06/19(金) 22:14:12
出来るみたい
逆はちゃんとエラーになったからたぶんきっと仕様
969デフォルトの名無しさん:2009/06/20(土) 02:01:28
元コードがphobosで書いてあって、そこからphobosとtangoの両方に対応したいんだけど、
なんか参考になるページとかない?
970デフォルトの名無しさん:2009/06/20(土) 02:12:09
悪いことは言わないからそんなことやめとけ
どうしてもというなら一からTangoで作り直せ
971デフォルトの名無しさん:2009/06/20(土) 02:41:22
>>969
まず、標準ライブラリをラップするライブラリから作ることになるよw
まじでやめといた方がいい。
972969:2009/06/20(土) 03:09:59
はぁ、やっぱそうなるかなぁ。使いたいと思ったらtangoのみ対応ってライブラリばっかりだし。
標準入出力からして全然違うとかもう勘弁して欲しいわ・・・
973デフォルトの名無しさん:2009/06/20(土) 04:29:48
>>969
tangobosってのがあった気がする。
今も使えるかは知らない。
974デフォルトの名無しさん:2009/06/20(土) 04:32:11
druntimeなってから、そういうのいらないんじゃないの
975デフォルトの名無しさん:2009/06/20(土) 06:11:23
tangobosは使えるけど…今更D1.0のPhobosに何の価値があるというのか。
druntimeがあるのはD2だけだな。
D2でTangoが使えるようになった時にはPhobosと共存できるに違いないと信じる。
976デフォルトの名無しさん:2009/06/20(土) 06:27:13
DFLは両方に対応しているから参考にはなるはず
977969:2009/06/20(土) 11:44:20
れすありがとう。
>>973
試してみます。

>>976
参考になりました。
tangoとphobosへの依存は最小限というか可能な限り使わないって
方針かな・・・代わりにWin32に依存してるのかもしれないけど。
しかし、それでも結構細々とした対応が必要なのとすでに
D3用のversionが用意されてるのが泣けた。
978デフォルトの名無しさん:2009/06/20(土) 19:10:37
Tangoは悪としか思えない
いくらPhobosが使えないからといって、言語のベースをカオスにした罪は大きい
979デフォルトの名無しさん:2009/06/20(土) 20:19:06
TangoはPobosをプロトタイプとした、スマートでシステマチックなライブラリにしたいのだろうね。
それで泥臭いPhobosを使わなくて済むようにしたかったんだろう…
Boostみたく普通のライブラリにすれば神ライブラリと呼ばれたろうに…
980デフォルトの名無しさん:2009/06/20(土) 20:44:02
Tangoは「Phobos糞過ぎるだろ。これが標準ライブラリだなんて許せるか。俺にcommit権くれたら、もっといいもの作ってみせる!!!!11」っていう動機の元に作られたわけで…
981デフォルトの名無しさん:2009/06/20(土) 20:46:13
それにしてはライセンス微妙だし、命名規則も酷いもんだ。
982デフォルトの名無しさん:2009/06/20(土) 21:08:33
tango.io.Stdout.Stdout("うんたら").newline;
とか書くたびに絶望的な気分になる
983デフォルトの名無しさん:2009/06/20(土) 21:08:52
Phobosを使うライブラリ を完全に無視するTango・・・
984デフォルトの名無しさん:2009/06/20(土) 21:55:54
わからんのはライブラリの作者がtangoを採用するところ。ldcもtango必須だし。
tango自体はどうでもいいが、ライブラリがtango依存なせいでtangoを入れざるを得ない。
985デフォルトの名無しさん:2009/06/20(土) 22:13:49
>>982
tangoって使ったことないけどそんな気持ち悪いんかw
それは確かに絶望的な気分になるのも頷ける・・・
986デフォルトの名無しさん
D1だとさすがにTangoの方がいいだろうけど
D2だとPhobosはRangeが中心になってきてるし
今後はネットワークモジュールが入る可能性もあるので
Tangoを使うメリットが減りそうな感じ