トップページ⇒tech
986コメント264KB

D言語 Part21

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん2009/02/11(水) 23:45:51
プログラミング言語 D (D Programming Language) について語るスレッドです。
過去スレ、関連スレは >>2

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

■本家
ttp://www.digitalmars.com/d/
ttp://www.kmonos.net/alang/d/ (和訳)

■コンパイラ
http://www.digitalmars.com/d/dcompiler.html (DMD, 本家)
http://dgcc.sourceforge.net/ (GDC, gccフロントエンド)
http://www.dsource.org/projects/ldc (LDC, バックエンドにLLVM)

■参考URL
ttp://f17.aaa.livedoor.jp/~labamba/ (D言語研究)
ttp://f17.aaa.livedoor.jp/~labamba/?D%B8%C0%B8%ECBOF (D言語BOF)
ttp://dsource.org/ (dsource)
ttp://tinyurl.com/3da5oa (C/C++に疲れた人のD言語)
ttp://www.kmonos.net/alang/wnd/ (わかったつもりになるD言語)
ttp://shinh.skr.jp/d/ (SDL, SDL_*, OpenGL, GLU, glutのポーティングとか)
ttp://shoo.s20.xrea.com/shoo/programing (D言語とTangoの入門講座)
ttp://www.nicovideo.jp/mylist/4453698 (D言語で作られた芝ゲー niconico動画)
ttp://www.asahi-net.or.jp/~cs8k-cyu/ (ABA Games)

■ IDE
ttp://dronten.googlepages.com/dscite (DSciTE)
ttp://forums.codeblocks.org/index.php?board=20.0 (Code::Blocks)
ttp://www.dprogramming.com/entice.php (Entice Designer)
ttp://www.dsource.org/projects/descent (Descent)
ttp://www.dsource.org/projects/poseidon (Poseidon)
0002デフォルトの名無しさん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/
0003デフォルトの名無しさん2009/02/11(水) 23:49:30
>1の変更点はldcと前スレ部分
以上
0004デフォルトの名無しさん2009/02/11(水) 23:51:18
>>1
乙です
0005デフォルトの名無しさん2009/02/12(木) 00:16:39
なんか気がついたら1000きてた、みたいなまったりさが好きだ。
>>1乙。
0006デフォルトの名無しさん2009/02/12(木) 00:43:44
Dのさらなる繁栄を願う

>>1乙
0007デフォルトの名無しさん2009/02/12(木) 02:04:26
auto D = D >>1;
0008デフォルトの名無しさん2009/02/12(木) 03:16:45
http://jp.rubyist.net/magazine/?0025-RareAreGCTalk
D言語タンのGCのアルゴリズムはなんて奴で実装されてるの?
0009デフォルトの名無しさん2009/02/12(木) 03:29:29
まーくあんどすうぃーぷ
0010デフォルトの名無しさん2009/02/12(木) 05:15:37
全ての関数の返値は第一out引数にしよう!
そうすればopCastオーバーロード問題も一気に解決!
0011デフォルトの名無しさん2009/02/12(木) 08:57:34
>>8
一時期世代別が実装されそうな雰囲気になったけど
druntimeが抽出された時にどこかへ行ってしまったw
0012デフォルトの名無しさん2009/02/12(木) 09:59:03
>>1
乙
うぉるたんかわいいようぉるたん
0013デフォルトの名無しさん2009/02/12(木) 10:05:05
>>12

7 :デフォルトの名無しさん [↓] :2008/11/15(土) 16:36:07
おっさんだぜ?
0014デフォルトの名無しさん2009/02/12(木) 10:08:49
ttp://www.astoriaseminar.com/images/walter.gif
0015デフォルトの名無しさん2009/02/12(木) 20:30:51
おいおい夢を壊すなよ
0016デフォルトの名無しさん2009/02/12(木) 20:35:18
その壊された夢がすごく気になる…
0017デフォルトの名無しさん2009/02/13(金) 01:10:00
[1] 授業単元:D
[2] 問題文(含コード&リンク):
1から9までの数字を縦横方向に同じものが並ばないように下記の例のように並べる
並べ方が全部で何通りあるかとその並びをすべて列挙する
[3] 環境:特になし
[4] 期限: 明日まで
[5] その他の制限:
例
534681297
685293714
948367125
153472869
426538971
261759483
817945632
379126548
792814356
0018デフォルトの名無しさん2009/02/13(金) 03:38:28
マルチ乙
0019デフォルトの名無しさん2009/02/13(金) 08:55:36
どこの大学でDの授業があるのか教えてくれたら、解いてやるよw
0020デフォルトの名無しさん2009/02/13(金) 09:34:16
return net.hatena.quest("1から9までの数字を縦横方向に同じものが並ばないように並べる\n"
"並べ方が全部で何通りあるかとその並びをすべて列挙する").primaryAnswer;
0021デフォルトの名無しさん2009/02/13(金) 22:20:33
ループ中にGUIを更新したいんだけどdflではどうしたらいいの?
C#で言うところのDoEventだっけかな。
0022デフォルトの名無しさん2009/02/13(金) 23:46:23
>>21
今ちょっとヘルプ見てみたら、dflにApplication.doEvents()ってあるらしいよ。
確認してないけど、使えるんじゃないかな?
でもdflは意外と地雷があったりするから、凝ったの作ろうとする場合は
気をつけて。
0023デフォルトの名無しさん2009/02/14(土) 00:09:36
>[1] 授業単元:D
??!
0024212009/02/14(土) 02:04:10
>>22
Application.doEvents()で上手くいきました、どうもありがとう。
0025赤西仁2009/02/14(土) 15:39:21
1年間悩んでます。お力をお貸しください。

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

◆試してダメだったこと

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

◆教わったこと

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

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

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

スクリーンショットじゃ嫌なんです。どうか皆さん、お力をお貸しください。
0026デフォルトの名無しさん2009/02/14(土) 17:22:11
バージョンアップまだー?
0027デフォルトの名無しさん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が出てないから気付かなかった。
0028デフォルトの名無しさん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.
0029デフォルトの名無しさん2009/02/15(日) 03:15:22
Macサポートは有難いけどページがまだ出来てないし
やはり2.xでのサポートが待ち遠しい
0030デフォルトの名無しさん2009/02/15(日) 06:18:46
正式なアナウンスきたね
2.024はどこに行ってしまったんだろうか…
0031デフォルトの名無しさん2009/02/15(日) 08:16:32
>>30
Extrawurst wrote:
> Very nice, but what happened to version 2.024 ?

test version
0032デフォルトの名無しさん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
0033デフォルトの名無しさん2009/02/15(日) 15:41:59
目玉はmac対応ってことくらい?
0034デフォルトの名無しさん2009/02/15(日) 15:43:22
CEにも対応してもらいたいんだが。。>うぉるたん
0035デフォルトの名無しさん2009/02/15(日) 15:49:14
binのパス変わってるのね
0036デフォルトの名無しさん2009/02/16(月) 01:59:25
Mac対応、どれだけ待ち望んでいた事か!
0037デフォルトの名無しさん2009/02/16(月) 02:56:50
次にどかんとくるとしたらRangeライブラリあたりかな?
0038デフォルトの名無しさん2009/02/16(月) 06:27:47
バージョン更新でMacへ移植いけるぜ!
しかし更新してコンパイル部でコードは通らなくなったがな!
さすが言語の破壊王だ!

Internal error: ..\ztc\cod4.c 357
0039デフォルトの名無しさん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;とすると起きない
0040デフォルトの名無しさん2009/02/16(月) 14:10:09
D2.0の更新見てみたら
2.024飛ばして2.023から2.025になってるんだけど
どういうこと
0041デフォルトの名無しさん2009/02/16(月) 16:04:46
>>40
>>31 のようにウォルたんが言ってる
0042デフォルトの名無しさん2009/02/16(月) 18:09:30
ウォルたんのことを思うと胸のドキドキが止まらない
0043デフォルトの名無しさん2009/02/16(月) 23:13:24
ttp://www.astoriaseminar.com/images/walter.gif
0044デフォルトの名無しさん2009/02/17(火) 01:26:04
やっぱりhigeがないとなぁ
0045デフォルトの名無しさん2009/02/17(火) 02:08:34
みんながソースを提示するときに hoge を hige と書けばいんじゃね?
0046デフォルトの名無しさん2009/02/17(火) 02:55:48
hige hage piyo
0047デフォルトの名無しさん2009/02/17(火) 12:43:24
誰かOPTLINKをまともに書き換えてくれる人はいませんか?
ttp://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=84330
0048デフォルトの名無しさん2009/02/17(火) 13:52:44
getcwd()を使うとカレントディレクトリとexeのパスがくっついた文字列が帰ってくるんだけど、なんで
0049482009/02/17(火) 14:31:52
別の場所でexeのパス表示してたww
0050デフォルトの名無しさん2009/02/17(火) 16:52:52
どん☆まい
0051デフォルトの名無しさん2009/02/17(火) 17:07:58
>>49
ウォルたんも笑って許してくれるさ
0052デフォルトの名無しさん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();
}
0053デフォルトの名無しさん2009/02/17(火) 18:28:08
BigIntを言語ネイティブにいれてくれー!
0054デフォルトの名無しさん2009/02/17(火) 19:00:02
じゃあ僕はdecimalを
0055デフォルトの名無しさん2009/02/17(火) 19:14:08
俺は四元数を
0056デフォルトの名無しさん2009/02/17(火) 19:17:21
>>52
ini を読む前にカレントディレクトリを表示してみるとどうだろう?


えーい、101キーボードでアンダースコートの入れ方がわからん!
0057デフォルトの名無しさん2009/02/17(火) 19:18:29
>>52 落ちないけど
0058522009/02/17(火) 19:41:08
>>56
exe起動だとカレントディレクトリなのに
ファイルのD&D起動だとDocument and setteing\userを表示する
なんでだろ
0059デフォルトの名無しさん2009/02/17(火) 20:00:45
>>58
windowsの場合、現在のカレントディレクトリがファイルのD&Dで
D&Dされた先に変更されたりしないからかも。
以前VC++でコードを書いていたとき、同じような感じで悩んだことがある。
そのときはフルパス取得して処理したんだっけな?
0060デフォルトの名無しさん2009/02/17(火) 20:01:28
ファイルのD&Dで起動したときのカレントディレクトリが%USERPROFILE%だからじゃないのか?
実行ファイルの場所 == カレントディレクトリ とは限らない
0061522009/02/17(火) 20:11:22
よく見ると知らないうちにDocument and SettingフォルダにD関係で処理してたファイルがたまってた

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

どうもありがとうございました
0062デフォルトの名無しさん2009/02/17(火) 21:35:30
>>56
アンダースコアならalt押しながら95入力して放せばいいんじゃね。
0063デフォルトの名無しさん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
0064デフォルトの名無しさん2009/02/18(水) 05:19:44
earthquake changes

ガクテカ
0065デフォルトの名無しさん2009/02/18(水) 07:40:33
英語わかんないなりに翻訳するとぶっ壊すよ、ってこと?
0066デフォルトの名無しさん2009/02/18(水) 07:58:24
アンドレイ詩人過ぎる
0067デフォルトの名無しさん2009/02/18(水) 09:44:10
元スレッドからざっくり訳すと

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

という感じ
0068デフォルトの名無しさん2009/02/18(水) 09:56:47
で、onigu組み込んだらワロス
0069デフォルトの名無しさん2009/02/18(水) 11:02:29
初歩的な質問ですが、
バイナリファイルを指定サイズずつ読み込みたいんだけど、phobosだとどの関数使えばいいんですか?
0070デフォルトの名無しさん2009/02/18(水) 11:58:52
ちょwstd.rangeどうなったw
0071デフォルトの名無しさん2009/02/18(水) 19:43:24
>>68
oniguruma をDで焼き直して実装ならそれはそれでうれしいかも試練。
下手に独自仕様でこられると逆に厄介だ。

正規表現は方言多すぎなんだよ…
0072デフォルトの名無しさん2009/02/18(水) 20:01:27
QtのDバインディング、来てて嬉しーすげーと思ってたのに
Tango使ってんのな・・・

Phobos使用者にとっては、導入の敷居が高い。
利用者数ってPhobos<Tangoなの?
0073デフォルトの名無しさん2009/02/18(水) 20:40:06
>>72
これよくわからんよなぁ。

Tango使ってる人が布教に熱心なのかPhobos使ってる人が無口なのか。
いつまでたっても次期標準ライブラリなTangoよりPhobosの方が安心なんだが貧弱だからなぁ。
0074デフォルトの名無しさん2009/02/18(水) 21:34:09
>>69
std.stream.InputStream の readExact とか?
使った事ないから、違ってたらゴメンね
0075デフォルトの名無しさん2009/02/18(水) 22:15:57
std.stream.File.read(指定サイズのubyte配列)で適当にやってちょ
0076デフォルトの名無しさん2009/02/18(水) 22:17:40
正規表現はECMAScriptの規格になると思われ

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

Java、.NET、Pythonにあるような無駄にでかい、標準扱いのライブラリがちょっと欲しかったり。
Deimosという名前で。
0077692009/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])の場合前回の情報が残ったままみたいですね
0078デフォルトの名無しさん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);
}
0079752009/02/19(木) 14:49:04
>>77-78
なんていうかその、ごめんね
0080デフォルトの名無しさん2009/02/19(木) 15:31:56
read は実際に読み込まれたバイト数を返すみたいだから

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

にした方がいいんじゃね
0081デフォルトの名無しさん2009/02/19(木) 16:28:34
>import core.thread;
って書くと
>test.d(2): module thread cannot read file 'core\thread.d'
って帰ってくるんですが
コアってどこにあるんですか?
0082デフォルトの名無しさん2009/02/19(木) 17:21:11
心の中にあるよ
0083692009/02/19(木) 19:51:38
>>80
うまく末尾の0x00を切り捨てられました、ありがとうございます。
0084デフォルトの名無しさん2009/02/19(木) 20:37:55
>>67
Tangoもそうだけどなんで増築じゃなくて改築なんだろうな
リンカを通すって特徴をわざわざ殺すやり方ばかりするのが理解できん
0085デフォルトの名無しさん2009/02/19(木) 20:50:30
Dが互換性に配慮し始めたらおしまいだと思う
0086デフォルトの名無しさん2009/02/19(木) 21:14:05
>>84
意味不明。
変なコードを標準ライブラリに残しておく意味なんてないだろ。
0087デフォルトの名無しさん2009/02/19(木) 21:48:13
変なコードでもそれに依存してるものがある以上できるだけ壊すべきじゃない。
ランタイムライブラリが必要な言語は古い物と新しい物の両方を抱えると実行時の
パフォーマンスに影響しかねないけど、Dは使ってないものに関してはオーバーヘッドが
ないようにできるわけだから、そこをもっと生かすべきじゃなんじゃないかなぁと思うんだ。
0088デフォルトの名無しさん2009/02/19(木) 22:02:44
>>87
言いたいことは分かるし共感も出来る。
ソフトウェア製作においても重要なことだと思う。
でもね、このスレでその発言はおかしい。
0089デフォルトの名無しさん2009/02/19(木) 22:08:10
っつかD2.0系はAlpha扱いだしな。
普通に言語仕様に破壊的変更が起きるし、正規表現なんざ屁の河童だろ。
0090デフォルトの名無しさん2009/02/19(木) 22:11:52
>>87
残念なことに、今はなるべくそうしようという方向に進んでいるようです。
Version D 2.020のあたりのcore.threadとかはその前兆かと。
すでにPhobosですら隔離されつつある。
TangoはまだD2.0に対応する気はなさそうですが。
0091デフォルトの名無しさん2009/02/19(木) 22:32:32
std.regexpという貴重なパッケージ名を占有されたまま居座られても困るしね。

ダメなコードを消せるって幸せなことだよね……
0092デフォルトの名無しさん2009/02/19(木) 23:25:57
>>88
ワロタwww
0093デフォルトの名無しさん2009/02/19(木) 23:38:03
いろいろわかるが(むしろそっちの方が常識的だが)
過去のしがらみに縛られないのがDのいいところ
0094デフォルトの名無しさん2009/02/20(金) 00:01:04
そして永遠に誰も使わない
0095デフォルトの名無しさん2009/02/20(金) 00:43:36
ネット上の情報もただでさえ少ないのにD1/D2.0、phobos/tangoで分かれてるし
0096デフォルトの名無しさん2009/02/20(金) 01:37:17
標準ライブラリが2つあるという状況自体が既に色々と終わってる感がある
0097デフォルトの名無しさん2009/02/20(金) 02:39:10
でもそんなDが・・・僕は・・・っ!
0098デフォルトの名無しさん2009/02/20(金) 07:52:44
>>87
完全手探りのアルファ版の段階で互換性気にしてたら、
ほんとぐちゃぐちゃでわけわかんないことになるぞw
0099デフォルトの名無しさん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.
0100デフォルトの名無しさん2009/02/20(金) 11:44:37
>>96
D1はD1でひとつの言語だと考えるといいと思う
あとD2に対応してない時点でTangoは使えないんだよなー
今のところD2やるならPhobosしかない
0101デフォルトの名無しさん2009/02/20(金) 17:07:57
配列の s[0..2] って s[i..i+2] みたいな書き方できなかったっけ
01021012009/02/20(金) 17:10:57
あっ、できた
0103デフォルトの名無しさん2009/02/21(土) 02:11:57
おめ
0104デフォルトの名無しさん2009/02/21(土) 16:23:19
ファイルパスに日本語があると読み込めない
0105デフォルトの名無しさん2009/02/21(土) 16:33:22
主語と目的語を
0106デフォルトの名無しさん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だけ動かないみたいです。
0107デフォルトの名無しさん2009/02/21(土) 20:06:22
当方XPのdmd2.025だけどテスト.txtやフォルダ\テスト.txtをD&Dしても途中で終了せず…
txtの中身も「あいう!」にしてSJISとUTF-8形式で保存してD&D試してみたがforeach抜けた後のコードに到達する
01081072009/02/21(土) 20:10:59
フォルダをD&Dしたら落ちたけどそれは別に日本語フォルダじゃなくてもそうなる
01091062009/02/21(土) 20:53:51
レスありがとうございます
一瞬だけど、 ERROR invalid UTF8 sequence とかなんとか表示されて落ちるから文字がらみだとおもうけど・・・
一度通ったファイルを "コピー〜test.d" にしてD&Dしても落ちるから中身は関係なさそう。

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

XPでdmdは最近落としたものです。
0110デフォルトの名無しさん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しても…ダメだ、落ちない
0111デフォルトの名無しさん2009/02/21(土) 21:37:00
パス名はUTF-8で記述されていますか?
01121062009/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


こんな感じです
01131072009/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");
の挙動を試してみるべし
01141062009/02/21(土) 22:40:22
「あいうえお」でした
01151062009/02/21(土) 23:03:13
> Stream fs2 = new std.stream.File("D:\\Programing\\D\\あ.txt");

直打ちで通るから、D&Dで受けた文字コードを変換できれば通りそうだけど。
0116デフォルトの名無しさん2009/02/22(日) 00:11:19
>>109
一瞬メッセージが出てくるということは、例外拾って例外をどこかに吐かせればいいのではないか。
0117デフォルトの名無しさん2009/02/22(日) 02:44:51
>>106
druntime導入以降のphobosなら通る。
0118デフォルトの名無しさん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();
}
0119デフォルトの名無しさん2009/02/22(日) 08:06:29
>>118
ANSI文字列をchar*で扱うべきじゃないと思うのと、各種APIが失敗したときにハンドルリークする可能性がある。

俺の書いたのでよければ参考にして欲しい。
http://ja.doukaku.org/188/lang/d/
0120デフォルトの名無しさん2009/02/22(日) 09:23:59
>>119
素晴らしい。
scope, enforceの使い方のお手本みたいな感じですな。

しかしこういった小物コードのいい集積所はないものか
0121デフォルトの名無しさん2009/02/22(日) 10:57:46
>>119
これは・・・本物のD言語か
C++と変わらないパチモンコードを書いてた俺に衝撃が走った
0122デフォルトの名無しさん2009/02/22(日) 16:48:42
C++もどきくらいの方がいいと思うよ
Dの機能フルで使っちゃうとバージョン変更に極めて弱いコードができてしまう
0123デフォルトの名無しさん2009/02/22(日) 17:55:39
バージョン変更が怖くてフルに機能を使わない人がD言語を扱うのは難しい
0124デフォルトの名無しさん2009/02/22(日) 18:26:51
実用的にD1.Xで充分と思っているが。
0125デフォルトの名無しさん2009/02/22(日) 19:27:34
scope 演算子で質問。

scope(exit) {
// A
}

scope(exit) {
// B
}

と来たら A と B はどちらが先に処理されるの?
A と B の順番は言語的に保障されているの?
0126デフォルトの名無しさん2009/02/22(日) 19:31:46
http://www.kmonos.net/alang/d/2.0/statement.html#ScopeGuardStatement
>一つのスコープに複数の ScopeGuardStatement があった場合は、 ソースコード文字列上で現れた順番の逆順で実行さ
>れます。 そのスコープ終了時に破棄されるscopeインスタンスが存在する場合も、 それらのデストラクタも、ソースコード上
>の逆順で ScopeStatement  の間に挟まって実行されます。
つまり、B,Aの順番に処理されて、言語的に保障されている。
0127デフォルトの名無しさん2009/02/23(月) 02:29:37
ありがとー
0128デフォルトの名無しさん2009/02/23(月) 04:11:55
>>119 がみられない・・・
0129デフォルトの名無しさん2009/02/23(月) 04:12:57
あ,URLをコピペしたら見られた
0130デフォルトの名無しさん2009/02/23(月) 04:14:18
>>119
enforce か。初めて知った。
D2 って良さそうだなぁ・・・
0131デフォルトの名無しさん2009/02/23(月) 04:57:33
D言語にしちゃスレの伸びが速い
0132デフォルトの名無しさん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とのバインディング用が主たる用途だろうからそんな機構を付けてもしょうがないのではあるが。
0133デフォルトの名無しさん2009/02/23(月) 08:45:57
GDCの引き継ぎはまだかー
0134デフォルトの名無しさん2009/02/23(月) 13:12:13
個人的にはDDLとかも開発を続けてほしいなぁ
0135デフォルトの名無しさん2009/02/23(月) 19:12:27
引数に配列演算突っ込むとaccess violationと言われた
不便だ。もっと変数みたいに扱わせてくれ
0136デフォルトの名無しさん2009/02/23(月) 20:00:01
ttp://www.digitalmars.com/pnews/read.php?server=news.digitalmars.com&group=digitalmars.D.learn&artnum=13788

D でもドライバーとかかけるんかな・・・。
0137 2009/02/23(月) 20:08:33
Dって普通に使ってたらめったにコンパイラのバグなんかに遭遇しない?安定してる?
コンパイラはオープンソースなの?
0138デフォルトの名無しさん2009/02/23(月) 20:59:57
>>137
D1.0ならめったにコンパイラのバグには遭遇しない。あるにはあるけど十分回避可能。
何を指して安定と呼ぶかによると思うけど、なぜかたまにリンカが死ぬ。
よくタスクマネージャで殺したりしてる。あまり問題に思ったことはない。
コンパイラはオープンソース。コンパイラに同梱されてる。
0139デフォルトの名無しさん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 書けると思うけど
0140 2009/02/23(月) 21:18:59
>>138 >>139
どうもありがとう。
0141デフォルトの名無しさん2009/02/23(月) 21:34:30
誰かdrutimeの導入方法をテンプレに書いてよー
0142デフォルトの名無しさん2009/02/23(月) 21:36:31
誰かdruntimeの導入方法をテンプレに書いてよー
0143デフォルトの名無しさん2009/02/23(月) 21:45:40
導入方法って何のこと?
0144デフォルトの名無しさん2009/02/23(月) 21:57:11
よく分からないけどぼくのdmdだとcore.とかうごかない
01451412009/02/23(月) 22:10:48
http://www.dsource.org/projects/druntime
あと、ここに書いてある
http://svn.dsource.org/projects/druntime/trunk
から順集でcoreとかまるごと落としてbuild-dmd.bat起動してみたけどファイルが見つからないって言われました
0146デフォルトの名無しさん2009/02/23(月) 22:41:41
>>145
druntimeは既にdmd.zipに導入済みなんだけど?
build-dmd.batなんて実行しなくてもcore.*は使えてるよ
あとdmd2.025ではdmcはいらなくなったみたいだよ
01471412009/02/23(月) 23:03:32
まじですか?ファイルが見つからないんでダウンロードからやりなおしてみます。
0148デフォルトの名無しさん2009/02/24(火) 00:09:59
XOmB Bare Bones
http://wiki.xomb.org/index.php?title=XOmB_Bare_Bones
D言語で書かれたOSとのこと
0149デフォルトの名無しさん2009/02/24(火) 00:27:00
なんという恐ろしいOS……
0150デフォルトの名無しさん2009/02/24(火) 00:58:32
D3.0はまだか…
0151デフォルトの名無しさん2009/02/24(火) 02:38:09
D言語で 64bit OSって、素敵すぎる.
要gdcクロスコンパイラ(構築?)だったりで、
敷居高くて手がだせないけど.
※ソース、fxで落とせたけどieだとダメぽい?
0152デフォルトの名無しさん2009/02/24(火) 03:45:04
XMLリテラルよこせよ
0153デフォルトの名無しさん2009/02/24(火) 09:52:03
いらねえよw
0154デフォルトの名無しさん2009/02/24(火) 10:27:05
まあ複素数リテラルに比べたらw
0155デフォルトの名無しさん2009/02/24(火) 10:31:40
ボード線図とか描くときめちゃくちゃ使ったけどな。複素数リテラル。
0156デフォルトの名無しさん2009/02/24(火) 11:47:07
XMLリテラルあったらどう便利なん?
0157デフォルトの名無しさん2009/02/24(火) 14:43:01
>>139
配列を引数にとる関数meanofを作った時
double mean = meanof(arr[]);
は動くんだが
double sqrmean = meanof(arr[]*arr[]);
みたいな引数にすると動かない
arr[]+1 にしてもダメだった

環境はWinXPでD2.025
0158デフォルトの名無しさん2009/02/24(火) 18:49:17
http://www.kmonos.net/alang/d/2.0/arrays.html#array-operations
> ベクトル演算は、スライス演算子が =, +=, -=, *=, /=, %=, ^=, &=, |= 演算子の左辺に来たときに行われます。
これをみた感じ、arr[]*arr[]はベクトル演算に該当しないので計算不可能…普通にできないのではないかと。
0159デフォルトの名無しさん2009/02/24(火) 20:39:05
>>158 だよね
0160デフォルトの名無しさん2009/02/24(火) 20:45:38
>>158
なるほど
仕様がねえな
0161デフォルトの名無しさん2009/02/24(火) 21:39:10
wxD・gtkD・QtD(・etc)、使うならどれが良いと思う?
0162デフォルトの名無しさん2009/02/24(火) 23:16:59
>>161
wktkD に見えた。
0163デフォルトの名無しさん2009/02/24(火) 23:40:47
AkinatorがDのマスコット知らなかったから教えておいた
0164デフォルトの名無しさん2009/02/25(水) 01:07:12
>>161
俺はlinuxとwindowsで使うツールをgtkDで作ってる。
windowsだとちょっともっさりとしてるけど、一応使えてる。
マルチスレッドと相性が悪いらしくて、マルチスレッドと絡むとたまにウィジットが真っ白になったりするけど、気にしなければどうということはない。
01651612009/02/25(水) 01:47:33
>>162
Dには常にwktkで溢れてて貰いたいですね

>>164
やはりマルチスレッド周りは不完全ですか・・・
しかし諦めも肝心ですよね、gtkD使いたいと思います
ありがとうございます
0166デフォルトの名無しさん2009/02/25(水) 01:51:44
DWTも選択肢に入れるとよろしいかと。
JavaのSWTにある程度サンプルが多いから、資料の点であんまり困らない。
0167デフォルトの名無しさん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.
そういえば前スレあたりで誰か困ってたけど、とりあえず対処がなされた模様。
0168デフォルトの名無しさん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.

粛正が始まるよー
0169デフォルトの名無しさん2009/02/25(水) 11:11:42
ttp://tinyurl.com/3da5oa (C/C++に疲れた人のD言語)

つながらない
0170デフォルトの名無しさん2009/02/25(水) 11:18:49
http://d.hatena.ne.jp/haru-s/20090221/1235243354
0171デフォルトの名無しさん2009/02/25(水) 12:09:45
>>169 ごめんなさい
今度からこれテンプレにしてください
tinyurlってアドレス選べるんですね
ttp://tinyurl.com/ccpp2d (C/C++に疲れた人のD言語)
0172デフォルトの名無しさん2009/02/25(水) 12:27:52
つながった、ありがとう
0173デフォルトの名無しさん2009/02/25(水) 16:15:39
>>168
非文字外のバックスラッシュ付き文字を文字列リテラルとする仕様を外し、
デリゲートのシンタックスシュガーに使うと。
こんな感じか?

array.map \(ref i) { i+=1; }
widget.onClick \{ doSomething; }
0174デフォルトの名無しさん2009/02/25(水) 17:58:08
widget.onClick = delegate void() { doSomething; }
widget.onClick = delegate () { doSomething; }
widget.onClick = () { doSomething; }
widget.onClick = { doSomething; }
これだけあるのに
widget.onClick = \{ doSomething; }
わざわざ文字数増やす意味がわからないんだけど
0175デフォルトの名無しさん2009/02/25(水) 18:11:19
ソースが増えてきたんだけど、
import folder/hello2;
とか無理なの?
0176デフォルトの名無しさん2009/02/25(水) 18:23:34
例がよく分からないけどJavaみたいに
import folder.*;
みたいなのがしたいってこと?
0177デフォルトの名無しさん2009/02/25(水) 18:24:08
>>175 よくわからないので詳しく
0178デフォルトの名無しさん2009/02/25(水) 19:35:49
ファイルがmain.d m1.d m2.d m3.d …って増えて20以上になりそうだから、
m1.d m2.d m3.d をフォルダmの中に入れて管理したくなった。
VC#はできたんだけどJavaは知らないです。
0179デフォルトの名無しさん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\

やっつけだけどこんな感じで階層化できた気がする。
0180デフォルトの名無しさん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に()つけ忘れて実行したけどこれでも動くんですね。
0181デフォルトの名無しさん2009/02/25(水) 20:57:05
>>173-174
いや、そこに書いてあるのはラムダ式。

auto square = \x => x * x;

とかだろ。
0182デフォルトの名無しさん2009/02/25(水) 21:25:19
>>180
Dでは引数がない関数は括弧を省略することが出来る
0183デフォルトの名無しさん2009/02/25(水) 22:26:13
string hello2()  return "hello";

こうですか?
0184デフォルトの名無しさん2009/02/25(水) 22:39:38
あんまり面白くないな
0185デフォルトの名無しさん2009/02/25(水) 23:17:08
>>181
ラムダ式しか書けず、ラムダ計算できるが最終的にはデリゲートとして扱われるリテラル、という感じ?
0186デフォルトの名無しさん2009/02/26(木) 02:13:11
auto square = x => x * x;
ラムダ式はC#風にこれでよくね?
他のことに使うとしたら何があるだろう
0187デフォルトの名無しさん2009/02/26(木) 13:37:25
Dscite使ってるけど、もっといいエディタないかな・・・
0188デフォルトの名無しさん2009/02/26(木) 13:59:08
ぽせいどん
0189デフォルトの名無しさん2009/02/26(木) 18:50:29
\がバックスラッシュの形に見えないせいでまた日本人は苦しむのですね!
0190デフォルトの名無しさん2009/02/26(木) 19:55:16
うぉるたん鬼畜!
0191デフォルトの名無しさん2009/02/27(金) 02:19:02
Dに複素数演算があってよかった
工学系で複素数演算を使う人は多いと思うんだが、どうだろう。
0192デフォルトの名無しさん2009/02/27(金) 03:11:15
いや別に構造体と演算子オーバーロードでいいし・・・
0193デフォルトの名無しさん2009/02/27(金) 03:16:23
確かにユーザー定義リテラルがあればね。
0194デフォルトの名無しさん2009/02/27(金) 08:40:05
浮動小数点が単にNaNのときってどの演算子を使えばいいんだろう?
n !<>= 0.0
とやっているが、正しいんだかどうだか
0195デフォルトの名無しさん2009/02/27(金) 09:13:27
is式とnanプロパティ使って
 n is n.nan
でよくね?
0196デフォルトの名無しさん2009/02/27(金) 09:21:50
n == n
0197デフォルトの名無しさん2009/02/27(金) 14:21:40
std.mathのisnan?
0198デフォルトの名無しさん2009/02/28(土) 01:25:28
>>167
>そういえば前スレあたりで誰か困ってたけど、

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

いい情報をありがとう。>167
0199デフォルトの名無しさん2009/02/28(土) 02:21:28
あの14種類の比較演算子ってギャグだよな?
0200デフォルトの名無しさん2009/02/28(土) 08:08:02
200
0201デフォルトの名無しさん2009/02/28(土) 13:37:33
>>199
ギャグではないとおもうよ。必要な物だし。
あれが最善の表現方法かどうかはわからないけど、
少なくとも関数スタイルにするよりはなんぼかましだとおもう。

x.isLessThanEqualToOrGreaterThan(y) とか、
fpcmp(x, y, FpCmp.LESS | FpCmp.EQUAL | FpCmp.GREATER) とか、どうよ。
0202デフォルトの名無しさん2009/02/28(土) 14:55:32
すごく
きもいです
0203デフォルトの名無しさん2009/02/28(土) 19:54:50
あるいは名前をつけて、fpcmp(x, y, FpCmp.ORDERED) とかか。
演算子よりぱっと見で意味はわかりやすいが、いずれにせよ煩雑だな。
0204デフォルトの名無しさん2009/02/28(土) 20:55:44
<(より小さい) >(より大きい) =(等しい)の組み合わせて出来てるんだから
比較不能を表す何かがあればいいんだよ

今は!の否定で無理矢理表してるからわかりにくい
0205デフォルトの名無しさん2009/02/28(土) 21:02:40
Less, Equal, Greater, Unorderedの和集合は浮動小数点数全体に一致するの?
0206デフォルトの名無しさん2009/02/28(土) 21:11:21
×浮動小数点数全体
○二つの浮動小数点数の関係の全体

でした。
0207デフォルトの名無しさん2009/02/28(土) 22:21:02
それ以外にどんな二項関係があると思うの?
0208デフォルトの名無しさん2009/02/28(土) 22:29:53
それがわからないから聞いているんです。
0209デフォルトの名無しさん2009/02/28(土) 23:41:31
考えてみれば実数どうしで比較して、比較不可能ってのなんかおかしくね?数学的に。
0210デフォルトの名無しさん2009/02/28(土) 23:44:54
>>209
Dの浮動小数点数 = 実数 ∪ {非数}

だから、なにもおかしくない。
0211デフォルトの名無しさん2009/03/01(日) 18:15:07
ddbgを単独でGUI表示できるプログラムってある?
0212デフォルトの名無しさん2009/03/01(日) 19:10:32
http://www.astoriaseminar.com/compiler-construction.html

うぉるたんの授業うけたいなあ
0213デフォルトの名無しさん2009/03/01(日) 20:09:34
BOFに1000人くらい集まるようになれば来るかもね
0214デフォルトの名無しさん2009/03/04(水) 23:51:00
しかしリンカが良く死ぬ。
回避方法とかあったりします?
0215デフォルトの名無しさん2009/03/05(木) 00:19:55
ささやき えいしょう いのり ねんじろ
0216デフォルトの名無しさん2009/03/05(木) 09:29:29
初歩的なことで恐縮なのですが…
dmdでコンパイルしたら.exeではなく.objが生成されました。
で、それを実行出来ないのですがどうすればいいでしょうか?
0217デフォルトの名無しさん2009/03/05(木) 09:31:58
-c付けずに実行すれば実行ファイルができると思うが。
あるいは後に何も残らないが-runつけるとか
0218デフォルトの名無しさん2009/03/05(木) 09:33:20
>>216
objは中間ファイルなので実行できません。
コンパイルした段階でなんかエラーメッセージ出てませんか?
何もエラー出てない限り実行ファイルは生成されないと思います。
0219デフォルトの名無しさん2009/03/05(木) 15:03:55
>>216です。自己解決しました。
dmd.zipの他にdmc.zipも必要だったのでした。
そしてdmd.zipを解凍して出来た\dmdと\dmの\dmを
dmc.zipを解凍して出来る\dmに置き換えてやればいいとのこと。
その中のlink.exeが必要だったみたいなのです。
そして無事コンパイル出来ました。
皆さん有難うございました。
ついでに言っておくと、.exeのほかに.mapと.objも生成されました。
0220デフォルトの名無しさん2009/03/05(木) 15:13:04
dmc.exeってC言語のコンパイラーなんですね。
ちゃんとコンパイル出来ました。
D言語と違ってそのままでも日本語を表示出来ました。
またD言語と同様に.exeのほかに.objと.mapが生成されました。
私は普段C言語はGCC&Cygwinを使っていますがそれでは.exeだけです。
だからびっくりしました。
0221デフォルトの名無しさん2009/03/05(木) 15:26:50
DMD1系?
DMD2.025からdmc不要になったはず。
っつかCでも.objはできるような気が。
そうでないと分割コンパイルする意味がない。
0222デフォルトの名無しさん2009/03/05(木) 15:37:36
ビルダがリンク後に自動で消してるだけだろ。
0223デフォルトの名無しさん2009/03/05(木) 15:59:56
>>219 dmは置き換えるんじゃなくて一緒にしてしまえばいい
0224デフォルトの名無しさん2009/03/05(木) 17:46:02
>>220です。
調べたらヴァージョンは2.011でした。
0225デフォルトの名無しさん2009/03/05(木) 17:47:22
もっと新しいの使えよw
0226デフォルトの名無しさん2009/03/05(木) 19:52:03
http://www.digitalmars.com/d/2.0/changelog.html#new2_026
最新バージョン来たよ!
0227デフォルトの名無しさん2009/03/05(木) 20:04:21
ちょ、さっき2.025ダウンロードして Hello,world コンパイルして確認したところだったのに。
0228デフォルトの名無しさん2009/03/05(木) 20:06:25
Added buildable dmd source.

これ、ついに dmd のソース公開ってことですか?
0229デフォルトの名無しさん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.
0230デフォルトの名無しさん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
0231デフォルトの名無しさん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だけ。
0232デフォルトの名無しさん2009/03/06(金) 02:31:41
要するにこれSymantec C++の一部だよね?

こんなすばらしいコードが見られるなんて、ありがたいことだ。
0233デフォルトの名無しさん2009/03/06(金) 02:43:16
ありがたやありがたや

みんな気に入らないところ直してパッチ送ろうぜ
0234デフォルトの名無しさん2009/03/06(金) 08:20:59
dmdはdmcで出来ている?
0235デフォルトの名無しさん2009/03/06(金) 09:10:21
dmd本体はC++で作ってる。コンパイラがdmcかどうかは知らない。
0236デフォルトの名無しさん2009/03/06(金) 11:53:58
dmdの出力をCOFFになるように改造できないかねぇ
0237デフォルトの名無しさん2009/03/06(金) 16:10:26
需要があるかどうか全く分からないMac向け簡易エディタ拡張
ttp://crossacross.org/misc/
0238デフォルトの名無しさん2009/03/06(金) 22:33:33
>>236
この前から本家フォーラムで「optlinkは死ね」というタイトルで論争やってて、
いつまでOMF使ってんだとかそんな感じの話が展開してたから、
そのうちボランティア作業でなおる気がする
0239デフォルトの名無しさん2009/03/07(土) 11:14:08
さりげなくバックスラッシュ文字列リテラルを多用してたんで直すの苦労したわ
0240デフォルトの名無しさん2009/03/07(土) 16:29:34
今年はD3へ向けて色々変わりそうだ
0241デフォルトの名無しさん2009/03/07(土) 16:59:06
optlinkって悪いの?何のリンカならいいの?
0242デフォルトの名無しさん2009/03/07(土) 18:10:03
たまにドジしちゃうoptlinkちゃんかわいい!
0243デフォルトの名無しさん2009/03/08(日) 02:02:19
うひょーとうとうビルドできるほどソース公開されたかー
うちのARMなGlanTankでも通らないかなぁ。やってみようかなぁ。
0244デフォルトの名無しさん2009/03/08(日) 04:05:18
ARMでdmd使えたら面白いね
GUIとかどうやるのか知らないけど
0245デフォルトの名無しさん2009/03/08(日) 04:57:11
x86しか生成できないから無理だろう。
一から書き直す覚悟が要ると思う。
0246デフォルトの名無しさん2009/03/08(日) 05:16:50
これを期にGDCとLDCが活発化することに期待
0247デフォルトの名無しさん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
02482472009/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
0249デフォルトの名無しさん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);
}
0250デフォルトの名無しさん2009/03/08(日) 12:26:21
ref ってことは、昔の inout で、出力先がないとあかんってことだよね。
lvalue ではないってのは代入不可能ってこと。
逆に今までそんなコード書いていて大丈夫だったのかが気になるな。
02512472009/03/08(日) 12:56:01
opCallの戻り値を値型にしとけばスタックに確保されるんじゃ?
関数のほうは実はopAssign(ref)とかだから問題ないと思うんだ

C++だと構造体のコンストラクタとこういうことができたんですよ
Dはなぜかコンストラクタを持たせると怒られる
02522472009/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;
}

なんか解決してしまいました。スレ汚しスマソ
0253デフォルトの名無しさん2009/03/08(日) 14:09:26
DMCのBasic Utilitiesに含まれるcl.exeがAVG先生にワームだって言われた(´・ω・`)
0254デフォルトの名無しさん2009/03/08(日) 14:59:37
>>253
avast先生も怒ってたなぁ
何でだろね
0255デフォルトの名無しさん2009/03/08(日) 16:40:32
十分に進化した構造体はクラスと区別がつかない
0256デフォルトの名無しさん2009/03/08(日) 16:45:39
Dでは最初から構造体は一応PODのつもりで設計されていて
今でもそれは変わらないと思う
構造体を操作するときに若干便利な機能が付加されただけだよね
0257デフォルトの名無しさん2009/03/08(日) 17:45:31
#define class struct
初期のC++だとこんな実装があったとかなかったとか
0258デフォルトの名無しさん2009/03/08(日) 19:11:24
>>247 構造体リテラルがあるよ
struct A {
 int x;
}
void f(ref A){}
void main() {
 f(A(3));
}
0259デフォルトの名無しさん2009/03/08(日) 19:57:06
>>252
ChageLog見れば分かるけど2.019から構造体コンストラクタ使えるよ
0260デフォルトの名無しさん2009/03/10(火) 15:43:29
http://www.infoq.com/news/2009/03/D-NET
これは
0261デフォルトの名無しさん2009/03/10(火) 16:37:35
Dで書いたものをC++に移植しようとしているのだが……
テンプレートミックスインでどうしても引っかかる。
マクロ使うしかないのか?
0262デフォルトの名無しさん2009/03/10(火) 16:51:40
>>261
多重継承か委譲かなあ
0263デフォルトの名無しさん2009/03/10(火) 17:14:25
仮想関数の継承をミックスインでやってたので、
設計をいじるかマクロ使うかの二択なもんで。
安全テンプレート付きマクロって何気に使いやすいなあ
0264デフォルトの名無しさん2009/03/10(火) 17:15:23
継承じゃない、オーバーライドだった
0265デフォルトの名無しさん2009/03/10(火) 19:21:25
>>264 どんな風になるの
0266デフォルトの名無しさん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で、かつ何かのインターフェースを継承するときにはこっちの方がはるかにやりやすい。
0267デフォルトの名無しさん2009/03/13(金) 18:40:58
この連想配列にどうやって明示的にキーを足すんだろう
string[2][string] hash;

// 以下全部コンパイル可 RangeError
hash[begin] = new string[2];
hash[begin] = null;
hash[begin][0] = "";
0268デフォルトの名無しさん2009/03/13(金) 18:42:19
ついでながらこれらもコンパイルエラーにならない
特に後者は言語仕様上のバグである気がする

hash[begin] = "";
hash[begin] = [0,0];
0269デフォルトの名無しさん2009/03/13(金) 18:56:19
>>267-268
何かおかしくね?それだと、2つの連想配列でしょ?
3つ目にしたかったら、連想配列追加しないとだめじゃないかい?
もしくは、連想配列に2要素の何かってことなら、添え字が逆。
0270デフォルトの名無しさん2009/03/13(金) 19:03:35
>>269
いや、そこはあってるんじゃないの。
C風の書き方すれば
string hash[string][2];
でしょ。
0271デフォルトの名無しさん2009/03/13(金) 19:10:01
>>270
え!そうなのか??
ROMってるだけじゃおいてかれるな。すまない。
0272デフォルトの名無しさん2009/03/13(金) 20:00:37
string[string] hash[2]; で
hash[0]["x1"]="";で
hash["x2"] = cast(string[2][string])hash["x1"]; が増長キャストかな??
0273デフォルトの名無しさん2009/03/13(金) 20:09:31
Dまたは日本語でおk
0274デフォルトの名無しさん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
0275デフォルトの名無しさん2009/03/13(金) 22:42:26
バグレポートあげといてよ
0276デフォルトの名無しさん2009/03/13(金) 23:05:50
どうなるべきなのかがよくわからんのですが・・・
0277デフォルトの名無しさん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"]
というエラー。
静的配列が問題なのかな。
0278デフォルトの名無しさん2009/03/14(土) 01:58:20
おお
なるほど
D2でも[2]を[]にして動的配列にしたら動いた
0279デフォルトの名無しさん2009/03/14(土) 07:46:20
>>275
2732
0280デフォルトの名無しさん2009/03/14(土) 11:23:23
GJ
0281デフォルトの名無しさん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);
}
0282デフォルトの名無しさん2009/03/15(日) 04:07:02
with.outer.controls.add(with.inner);
こうじゃなくて?
...
 parent = with.outer;
 with.outer.controls.add(with);
}
...
0283デフォルトの名無しさん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){ ... }
が通るようになれば楽だな。
0284デフォルトの名無しさん2009/03/15(日) 04:10:14
Control c;
with(c = new Control){}
これなら通るけど?
0285デフォルトの名無しさん2009/03/15(日) 04:13:56
たしかに内部クラスとおなじにするならそうなるかも
なんか意味的にキモく感じたからinnerとか付けたけど

皆さんはこういう場合にはどんな感じに書いてますか?
0286デフォルトの名無しさん2009/03/15(日) 10:06:55
そもそも、with はキモイから使わない。
超短期スコープ以外で使うのはダメだろう。
0287デフォルトの名無しさん2009/03/15(日) 16:33:32
withなんて有ったのか
VBにもあったよな懐かしい
0288デフォルトの名無しさん2009/03/15(日) 18:14:49
流れるようなインターフェース(fluent interface)
(new Control)
.text("childcontrol")
.width(200)
.dock(DockStyle.RIGHT)
.parent(with.outer);

setterは値返さないからthis返すように設計しとけば使えるけど
そういうやり方もあるという
0289デフォルトの名無しさん2009/03/15(日) 18:17:57
setterは値返してくれないと困るだろ…
0290デフォルトの名無しさん2009/03/15(日) 18:20:16
setterの仕事はsetしたら終了じゃないの?
0291デフォルトの名無しさん2009/03/15(日) 18:24:01
ゲッターロボ
0292デフォルトの名無しさん2009/03/15(日) 18:25:35
>>290 に同意
0293デフォルトの名無しさん2009/03/15(日) 18:32:30
textbox1.Text = textbox2.Text = s;

とか書けないじゃん。
0294デフォルトの名無しさん2009/03/15(日) 19:09:58
他人の言葉で悪いけど
コマンド・問い合わせの分離
ttp://capsctrl.que.jp/kdmsnr/wiki/bliki/?CommandQuerySeparation
0295デフォルトの名無しさん2009/03/15(日) 19:17:20
>コマンド・問い合わせの分離
でも皆
if ((fp = fopen("smpl.txt", "r")) == NULL)
みたいなコード書くんだよね
0296デフォルトの名無しさん2009/03/15(日) 19:19:27
constで思い出したんだけど、constメンバ関数の場合でMutexオブジェクトのロックとかしたいときってどうすればいいの?
C++ならmutable修飾子つければ行けたけど…Dではそういうのはなかったよね?
0297デフォルトの名無しさん2009/03/15(日) 19:20:24
それはイディオムだからなぁ
こんな風に書いたらかえってわかりにくいだろ

fp = fopen("smpl.txt", "r");
if (fp == NULL)
0298デフォルトの名無しさん2009/03/15(日) 19:22:58
ifの中にいっぱい文字があるのがやだから
fp = fopen("smpl.txt", "r");
if(fp)
みたいに書くわ
0299デフォルトの名無しさん2009/03/15(日) 19:26:26
D言語的には、ifによるnullチェックをやめてtryと例外使えってこったな。
ライブラリ側が対応してない場合にはstd.contractsのenforceとか?
0300デフォルトの名無しさん2009/03/15(日) 19:47:48
>>294
それは状態を変更しない問い合わせメソッドを用意しろと言う話であって、
状態を変更するメソッドが値を返さないことはさほど重要ではないと思うのだけど。
03012942009/03/15(日) 20:55:13
>>300
よくわからない、そうなのかも
0302デフォルトの名無しさん2009/03/15(日) 22:37:33
setterの実装に値をセットする以外のコードを書かされるのは嫌だなぁ……
かと言って>>293が通らないってのも、変数代入との一貫性が失われちゃうのか。
プロパティのgetter/setterって概念をきちんと言語に盛り込んで、
textbox.text = sはsを返すって仕様にすれば両立できるのかな。
C#とかは>>293みたいなコード通ったっけ?
0303デフォルトの名無しさん2009/03/15(日) 22:38:51
>>297
俺はまとめる方が分かりにくいよ
代入文と条件式を一まとめにできる事自体どうかと思う
0304デフォルトの名無しさん2009/03/15(日) 23:11:29
>>302
C#は>>293の書き方ができる。
setterが値を返すことはできず>>293の場合はsetter, getterの順番に実行される
0305デフォルトの名無しさん2009/03/15(日) 23:56:17
>>304
そうだったのか
それいいな
0306デフォルトの名無しさん2009/03/16(月) 00:00:32
イディオムの読みやすさはそれがイディオムだから読みやすいだけで
イディオムだと知らなかったら読みにくいでしょ
0307デフォルトの名無しさん2009/03/16(月) 00:20:03
RPCとかまで考えると、setter が無闇に値を返すのはまずい。
0308デフォルトの名無しさん2009/03/16(月) 11:45:15
setterは右辺値そのまま返せで良くね?
0309デフォルトの名無しさん2009/03/16(月) 12:53:43
DにはDのsetter/getterの作法があるんだしC#と同じでいいやん
textbox1.Text = textbox2.Text = s;
は
textbox2.Text = s;
textbox1.Text = textbox2.Text;
と等価ってことで
0310デフォルトの名無しさん2009/03/16(月) 12:57:40
textbox2.Text = s;
textbox1.Text = textbox2.Text;
は
textbox2.Text(s);
textbox1.Text(textbox2.Text());
と等価ね
0311デフォルトの名無しさん2009/03/16(月) 17:38:12
>>304
mono入れて実験してみたけど、getterは呼ばれなくない?
obj.prop = exprがexprとして評価されるだけだと思う。
0312デフォルトの名無しさん2009/03/16(月) 20:20:26
dmd2.0.25でstd.process.spawnvpにオプション引数を設定しても、オプション引数が渡されないんだけど、バグかな?
0313デフォルトの名無しさん2009/03/17(火) 19:00:26
>>312 std.process.spawnvp って何?
0314デフォルトの名無しさん2009/03/17(火) 23:13:27
だめだ、エスパーできんw
0315デフォルトの名無しさん2009/03/18(水) 15:09:52
関数呼び出しのスタックから大域脱出するのに例外を使うのはやはりお行儀の悪さを感じてしまう……
0316デフォルトの名無しさん2009/03/18(水) 21:17:48
つtypedef Exception GlobalExit;
0317デフォルトの名無しさん2009/03/19(木) 11:41:34
馬子にも衣装ですね、わかります。
0318デフォルトの名無しさん2009/03/19(木) 17:32:56
C++0xってIEEE 754は対応しないんだよな?
0319デフォルトの名無しさん2009/03/19(木) 22:09:35
何故?
今そんな話を?
0320デフォルトの名無しさん2009/03/19(木) 23:40:46
.NaNと.infinityをモリモリ使いたいんで、
C++で全部再現するのが面倒だったなあと。
0321デフォルトの名無しさん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日くらいハマった…バグが出る時とでないときがあるらしい…
0322デフォルトの名無しさん2009/03/21(土) 02:38:31
どこがおかしいのかわからねえ
03233212009/03/21(土) 02:57:05
>>322 説明不足スマン…
仕様だと継承するinterfaceをスーパークラスとは別に指定した場合、interfaceの関数は継承しないことになってる。
> インターフェイスを再実装するには、その全ての関数を実装しなければなりません。 基底クラスからの継承はされません
つまり、>>321のコードはCCにおいて、ICを指定したためにIAのa()関数が継承されないことになる。
本来なら
class xxx.CC interface function IA.a isn't implemented
とか出るべきでは?ということ。
0324デフォルトの名無しさん2009/03/21(土) 20:02:03
D言語研究の既存のページが編集できないのはなんとかならないんでしょうか
たまにスパムを見つけては消してるんで、新しいページ作成削除は誰でもできるみたいですが
0325デフォルトの名無しさん2009/03/22(日) 00:19:11
>>320
YouC#使っちゃいなYo
0326デフォルトの名無しさん2009/03/22(日) 03:01:48
バージョンアップまだ?
0327デフォルトの名無しさん2009/03/22(日) 04:02:03
>>322
なんかおかしいね
0328デフォルトの名無しさん2009/03/22(日) 04:05:30
間違えた
>>327は>>323へ
0329デフォルトの名無しさん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
{
}
0330デフォルトの名無しさん2009/03/22(日) 04:40:16
>>329
それはアクセプトされるべきだと思うけどなあ
0331デフォルトの名無しさん2009/03/22(日) 05:02:39
>>330
そう? interfaceの継承とは何かもっと詳しく定義しないといけないのかな
03323312009/03/22(日) 05:20:31
interface A{void a();} interface B : A {}
と
interface B {void a();}
のときBだけ見たら両方同じなのかなと思ったんだけど
0333デフォルトの名無しさん2009/03/22(日) 09:41:57
IA 自体が基底インターフェースになってるから問題ないんじゃないの?
インターフェース単位で vtbl 作られるという形なので、
IC は IA に対する void a() が存在していればそれで問題ないと思う。

無関係のインターフェース間で同名の関数がある場合、
それは区別しないといけない。
0334デフォルトの名無しさん2009/03/22(日) 09:53:53
意味論的にコンフリクトするケースか。
interface IB : IA
interface IC : IA
の IA は、同じものを指しているのか、違うものを指しているのか
ってことになるか。
同じものだ(ICはIAの拡張部分のみだ)とみなしているなら、
再実装を要求しないのはおかしくないし
(「IA自体」の再実装は class CC:CB,IA,IC と 書いていないので要求していない)、
違うものだ(ICの一部だ)とみなすなら、再実装を要求しないといけないと。
仕様には書かれてないよね?
0335デフォルトの名無しさん2009/03/22(日) 09:59:57
>>333
それじゃ多重継承と同じ問題があるような…

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

ってのがインターフェースじゃん
名前が被ったら被ったインターフェースごとに同名の関数用意させられるんじゃ意味がない
0336デフォルトの名無しさん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が実装されてないといけないけど、
これで通るから、仕様はともかく実装上は区別されないっぽいな。
03373312009/03/22(日) 21:43:07
>>335
そうそう
interfaceはsignatureが同じなら同じメソッドと見なすもんだ
0338デフォルトの名無しさん2009/03/22(日) 22:06:50
>>332は正しいので>>329はコンパイルできるべきではなくて
>>312,323の言うように
class xxx.CC interface function IA.a isn't implemented
とでも表示してエラーになるべき
でOK?
0339デフォルトの名無しさん2009/03/22(日) 22:07:45
>>312.323じゃなくて>>321,323だったorz
0340デフォルトの名無しさん2009/03/22(日) 23:03:27
interface IA{ void a(); }
interface IB:IA{ }
class Ca { void a(){};}
class CC:Ca, IB{ }
これも通る。
祖先クラスは関数さえ実装していれば祖先インターフェイスを継承している必要すらないみたい。
 派生インターフェイス=祖先インターフェイスの関数が実装されていることを前提としたインターフェイス
って解釈すればこっちの実装もありかな。
0341デフォルトの名無しさん2009/03/22(日) 23:29:27
>>340
> 派生インターフェイス=祖先インターフェイスの関数が実装されていることを前提としたインターフェイス
ごめんよくわからん
「CCはCaからaを継承しているからaの実装を持っている」→
「CCはIBの制約を満たしている」→「CCはvalid」
と言う論理なら
> インターフェイスを再実装するには、その全ての関数を実装しなければなりません。 基底クラスからの継承はされません
この仕様に違反しないか?
0342デフォルトの名無しさん2009/03/22(日) 23:36:23
>>340-341
つまりIBのCCに対する制約には2つの考え方があって;
(a)「CCがvoid a()を持っていること」
(b)「CCで新しいvoid a()を定義すること」
今の仕様は(b)なのに実装は(a)になっているという問題か
0343デフォルトの名無しさん2009/03/23(月) 01:20:29
>>341
「IBを実装すると言ったが、IAを実装するとは言ってない。だから、
 IBの関数なら再実装するが、IAについてはキャストできれば十分なのだ!」
って理屈。

IAにキャストできるってことは、IAかその派生クラスを継承してる必要があって、
そして当然IAの要求する関数を実装してる必要もある。
だから結局IAの関数は実装されてる必要があるけど、キャストに必要なそれに
ついては(再実装の話じゃないから)基底クラスから継承してもおk、って感じ。
0344デフォルトの名無しさん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 { ... }

を区別することができるが・・・デメリットや不整合になる点はないのかな
0345デフォルトの名無しさん2009/03/23(月) 08:49:19
しかしacceptされるものだとしてもだ
何らかの条件でバグが発現するというのだからやっかいな問題だね
具体的に最初に言われたバグが起こるコードを示してもらえたらいいのだけど
03463212009/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に関連する議論に意味がないわけじゃないけど。
0347デフォルトの名無しさん2009/03/23(月) 19:14:31
>>346
よく再現できたね
何がどういうバグなのかわからんのだがw
0348デフォルトの名無しさん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・・何という・・・。
0349デフォルトの名無しさん2009/03/24(火) 12:22:29
>>348
懐かしい
0350デフォルトの名無しさん2009/03/24(火) 21:54:52
Visual Dがついに・・・
いや、やつならD#とかやりかねないな
0351デフォルトの名無しさん2009/03/24(火) 22:59:53
D#よりD/CLIのほうがほしい
0352デフォルトの名無しさん2009/03/25(水) 01:58:29
>>346
ttp://d.puremagic.com/issues/show_bug.cgi?id=2758
03533212009/03/25(水) 10:48:03
>>352
おぉ、ありがとうございます。バグ報告お疲れ様です。
0354デフォルトの名無しさん2009/03/25(水) 18:16:00
CLR上で動かしたらオリジナルより速い、なんてな。
0355デフォルトの名無しさん2009/03/25(水) 18:45:33
DとC#の速度を比べればそうはならんでしょ。
0356デフォルトの名無しさん2009/03/25(水) 22:24:38
C#ではなく、C++/CLIのアンマネージドコードと比べるべきなのでは?
0357デフォルトの名無しさん2009/03/26(木) 01:11:52
C++/CLIで書いてるとこをD/CLIで書きたいなぁ・・
0358デフォルトの名無しさん2009/03/26(木) 22:46:31
Tangoもうじき新しいバージョンきそうだな
0359デフォルトの名無しさん2009/03/26(木) 23:43:33
vimの補完機能ってD言語で使いたいんだけどどうすればいいの?
0360デフォルトの名無しさん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 (↑はリンク切れ)
0361デフォルトの名無しさん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
0362デフォルトの名無しさん2009/03/27(金) 09:17:58
型なしラムダまだー
0363デフォルトの名無しさん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
0364デフォルトの名無しさん2009/03/27(金) 16:02:33
>>360
ありがとう
0365デフォルトの名無しさん2009/03/28(土) 01:03:46
Tango 0.99.8 前のバージョンは落とせないのか
これは…あんまりだorz
0366デフォルトの名無しさん2009/03/28(土) 01:07:33
http://www.dsource.org/projects/tango/wiki/PreviousReleases
>* Final refinement of the IO

io.devices.stdout とか出て軒並みこける dsss 無限ループ
みたいになって悩む。というか Previous あるな(恥
0367デフォルトの名無しさん2009/03/28(土) 01:37:19
以前のバージョンを使うのか…?
あんなにみんなが焦がれた大量破壊変更なのに。
といっても、それほど苦労せずに移行出来ると思うけど…
Bufferの機能分岐がちょっと面倒だけど、基本的にそれ以外は難なく移行できたな。
0368デフォルトの名無しさん2009/03/28(土) 18:32:52
* FTP adapter for the VFS by Lester L. Martin II
WebDAVまだー?
0369デフォルトの名無しさん2009/03/28(土) 22:00:56
>>361 バグかな?
ttp://d.puremagic.com/issues/ には見あたらない
0370デフォルトの名無しさん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すると早く直ると思う
0371デフォルトの名無しさん2009/03/29(日) 03:38:14
でも一番上のimport関係のバグが放置されてるんだよなあ・・・orz
0372デフォルトの名無しさん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;
}
0373デフォルトの名無しさん2009/03/29(日) 13:50:34
writeflnの%sにintをぶっこんでるからじゃないの?
0374デフォルトの名無しさん2009/03/29(日) 19:07:32
>>372
非静的なメンバ関数は隠し引数thisを持つ(EAX経由で渡される)が、その関数をiX.yに代入した時に引数が消えているから。
0375デフォルトの名無しさん2009/03/29(日) 19:30:44
やったーtagsデキタヨー
03763722009/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;
 }
}
0377デフォルトの名無しさん2009/03/30(月) 00:27:04
>非静的関数をCへのIFっぽく静的関数として扱う
ごめんわからんのでkwsk
03783722009/03/30(月) 07:37:24
>>377
わかりにくくてすいません。

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

すいません、サンプルコードかければいいんですが時間が…。
0379デフォルトの名無しさん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;
        }
}
0380デフォルトの名無しさん2009/03/30(月) 08:57:14
IFってインタフェースか?
たまに見かけるけどどこの業界でIFなんて略してるんだ
せめてI/Fじゃないとわからん
0381デフォルトの名無しさん2009/03/30(月) 14:40:59
タスクトレイにアイコン表示するのってどうやればいいの?
0382デフォルトの名無しさん2009/03/30(月) 14:59:31
>>381
Win32APIのタスクトレイ関連機能
0383デフォルトの名無しさん2009/03/30(月) 15:13:38
そうか・・・
0384デフォルトの名無しさん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.となる

この二つの問題って既に報告されてたっけ?
03853722009/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 みたいに命名しない?
0386デフォルトの名無しさん2009/03/30(月) 22:04:17
しません。
0387デフォルトの名無しさん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
これじゃだめなの?(ひげをこさえすぎた。ちょっと読みにくいかも。
03883722009/03/30(月) 23:14:38
>>387
おぉ、はい、そうです。
最初はそれを考えたんですが、C側でDのインスタンス(HigeHandle)を意識する
させるのがなんだかなぁと思って>>376しか方法がないかと考えておりました。

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

もちろん僕はD1!
0399デフォルトの名無しさん2009/04/02(木) 00:08:08
俺はD2一択だがな!
今回はバグ取りばかりだな。あとはOPTLINKの改善を持ってD2もいいところまで行きそうだ。
0400デフォルトの名無しさん2009/04/02(木) 00:33:46
TangoのD2対応はどこまで進んでいるのかな?
0401デフォルトの名無しさん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.
0402デフォルトの名無しさん2009/04/02(木) 01:24:52
>>401
D2がbetaじゃなくなるまでサポートしない気なのかね
0403デフォルトの名無しさん2009/04/02(木) 02:55:59
>>402
それじゃ一生(ry
0404デフォルトの名無しさん2009/04/02(木) 08:07:15
やっとalias thisきたか。
つぎはstatic引数だな。
0405デフォルトの名無しさん2009/04/02(木) 08:46:00
>>404 static引数ってなんぞ
0406デフォルトの名無しさん2009/04/02(木) 08:50:11
>>402
そろそろD3が出てもいい頃かと・・・
0407デフォルトの名無しさん2009/04/02(木) 15:21:57
dmdのフォルダ構造変わってない?dflはwindowsフォルダへ入れればいいのかな?
0408デフォルトの名無しさん2009/04/02(木) 15:51:29
>>407
Macサポートがついてから変わったよ(実行ファイルの名前が同じになるからかと)
0409デフォルトの名無しさん2009/04/02(木) 16:42:25
>>407
どこでもいいよ
dmd\src\druntime\importに入れておけばsc.iniを編集しなくてもいいけど
0410デフォルトの名無しさん2009/04/02(木) 17:17:48
D1ってパスに日本語がはいってるを読み込んだりできるの?
0411デフォルトの名無しさん2009/04/02(木) 18:43:05
できるけど
0412デフォルトの名無しさん2009/04/02(木) 19:04:52
じゃあD!にかえよ
0413デフォルトの名無しさん2009/04/03(金) 01:18:08
std.path.joinがWindowsだと引数を三つ以上渡しても無効なの、いつ直るんだろう?
0414デフォルトの名無しさん2009/04/03(金) 01:44:55
>>413 patch書いてくれたら投稿しとくけど
04154132009/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 .. $]);
}
}
04164132009/04/03(金) 02:21:16
patchとかよく分からないけど、これでいいのかな?
やってることは、linux版と同様にif (!more.length)とreturn join(join(p1, p2), more[0], more[1 .. $]);を付け足しただけ。
04174132009/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 .. $]);
}
}
04184132009/04/03(金) 02:30:38
415は間違い
0419デフォルトの名無しさん2009/04/03(金) 03:22:48
>>418 ごめんLinux環境がすぐ用意できないので遅くなる
0420デフォルトの名無しさん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
}
}
04214132009/04/03(金) 04:13:47
そう
Windowsだと第三引数以降が無視されちゃってる

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

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

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

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

俺はVisualStudioのフォームデザイナでd.winforms.FormのデザインをGUIで編集しつつ、
インテリセンスにべったり寄りかかってコード書きながら、
合間合間にリファクタリングブラウザでクラスやメソッドの設計を調整していくわけですよ。
そしてテストを実行してVisualStudio上で緑のバーが伸びきったことを確認すると、
生成されたネイティブなexeファイルを自分のプログラム用フォルダに放り込んで悦に入ると。
0430デフォルトの名無しさん2009/04/04(土) 10:47:41
>>424
検証してみたのでおいておきますね
つ http://tinyurl.com/c9pbyn
0431デフォルトの名無しさん2009/04/04(土) 13:10:18
括弧の対応とかセミコロンを忘れてコンパイラが無限ループに
なっちゃうとき、どこが問題か見つける方法ってない?
0432デフォルトの名無しさん2009/04/04(土) 17:33:06
alias thisはクラスや構造体をホイホイ扱うためのもので
typedefは移植性を上げるためのものだと思う
0433デフォルトの名無しさん2009/04/04(土) 21:40:15
2.027@winがほとんど動かないのって俺だけ?
0434デフォルトの名無しさん2009/04/05(日) 02:25:45
>>432
型に小さなラッパをつけたい場合の用途も結構大きいと思うが。
0435デフォルトの名無しさん2009/04/05(日) 08:28:05
typedefで済むんならtypedefでいいんじゃね。一行だし。
仮にtypedefをalias thisで完全置換したらわかりにくくなりそうだ。
まあ必要ないってこともないんじゃないかなと思う。
0436デフォルトの名無しさん2009/04/05(日) 08:49:26
intと等価な型を宣言したいときなんかはalias thisは使えないかな
0437デフォルトの名無しさん2009/04/05(日) 13:01:25
>>433
ちょっと動くってことはimport関連のパス間違ってるんじゃないか?
sc.iniとか調べてみるといいよ。
0438デフォルトの名無しさん2009/04/05(日) 23:10:12
動かないときは
全部消して入れ直すべし
0439デフォルトの名無しさん2009/04/06(月) 02:03:13
あれ???
typedefした/された型同士は相互に代入できなかったんじゃなかった?
0440デフォルトの名無しさん2009/04/06(月) 02:05:48
リテラルは暗黙変換されるのか
知らなかった
0441デフォルトの名無しさん2009/04/07(火) 00:05:06
>>436
完全に等価なのは無理だよね
テンプレートでは外側の型が優先されるから
そこでも適切に化けないと引っかかったりする
0442デフォルトの名無しさん2009/04/07(火) 17:53:54
誰かD言語wiki作ってよ
0443デフォルトの名無しさん2009/04/07(火) 18:17:56
既存のwikiじゃ駄目な理由でもあんの?
0444デフォルトの名無しさん2009/04/07(火) 18:37:45
導入方法とか詳しく書いてほしい
0445デフォルトの名無しさん2009/04/07(火) 18:57:15
詳しく書かないとわからないような人が
この言語を使うのは難しい
0446デフォルトの名無しさん2009/04/07(火) 19:01:14
>>444
最低限どの導入か書いてくれないと
dmdとかだと展開してPATH通すだけだし
0447デフォルトの名無しさん2009/04/07(火) 19:14:21
今から新しくwikiを作ったり導入方法を書き下ろす必要があるのかな
既存の情報だけでこの10年近く大勢のの人間が導入できたというのに…
0448デフォルトの名無しさん2009/04/07(火) 19:25:09
もうあるからいらね>wiki
0449デフォルトの名無しさん2009/04/07(火) 19:27:37
イラネ
0450デフォルトの名無しさん2009/04/07(火) 19:34:36
Dsciteどこいったの?
0451デフォルトの名無しさん2009/04/07(火) 19:57:05
お亡くなりになりました
0452デフォルトの名無しさん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
0453デフォルトの名無しさん2009/04/08(水) 01:38:10
そうか
0454デフォルトの名無しさん2009/04/08(水) 02:41:58
バージョンアップはいいことだ
0455デフォルトの名無しさん2009/04/08(水) 08:45:11
Dsciteのページが無くなった
0456デフォルトの名無しさん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
0457デフォルトの名無しさん2009/04/09(木) 09:28:43
早っ
そして酷いバグだ
0458デフォルトの名無しさん2009/04/09(木) 12:45:14
四則演算を間違うバグの次にひどいかもしれんなw
0459デフォルトの名無しさん2009/04/09(木) 12:46:33
ちゅうかテスト書こうよ・・・
DStressのD2版必要だよなあ
0460デフォルトの名無しさん2009/04/09(木) 12:51:46
言語組み込みの単体テストは何のためにあるのかw
0461デフォルトの名無しさん2009/04/09(木) 15:01:13
Internal error: ..\ztc\cod4.c 353

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

でも、最近はCPUパワーで何とかなっちゃうのかね。
32bitなんか一瞬でカウントしちゃうし、確かにそういうテストを書くこともあるんだが…
0465デフォルトの名無しさん2009/04/09(木) 22:17:52
そこは別の言語の実装を使ってDのソースを書いてだな
0466デフォルトの名無しさん2009/04/09(木) 22:21:49
別の言語の実装の標準ライブラリとリンクすれば…
0467デフォルトの名無しさん2009/04/09(木) 23:57:20
>>466 候補が思いつかないw
0468デフォルトの名無しさん2009/04/10(金) 12:29:17
いやいや、sqrtなんてマシン語レベルで1命令だろ。
0469デフォルトの名無しさん2009/04/10(金) 16:19:15
だったらバグらなかったんじゃね?
0470デフォルトの名無しさん2009/04/11(土) 10:53:44
逆にどこをどう間違えたらそんなバグが出るのか興味ある。
最適化かなんかのバグかね?
0471デフォルトの名無しさん2009/04/11(土) 11:07:19
bugzillaの方を読むと、-O 有りの時に
リテラルをsqrtに渡した結果がおかしかったらしいから
CFTE周りだと思う。
0472デフォルトの名無しさん2009/04/11(土) 11:08:33
>471
ageちまった、すまん。
0473デフォルトの名無しさん2009/04/11(土) 12:02:56
言語自体がバグってるときにunittestって有効なのかな
今回の場合はさすがに意味ありそうだけど
0474デフォルトの名無しさん2009/04/11(土) 12:09:07
コンパイラのコードに unittest 入れるってことだろ。
でも、dmd は C++ で書いてあるわけだが。
0475デフォルトの名無しさん2009/04/11(土) 12:34:41
CppUnitとか使ってよね・・・
何も使ってないだろ今
0476デフォルトの名無しさん2009/04/11(土) 12:39:01
うん。理想は素晴らしいのに、コンパイラ自体はダメダメ。
いわゆる医者の不養生。
0477デフォルトの名無しさん2009/04/11(土) 12:54:50
andrei作の新phobos触った人いない?
感想とか求む
0478デフォルトの名無しさん2009/04/11(土) 14:58:32
ええい破壊的変更はまだか!
0479デフォルトの名無しさん2009/04/11(土) 16:58:47
バグといえば
Internal error: ..\ztc\cgcod.c 1549
とか出てコンパイルできないバグも全然直らないし
0480デフォルトの名無しさん2009/04/11(土) 18:28:10
interfaceとclassを複数継承しているとき、
両方の型がある関数オーバーロードの解決ってどうなっているんだっけ。
曖昧だからダメといわれるのだろうけど、優先順位は付けられるのかしら。
0481デフォルトの名無しさん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)が呼ばれる
}
0482デフォルトの名無しさん2009/04/11(土) 21:19:27
>>461,479 コードも出さずにバグとな
0483デフォルトの名無しさん2009/04/11(土) 22:01:38
>>481
ありがとう。
結局Eがやりたいのだが、やっぱ曖昧なままか。
派生を外してopDotやalias thisでどうなるかも試してみる
0484デフォルトの名無しさん2009/04/12(日) 00:29:11
The new, new phobos sneak preview
ttp://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=87394
0485デフォルトの名無しさん2009/04/13(月) 15:00:13
サイトは残ってるけどDSciTEだけ無くなってる、もう手に入らないの?
http://dronten.googlepages.com/dscite (DSciTE)
0486デフォルトの名無しさん2009/04/15(水) 01:54:55
更新まだかなー
0487デフォルトの名無しさん2009/04/16(木) 20:55:23
opInって使い道ある?
0488デフォルトの名無しさん2009/04/16(木) 22:40:00
inの役割を踏まえたらopIn_rしか使わないような
0489デフォルトの名無しさん2009/04/17(金) 12:38:24

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

0490デフォルトの名無しさん2009/04/17(金) 12:42:33
他にもっとやることあるから.NETはまだいいよ
0491デフォルトの名無しさん2009/04/17(金) 13:32:31
C#に契約プログラミングが導入されればなあ
0492デフォルトの名無しさん2009/04/17(金) 16:44:58
言語仕様でunittestは神過ぎた
0493デフォルトの名無しさん2009/04/17(金) 22:39:44
>>491
4.0から入るんじゃ?
04944612009/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の返り値としている

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

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

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

void[] data;

assert(data.lengh >= S.sizeof);
auto s = *(cast(S*)data.ptr);
0505デフォルトの名無しさん2009/04/18(土) 21:39:09
エンディアンとか考えなくていいのか?
0506デフォルトの名無しさん2009/04/19(日) 04:46:17
>>504
こういうチェックってassertでいいの?
それとも、普通にifで比較して例外投げた方がいい?
0507デフォルトの名無しさん2009/04/19(日) 05:24:54
実行時にdata.lengh < S.sizeofとなる可能性があって、それが困るなら、
普通にifで比較して例外投げ。
コーディングのバグとしてしかありえず、それを検出したいのなら(関数の使い方が間違っているとか)、
assert。
0508デフォルトの名無しさん2009/04/19(日) 06:19:30
enforce(data.lengh < S.sizeof);
0509デフォルトの名無しさん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;
みたいな感じ?
0510デフォルトの名無しさん2009/04/19(日) 17:33:01
ubyteだろうな。

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

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

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

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

std.stdio.write(int)が使えなくなっている(エラーメッセージが分かりづらい)
std.randomが破壊的に変わりまくり(前のが無駄に分かりにくかったのは確かだが)
std.string.toStringがstd.conv.to!(string)になっていた(deprecatedメッセージが適切すぎてこの機能にありがたさを感じる)
0524デフォルトの名無しさん2009/04/20(月) 22:05:55
しかし……単に数字を吐くだけのときはwrite(ln)を使っていたが、なんか面倒になったな。
0525デフォルトの名無しさん2009/04/20(月) 23:10:54
deprecatedは地味に効いてる気がするよな
0526デフォルトの名無しさん2009/04/21(火) 00:08:48
to!(wchar[])(100); が使えなくなってしもうた
0527デフォルトの名無しさん2009/04/21(火) 01:32:31
to!(wstring)(100)でよくね? 必要に応じて .dup すべし
0528デフォルトの名無しさん2009/04/21(火) 01:37:12
ちなみにD2.xで言ってる
0529デフォルトの名無しさん2009/04/21(火) 02:32:36
rangeの書き方はどうなったのかな?
0530デフォルトの名無しさん2009/04/21(火) 06:23:08
三角関数その他初等関数が早くなっている気がする
しかし各種特異点近傍の振る舞いもやっぱり変わった気がする
あとで確かめてみるけど
0531デフォルトの名無しさん2009/04/21(火) 11:38:13
std.c.stdio.flush()どこ行ったの?
0532デフォルトの名無しさん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回言うのカナ?
0533デフォルトの名無しさん2009/04/21(火) 15:13:21
大事なことだから(ry
0534デフォルトの名無しさん2009/04/21(火) 15:24:11
>>531
core.stdc.stdio.fflush
0535デフォルトの名無しさん2009/04/21(火) 15:45:53
2.028から2.029にしたら
object.d: Error: module object cannot read file 'object.d'
とか出てコンパイルできんようになった…
0536デフォルトの名無しさん2009/04/21(火) 16:12:07
>>534 おおそこかありがとう
0537デフォルトの名無しさん2009/04/21(火) 16:21:40
Windowsなら動いてるけど>>535
動かないときは一旦全部消すのがdmd更新の定石
0538デフォルトの名無しさん2009/04/21(火) 19:29:46
linux版使ってるけど、インストールのたびにdmd.confに書いてあるphobosとdruntimeの位置を修正してる
どうファイルを置くように想定してるのかいまいち分からない
0539デフォルトの名無しさん2009/04/22(水) 11:57:12
string a = std.conv.text(1, "X", new A );
string b = std.string.format(1, "X", new A );
どっちがお好み?
0540デフォルトの名無しさん2009/04/22(水) 12:13:09
意味的に前者かな。
後者を使うなら、やはりフォーマット文字列を与えるべきだと思う。
0541デフォルトの名無しさん2009/04/22(水) 23:45:09
is({ /*code*/ }())

がきもすぎる。
05425352009/04/22(水) 23:49:10
パス名に空白入ってただけでした。死ねばいいのに
0543デフォルトの名無しさん2009/04/23(木) 00:37:29
>>541 それ有効なDのコードかどうかを判定する is か?
0544デフォルトの名無しさん2009/04/23(木) 01:15:50
std.rangeで使われてるね
0545デフォルトの名無しさん2009/04/23(木) 06:29:57
>>542
パスに空白入れると面倒そうなものは
%SystemDrive%dev\とかにぶっ込むと無難。
0546デフォルトの名無しさん2009/04/23(木) 12:54:19
>>541
is式の中にdelegateの呼び出しがあるのか?
どうなるコード?
0547デフォルトの名無しさん2009/04/23(木) 15:20:04
>>546
デジゲートの中身にセマンティクスエラーがなければtrue、さもなくばfalse。
0548デフォルトの名無しさん2009/04/23(木) 16:51:29
電子SFもののアニメかなんかに出てきそうだなw
0549デフォルトの名無しさん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のコンパイルエラー?
こっちのコードに責任があるにしても、エラーメッセージにはまったく登場しないもんでどこを修正すりゃいいのやらさっぱりだ。
対して調べてないけど今日はもう寝る。
0550デフォルトの名無しさん2009/04/24(金) 10:33:49
>>549
writefln(10)とか第一引数にフォーマット与えずに使ってるんじゃないの?
0551デフォルトの名無しさん2009/04/24(金) 11:59:36
writeflnは第一引数にフォーマット必須
writelnはフォーマットなし
ちゃんと使い分けするようになった
0552デフォルトの名無しさん2009/04/24(金) 15:53:11
D言語でC言語で作ったライブラリをスタティックリンクする方法ってありますか?
0553デフォルトの名無しさん2009/04/24(金) 16:18:42
>>552
dmdに引数で*.libなり*.aなり渡してやるか、pragma(lib)つかえば、
特に複雑なことをしなくてもリンクできるはずだが。
0554デフォルトの名無しさん2009/04/24(金) 16:40:02
うーん。
windowsでdmd2.0.26なんだけど
そのままだと Not a Valid Library File て怒られて、
coffimplibとやらで変換してもC側の関数をDから呼ぶと
undefinedになってしまう。
0555デフォルトの名無しさん2009/04/24(金) 16:44:19
そのC言語のライブラリがDMCで作ったやつならなんの問題もないと思うけど、
VCだとほぼ無理だしBCBだと形式に互換性はあるけどちょっと工夫しないとリンクできなかったと思う。
DLLにしてインポートライブラリ作るならどのコンパイラで作ったやつでもリンクできるはず。
0556デフォルトの名無しさん2009/04/24(金) 17:11:13
>>554
リンケージあわせてるか?
0557デフォルトの名無しさん2009/04/24(金) 19:24:46
rangeって結構期待してたが,結局統一できてるのは読み込みだけなんだな.
今後,insertとかも追加されたりするだろうか.
0558sage2009/04/25(土) 00:53:07
"helloworld"のサイズ比較をしてみた
dmd 2.029 --> 120k
gcc 4.3.3 --> 6k
20倍違うのね(;;)

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

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

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

(SDLライブラリを使用しようと、SDL1.2.13のヘッダーを手動で変換してたのですけれども途中で疲れました。
dmd用のを探したけれども古い物しか見つかず、ヘッダーをbit→bool変換しなくてはいけなかったりlibがWIN用でしかも
2種類あったりで?。ビルド時エラー連発になったので、どうせならと新しいのをソースから落としてきました(Linux))
0564デフォルトの名無しさん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
0565デフォルトの名無しさん2009/04/25(土) 12:18:05
>>564
いろいろありがとうございました
ライブラリ、OpenGL関係もあって、めっちゃ感激でした。
0566デフォルトの名無しさん2009/04/25(土) 17:46:16
>>558
Dのが実行ファイルのサイズがでかいのはガベージコレクタが付いてるからで、
特に無駄なコード生成してるというわけではないです。
gccであってもC++でiostreamなんか使うと200KB超えるのであまり気にすることもないと思います。
0567デフォルトの名無しさん2009/04/25(土) 19:45:54
gcstubリンクするという裏技が
0568デフォルトの名無しさん2009/04/26(日) 17:41:50
なんかネタないの?
0569デフォルトの名無しさん2009/04/27(月) 01:37:23
>>568
新しいPhobos解説して
0570デフォルトの名無しさん2009/04/27(月) 21:33:30
>>569
解説って言ってもなあ…
なんか難解なとこある?
0571デフォルトの名無しさん2009/04/27(月) 22:36:48
>>570
どういうときに使うと便利なのか
とか
0572デフォルトの名無しさん2009/04/27(月) 23:59:25
そもそもDってどういうときに使うと便利なんだ
0573デフォルトの名無しさん2009/04/28(火) 00:06:59
バイナリ吐きたいけどC/C++はもうこりごりな時……とか?
0574デフォルトの名無しさん2009/04/28(火) 00:30:20
>>572
サクッと短いアプリ(スクリプトではなく)作ったり
とか
0575デフォルトの名無しさん2009/04/28(火) 00:38:22
軽くてシンプルなGUIライブラリがPhobosにあったらDだけで
生活できるんだがなぁ
0576デフォルトの名無しさん2009/04/28(火) 01:09:57
無いならば 作ってしまおう ライブラリ
0577デフォルトの名無しさん2009/04/28(火) 01:14:58
完成間近になったところで破壊的仕様変更ですね
0578デフォルトの名無しさん2009/04/28(火) 01:17:31
賽の河原かよ
0579デフォルトの名無しさん2009/04/28(火) 12:05:06
そろそろ標準GUIライブラリを決める戦争を始めようか・・・
0580デフォルトの名無しさん2009/04/28(火) 13:43:23
DWTはマルチプラットフォームで使い勝手もいいが、SWTの移植だしDの利点をいかしきれない。そして重い。
DFLはDっぽいコードがかけるしGUIで外観作れて使い勝手がよく軽いが、Winのみ。あと手の込んだものが作りにくい。

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

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

せっかくDの標準にするんだったらDらしいのがいいね
0586デフォルトの名無しさん2009/04/29(水) 15:11:18
手の込んだものが作りにくいと言うのは、DWTと比べたとき、
DFLだけだとTableTreeとかCoolBarとか使えないから、そういうのは自分で作る必要があるってあたり。
そういうときはDWT使うけど、簡単なものはDFLの方が気軽に使えて好きだな。
0587デフォルトの名無しさん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'
05885872009/04/29(水) 19:16:44
Rangeのforeach文に関わるのはfrontじゃなくてheadだし変だなって思って、
ttp://www.digitalmars.com/d/2.0/phobos/std_range.html を見たら
どうやらDMDはisInputRangeと勘違いしているようだ
うぉるたん勘弁してください><
0589デフォルトの名無しさん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にならないようにしてくれないと困るということか
0590デフォルトの名無しさん2009/04/29(水) 20:09:22
DFLのイベントシステムはテンプレートを使って自分で
拡張できるようになっているから若干Dっぽいと言えなくもないんだ

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

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

問題は foreach (ref value; container) とやったとき
コピーしたやつを渡すとループ後に破棄されるからこまる
0599デフォルトの名無しさん2009/04/30(木) 18:03:52
Rangeとイテレータは全く別物なのだが…
0600デフォルトの名無しさん2009/04/30(木) 18:33:50
foreach前後でrangeの状態に変化してほしくない場合は、
コンテナ構造体の場合はコピーコンストラクタでRange状態をコピー元と別に持つようにして、
コンテナクラスの場合は、おとなしくコンテナとは別のオブジェクトをRangeとして実装しろ、
って感じ?
0601デフォルトの名無しさん2009/04/30(木) 18:51:57
そういう使い方ができるrangeはそもそもclassで実装すべきじゃない。
0602デフォルトの名無しさん2009/04/30(木) 19:07:05
boost::rangeでググってきた
RangeとはIteratorの開始点と終了点を持ったものらしい
利点はコンテナに対するアルゴリズムをそのまま使えるということ
D言語はRangeの前にコンテナを用意しろと
0603デフォルトの名無しさん2009/04/30(木) 19:41:58
>>598
> 問題は foreach (ref value; container) とやったとき
> コピーしたやつを渡すとループ後に破棄されるからこまる
containerのfront関数やpopFront関数の返値型を、
ref int front() というように参照返しにしてやればいいっぽいよ。
ref front()だとダメだった。
0604デフォルトの名無しさん2009/04/30(木) 20:39:27
コンテナくらい自分で作れよ… by Andrei
0605デフォルトの名無しさん2009/05/01(金) 00:55:28
foreach (val; container.range)
か
foreach (val; range(container))
で我慢するしかないか
0606デフォルトの名無しさん2009/05/01(金) 00:58:59
構造体で実装すれば何も悩む必要ない
0607デフォルトの名無しさん2009/05/01(金) 14:25:46
const(char)[]をconst(ubyte)[]にキャストしたいんだけど、どうすればいい?
cast(const(ubyte)[])使うと、うっかりconst書き忘れそう。
0608デフォルトの名無しさん2009/05/01(金) 17:48:45
もうここのやつらでコンテナ作ってウォルターに叩きつけようぜ
0609デフォルトの名無しさん2009/05/01(金) 19:11:16
const_cast
0610デフォルトの名無しさん2009/05/01(金) 19:12:09
途中送信

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

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

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

>>624
623じゃないけどそんなのあるってすっかり忘れてた!
どうもありがとう!
0633デフォルトの名無しさん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で確認。
0634デフォルトの名無しさん2009/05/02(土) 23:20:31
どう確かめたか知らんけど、足りなくなったらmmapし、ゴミ集め時はプールに戻すだけ。
0635デフォルトの名無しさん2009/05/03(日) 01:11:03
PowerShell使ってる人が一人ぐらいはいるだろう
俺は使ってないけど
0636デフォルトの名無しさん2009/05/03(日) 02:14:03
某スレでD言語にもconcept的なものがあるのにって言われているけど
そんなのあったっけ
template A(T) if (これのことか?) {}
0637デフォルトの名無しさん2009/05/03(日) 02:19:52
ごめん構文適当かもしれんw
0638デフォルトの名無しさん2009/05/03(日) 02:21:02
D言語開発者 FreeBSD移植の経緯を紹介
ttp://gihyo.jp/admin/clip/01/fdt/200905/01
0639デフォルトの名無しさん2009/05/03(日) 02:36:51
D言語でメモリを開放しようなどと考えないほうがいい・・・
0640デフォルトの名無しさん2009/05/03(日) 02:43:41
>>636
それであってる
省略した形でも勿論使えるので新しいPhobosでは積極的に使われてる
0641デフォルトの名無しさん2009/05/03(日) 02:46:55
だがDにはconcept_mapがない。
0642デフォルトの名無しさん2009/05/03(日) 02:53:25
そこで登場するのがこないだ実装されたalias thisだろう。
ラッパ構造体を作ってやればいい。
0643デフォルトの名無しさん2009/05/03(日) 03:06:09
それっぽいことやってるサンプルコード書いてみてくれん?
0644デフォルトの名無しさん2009/05/03(日) 03:07:21
>>643
それはどれに対するレス?
0645デフォルトの名無しさん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));
}
0646デフォルトの名無しさん2009/05/03(日) 04:30:41
>>643 は >>641-642 へ
0647デフォルトの名無しさん2009/05/03(日) 10:29:41
alias thisの使い道がよく分からない
継承っぽいよね、継承でよくないの?
0648デフォルトの名無しさん2009/05/03(日) 16:12:10
委譲だと思う
0649デフォルトの名無しさん2009/05/03(日) 17:26:50
ダイナミックキャスト専用のswitch文みたいなものが欲しい。
でかいオブジェクトツリーを辿って型別に処理を書く場合、
else ifでキャストを羅列するか、visitorパターンを使うことになるが、
前者はパフォーマンスが気になるし、後者はツリーの型を増やす拡張がやりにくい。
Dのキャストの実装を見たところ、classinfoとインターフェースを辿って比較してるだけなので、
switch文中でそれをマージして無駄のないジャンプを作ってくれれないかなぁみたいな。
0650デフォルトの名無しさん2009/05/04(月) 06:01:39
>>649
テンプレートを駆使してそれらしいものを作ってはみたが,毎度のごとくコンパイラのバグでコンパイルすらできなかった……orz
0651デフォルトの名無しさん2009/05/04(月) 07:42:30
>>649
ちょっと例文を頼む
本家にポストしてみるわ
0652デフォルトの名無しさん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 ...
)
0653デフォルトの名無しさん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;
}
}
0654デフォルトの名無しさん2009/05/04(月) 14:50:21
>>652-653
念のためだが、classinfo_listはclassinfoのinterfacesとbaseをたどって作るrangeでいいんだよね?
0655デフォルトの名無しさん2009/05/04(月) 14:51:38
それとも内部構造?
0656デフォルトの名無しさん2009/05/04(月) 15:11:08
ふつうにclassinfoでswitchできればよくない?
switch(o.classinfo){
case C.classinfo: break;
case B.classinfo: break;
case A.classinfo: break;
}
新しい構文とか必要ないし、こんな感じの拡張の方が嬉しいな
0657デフォルトの名無しさん2009/05/04(月) 15:40:24
>>654
baseを辿って作るrangeか配列で。インターフェースはこの配列自体を
複数持たせるとかが必要かな・・・。クラスの階層を使ったswitchを
やめてただのループにすればbaseとinterfaceを混ぜた配列でいいと思うけど、
折角使えそうなものを使わないのも勿体ないかなぁと。

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

> Internal error: toir.c 183
あばばばばば
0660デフォルトの名無しさん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展開で作れるか考えた方がいい気がするのでポスト中断。
0661デフォルトの名無しさん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
}
0662デフォルトの名無しさん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;
}
0663デフォルトの名無しさん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(){}
0664デフォルトの名無しさん2009/05/04(月) 20:20:04
>>663
それだとAの派生クラスCを作ったときにtypeMapも更新しなくちゃいけないよね?
0665デフォルトの名無しさん2009/05/04(月) 21:59:15
なんのためのコンパイルタイムリフレクションだと思ってるんだよ。
0666デフォルトの名無しさん2009/05/04(月) 22:09:53
baseクラスへのキャストが考慮されてないし、typeMapを複数作りたかったら
無条件の登録はできないわけで、リフレクションがあったって大して変わらんかと。
0667デフォルトの名無しさん2009/05/04(月) 22:46:56
ケースの数nに対して、O(n)オペレーション必要になるが、>>659みたいなのでいいんじゃないかね。
0668デフォルトの名無しさん2009/05/06(水) 16:40:05
また (new A).method(); を new A.method(); と書きたいと言ってる人がいる
0669デフォルトの名無しさん2009/05/06(水) 19:13:48
いっそA.new.method()と書きたいなぁ
0670デフォルトの名無しさん2009/05/06(水) 21:18:52
それなんてRuby?
0671デフォルトの名無しさん2009/05/06(水) 22:39:27
AutoHotKeyいじってるんだけど
これ使えば好きなエディタを使ってIDEで使いたい機能のほとんど実装できそう
インテリセンスも辞書引きも、デバッガ呼び出しも
コード解析してdotにクラス図描いて表示も、クラスビューも
頑張ればほとんどの事が出来そうな気がする
0672デフォルトの名無しさん2009/05/07(木) 01:19:41
言い出しっぺの(ry
0673デフォルトの名無しさん2009/05/07(木) 02:44:38
dmd2.029を使ってコンパイルしたDLLをCのプログラムからLoadLibrary()すると
WinXP環境ではLoadLibrary()が失敗する。
Win7RCならいけたからたぶんVistaでもいける気がする。
DのプログラムからDで作ったDLLを読むとWinXPでも成功する。

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

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

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

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

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

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

みたいに…
0702デフォルトの名無しさん2009/05/12(火) 19:26:46
>>697
でけたよ
http://codepad.org/MKHVHlFS
0703デフォルトの名無しさん2009/05/12(火) 22:05:38
すげーことするねw
0704デフォルトの名無しさん2009/05/12(火) 22:31:23
なんかちょっと見ないうちに黒魔術度が深刻化しつつあるような
0705デフォルトの名無しさん2009/05/13(水) 02:46:07
わけわからんw
0706デフォルトの名無しさん2009/05/13(水) 06:49:49
なんかLispのマクロみたいになんでもできそうだなw
0707デフォルトの名無しさん2009/05/13(水) 07:21:05
いったんテンプレート内でimportしてから選別して輸出するのか。
こんなことできるんだなー。
0708デフォルトの名無しさん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
0709デフォルトの名無しさん2009/05/13(水) 19:41:46
bug fixたくさん
0710デフォルトの名無しさん2009/05/13(水) 21:28:33
>classic global storage now defaults to TLS
おお凄い。来てるな未来。
マゾも狂喜w
0711デフォルトの名無しさん2009/05/13(水) 22:50:46
        *'``・* 。
        |     `*。
       ,。∩      *    もうどうにでもな〜れ
      + (´・ω・`) *。+゚
      `*。 ヽ、  つ *゚*
       `・+。*・' ゚⊃ +゚
       ☆   ∪~ 。*゚
        `・+。*・ ゚
0712デフォルトの名無しさん2009/05/13(水) 23:31:17
これだからD追っかけはやめられない
0713デフォルトの名無しさん2009/05/13(水) 23:42:17
互換性完全無視なのが、うぉるたんって感じだな。
なんというか自分のコードを対応させることを考えるとわくわくしてきたぜ
0714デフォルトの名無しさん2009/05/13(水) 23:57:49
やはり時代は並列プログラミングか。

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

>>715
配列演算もまだ最適化できていない(むしろ遅い)んで、なんとも……
0721デフォルトの名無しさん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; // 早い

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

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

これを

typehash[int] = 1;

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

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

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


あと関係ないけどJava7からプロパティもクロージャも外されて超がっかりだお……
0754デフォルトの名無しさん2009/05/17(日) 18:28:25
D言語の64bit変数ってビングエンディアンなの?
ulongをStream.writeBlockで出力したらビッグエンディアンだった件
07557542009/05/17(日) 18:40:51
どうみても勘違いでした。スマソ
0756デフォルトの名無しさん2009/05/17(日) 22:37:54
このような、エンディアンの問題にしても、仕様としてversionで分けられるように考えられているところが好み。
Cでも定石で簡単に分けられるけど、言語仕様としてこういうのが入ってるのがいい。
0757デフォルトの名無しさん2009/05/17(日) 23:47:31
ささやかだがtypedefで初期値を与えられるのがいい
配列作るときに重宝する
0758デフォルトの名無しさん2009/05/18(月) 14:35:51
クラス名をコンパイル時にstringとして得る方法ってありましたっけ
0759デフォルトの名無しさん2009/05/18(月) 14:40:00
.stringof?
0760デフォルトの名無しさん2009/05/18(月) 14:47:44
ありがとうございました。できました。
本当はモジュール名込みでほしいのだが、まあ動くのでよし
0761デフォルトの名無しさん2009/05/18(月) 17:26:20
>>760
this.classinfo.name
0762デフォルトの名無しさん2009/05/18(月) 19:13:13
>>761
.classinfoがランタイムにしか取れんのです
ClassName.classinfo.nameは静的に決まっていてもいいはずなのにランタイム扱いなので、
実行時にclassinfoを取って比較したいのにできなくて困っていたという。
0763デフォルトの名無しさん2009/05/18(月) 19:38:03
>>762
コンパイル時の話か。
ごめんね、ちゃんと読んでなかった。
0764デフォルトの名無しさん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が落ちるんだけどバグ?
0765デフォルトの名無しさん2009/05/19(火) 23:42:10
バグに見える。
0766デフォルトの名無しさん2009/05/20(水) 10:02:28
-2になってtrueってわけではないのかなぁ。
最近、ROMってるだけじゃわからんくなってきたなぁ。
0767デフォルトの名無しさん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);
}
0768デフォルトの名無しさん2009/05/20(水) 11:49:16
そういえば、下手な-inlineよりpureな関数の最適化の方が速いことがあるな
07697642009/05/20(水) 15:42:38
書いたやつだとopCmpが一度も呼ばれてなかったみたい。
で、いろいろやってみたら const int opCmp(ref const (A) o) { hogehoge; } にしないといけないらしい、面倒だ…
自己解決で申し訳ない。
0770デフォルトの名無しさん2009/05/21(木) 17:45:41
>>767 よくわからない
0771デフォルトの名無しさん2009/05/21(木) 18:48:23
>>770
> コンパイル時にアップキャスト可能か調べたりできたっけ?
の話は、コンパイル時にテンプレートやstatic ifで受け取った型があるクラスの派生かどうかを調べたい、というものです。
std.traits.BaseTypeTupleのうちから特定のクラスを探すには……というので簡単な方法があればいいのですが、
なければ自分で作るのかなと。
0772デフォルトの名無しさん2009/05/21(木) 19:02:12
>>771
is使えば出来るだろ。
0773デフォルトの名無しさん2009/05/21(木) 19:21:32
is ( : )
っすね。すっかり忘れていましたorz
0774デフォルトの名無しさん2009/05/21(木) 23:39:17
isXxxxxx templateにしたほうがいいかもな
ややこしいのは自分様用に
0775デフォルトの名無しさん2009/05/22(金) 00:09:18
なんだ自分様用ってwごめんw
じぶんよう^H^Hようなんだ・・・・
0776デフォルトの名無しさん2009/05/22(金) 02:09:22
久々に触ってみたら構造体のthisがリファレンスになっとるんだね
普通に使ったら値型なのにコレはキモチワルイw
0777デフォルトの名無しさん2009/05/22(金) 12:33:40
thisは参照!ってことだね
0778デフォルトの名無しさん2009/05/23(土) 01:46:00
静かだ…
0779デフォルトの名無しさん2009/05/23(土) 22:11:13
D/CLIまだー?
0780デフォルトの名無しさん2009/05/23(土) 23:16:58
まず標準ライブラリだろうに
0781デフォルトの名無しさん2009/05/24(日) 02:04:14
CLIになれば.NETが使えるよ
0782デフォルトの名無しさん2009/05/24(日) 03:07:54
.NETが使えれば本格的なGUIライブラリがあるからさ
0783デフォルトの名無しさん2009/05/24(日) 05:09:56
C#のポジションじゃなく、使いやすいC++/CLIというポジションなら、ありかもしんない。
0784デフォルトの名無しさん2009/05/24(日) 12:14:46
Dの時代はあと何年後に訪れますか?
0785デフォルトの名無しさん2009/05/24(日) 12:20:43
RubyのようにD言語にとっての海外コミュである日本から盛り上げるしかあるまい
0786デフォルトの名無しさん2009/05/24(日) 14:55:53
久しぶりにD触ったんだけど過去に作ったの全部コンパイル通らなくなってた\( ^ o ^ )/
1.x系は安定してる?
破壊的バージョンうっぷは2.x系のみ?
そろそろ1.x系で自作アプリをごにょごにょ作っても大丈夫?
0787デフォルトの名無しさん2009/05/24(日) 15:12:54
作るなら2.xで作ったほうが、D言語の旨味に浸れる
0788デフォルトの名無しさん2009/05/24(日) 16:37:30
おまえらホントMだな
0789デフォルトの名無しさん2009/05/24(日) 21:13:22
1.x用を後々2.x用に直すことを考えながら作るくらいなら
もう最初から2.x専用で作った方が楽だ
0790デフォルトの名無しさん2009/05/24(日) 21:23:33
Javaだって今時は1.4無視してJ2SE5.0以降用に書くのが普通だからな
PHPだって5.2以降じゃないと動かないスクリプトたくさんあるし
過去のバージョンにも対応させる必要はないと思う
0791デフォルトの名無しさん2009/05/24(日) 21:29:06
ちなみに>>786の昔のコードって1.xどころかもっと前のでは?
だったらDではコンパイルできなくて当然
0792デフォルトの名無しさん2009/05/24(日) 21:34:13
template eval(string code) {
version(D_Version2) mixin(code);
else mixin(convert_for_d1(code));
}
0793デフォルトの名無しさん2009/05/24(日) 23:27:00
>767
D2の std.signals の再発明っぽいね。

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

まあ言語としてはだいぶ洗練されてきたが、
標準ライブラリの弱さがどうしてもなあ。
JavaほどでなくていいがCよりは充実させてほしい
0805デフォルトの名無しさん2009/05/25(月) 16:00:50
>>804
別々enum同士で同じ名前が定義できなくなりそうだ。C++みたいに。
0806デフォルトの名無しさん2009/05/25(月) 16:01:45
なんで?
0807デフォルトの名無しさん2009/05/25(月) 16:10:33
関数引数で列挙型要求されてるときに実引数として列挙型定数を渡す場合、
型名を修飾しなくていいようにしてほしい、って話だろうな。
C++のように常に修飾が要求されないのは気持ち悪い気がする。
0808デフォルトの名無しさん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);
0809デフォルトの名無しさん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);
これが曖昧になるって話だと思う。

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

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

>>829
std.algorithmで見た気がする
0831デフォルトの名無しさん2009/05/27(水) 23:27:03
D始めようと思ってるんですが、コンパイラ何使ってますか?
ちなみにXPとUbuntuです
0832デフォルトの名無しさん2009/05/27(水) 23:42:37
>>796-797らしいからdmd一択じゃね。
バージョンの話なら、2もそろそろ破壊的変更がなくなるらしいから、これから1をつかう理由もないかと。
0833デフォルトの名無しさん2009/05/27(水) 23:47:27
ちょくちょく貼られてるD.NETも忘れないでください
実用度の程は知らんが
0834デフォルトの名無しさん2009/05/28(木) 00:03:52
QtD 0.2 release announcement.
0835デフォルトの名無しさん2009/05/28(木) 12:09:22
>>832
どうもです
dmd入れてみます
0836デフォルトの名無しさん2009/05/28(木) 15:20:33
D.NETもコンパイラはdmdなのでは
0837デフォルトの名無しさん2009/05/28(木) 15:37:32
dmdが.Netのニーモニックはけるの??
0838デフォルトの名無しさん2009/05/28(木) 16:21:32
llvmだな、llvmがjavaとdotnetのvmコード吐けばいい
0839デフォルトの名無しさん2009/05/28(木) 16:43:03
バーチャルマシーンの上でさらにバーチャルマシーンが動くのか。。。
なんかすごいことになってるなぁ。
0840デフォルトの名無しさん2009/05/28(木) 23:10:34
ひさしぶりにD言語使おうと思ったらDSciTE無くなってるCode::Blocksにするか・・・
0841デフォルトの名無しさん2009/05/28(木) 23:13:54
>>840
今WinのCodeBlocksでDバイナリ作るとexe吐く際に異常終了扱いされるバグが出てるんだが、
もしかしたら俺だけかもしれないので試してみていただきたい。
08428402009/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;
> }
0843デフォルトの名無しさん2009/05/28(木) 23:56:56
ありがとう。
自分の環境だと2台のマシン(Vista&XP)両方でそうなるのだが、まあがんばってみるわ
0844デフォルトの名無しさん2009/05/29(金) 01:42:07
ttp://tinyurl.com/candcpp2d (C/C++に疲れた人のD言語)
すいませんがまたアドレス変わりました
0845デフォルトの名無しさん2009/05/29(金) 23:50:50
ldc 0.9.1 released
0846デフォルトの名無しさん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
0847デフォルトの名無しさん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を使っちゃう
0848デフォルトの名無しさん2009/05/31(日) 00:06:58
TLS変数の特定

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

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


immutableへの移行

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

sharedとしてマーク

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

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


void static_fun() {}

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

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

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

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

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

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

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

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

あとは、名前の衝突だけど、これは普通に複数のインターフェイスを実装する場合にでも
起こりうることだから、C#みたいにどのインターフェイスを実装するのか明示できるようにして欲しいね。
0872デフォルトの名無しさん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();
0873デフォルトの名無しさん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
0874デフォルトの名無しさん2009/06/09(火) 01:34:02
そういうことが可能なわけね
0875デフォルトの名無しさん2009/06/11(木) 20:43:25
  イ`ヘ
 /: :| ヽ
/ : :/  ヽ ___   _,,,:. .-: :´彡フ
_ノ\_∠: : : : : : : : :`: :-: :,:_:/彡 /
      ( : : : : : : : : : : : : : : `ゝ  /
  マ  r::/: /: : | : : : : : : : : ::\ /
      //: /: : : |: : | |: : |: _: : : :ヽ
  ジ  {/ 7|`\/i: /|:|/|´: : : : :|ヽ
     〉 ,‐-‐、`|7 || |_::|,_|: : :|:::|: |
  で / r:oヽ`    /.:oヽヽ: :|: | :|
     { {o:::::::}     {:::::0 }/: :|N
  っ  | ヾ:::ソ     ヾ:::ソ /|: : |
 !? ヽ::::ー-.. /ヽ ..ー-::: ヽ::| r--ッ
-tヽ/´|`::::::::::;/   `、 ::::::::::: /: i }  >
::∧: : :|: |J   \   /   /::i: | /_ゝ
. \ヾ: |::|` - ,, ___`-´_ ,, - ´|: : :|:::|
   ヽ: |::|\     ̄/ /|  |: : :|: |
0876デフォルトの名無しさん2009/06/13(土) 09:35:39
http://www.amazon.com/D-Programming-Language-Andrei-Alexandrescu/dp/0321635361/
andreiタソの本キター?
0877デフォルトの名無しさん2009/06/13(土) 16:06:05
変態が本書いちゃったのかwwww
D終わったな
0878デフォルトの名無しさん2009/06/13(土) 20:15:44
むしろ始まったんダヨ
0879デフォルトの名無しさん2009/06/14(日) 02:48:51
ミックスインメタプログラミングとかを駆使した変態テクニックがいっぱい載ってるんだろうなぁ
0880デフォルトの名無しさん2009/06/14(日) 04:03:51
コンストラクターは
this(){
}
で宣言できるんだな。
c#だったら
classの名前と同じ名前で宣言してたけど
thisで宣言できるとこっちのほうがわかりやすくていいな。
0881デフォルトの名無しさん2009/06/14(日) 05:01:02
templateがある言語はclassごとにコンストラクタが異なっているといろいろめんどくさいんじゃなかったっけ
0882デフォルトの名無しさん2009/06/14(日) 05:01:42
>>879 案外普通のD言語教本だったりして
0883デフォルトの名無しさん2009/06/14(日) 06:00:27
んで和訳はいつ出るのかなワクワク
0884デフォルトの名無しさん2009/06/14(日) 14:47:31
コンストラクタを表すならthisよりnewの方が自然だったんじゃないかとよく思う
0885デフォルトの名無しさん2009/06/14(日) 15:23:17
アロケータも記述できるようにするなら、
コンストラクタがthisでアロケータがnewな現状でいいと思う。
0886デフォルトの名無しさん2009/06/14(日) 15:25:19
>>884

this() {
this(default_value);
}

this(value) {
...
}

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

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

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

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

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

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

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

なんでD1.0使うべきなんだろうが、PhobosよりTangoの方がいいの?まだバージョン1.00になってないみたいだが…
0951デフォルトの名無しさん2009/06/18(木) 22:27:46
どうせD3.0でもまた標準ライブラリ一から作り直しだろ
その時にTangoも1.0になるんじゃないの
0952デフォルトの名無しさん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
}

この一番下の奴は通るようにしたら何か不味いことでもあるのかな?
何となく通っても良さそうな気がするけど
0953デフォルトの名無しさん2009/06/19(金) 00:59:24
>>947
> じゃ、これなに?w
これなにって...ないってことじゃないか
0954デフォルトの名無しさん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)

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

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

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

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

ごめんなさい
俺が悪かったです
0963デフォルトの名無しさん2009/06/19(金) 21:22:57
==の左辺がconstなら右辺もconstであるべきだとは思うけどねえ
0964デフォルトの名無しさん2009/06/19(金) 21:38:34
ん?そうなるとopEqualsとかをオーバーライドするときは出来るだけconstつけた方がいいのか
さもないとconstにした途端比較できなくなる
0965デフォルトの名無しさん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;

  }

}

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

const bool opEquals(const Object)

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

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