D言語 Part21
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2009/02/11(水) 23:45:51過去スレ、関連スレは >>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:31http://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以上
0004デフォルトの名無しさん
2009/02/11(水) 23:51:18乙です
0005デフォルトの名無しさん
2009/02/12(木) 00:16:39>>1乙。
0006デフォルトの名無しさん
2009/02/12(木) 00:43:44>>1乙
0007デフォルトの名無しさん
2009/02/12(木) 02:04:260008デフォルトの名無しさん
2009/02/12(木) 03:16:45D言語タンのGCのアルゴリズムはなんて奴で実装されてるの?
0009デフォルトの名無しさん
2009/02/12(木) 03:29:290010デフォルトの名無しさん
2009/02/12(木) 05:15:37そうすればopCastオーバーロード問題も一気に解決!
0011デフォルトの名無しさん
2009/02/12(木) 08:57:34一時期世代別が実装されそうな雰囲気になったけど
druntimeが抽出された時にどこかへ行ってしまったw
0012デフォルトの名無しさん
2009/02/12(木) 09:59:03乙
うぉるたんかわいいようぉるたん
0013デフォルトの名無しさん
2009/02/12(木) 10:05:057 :デフォルトの名無しさん [↓] :2008/11/15(土) 16:36:07
おっさんだぜ?
0014デフォルトの名無しさん
2009/02/12(木) 10:08:490015デフォルトの名無しさん
2009/02/12(木) 20:30:510016デフォルトの名無しさん
2009/02/12(木) 20:35:180017デフォルトの名無しさん
2009/02/13(金) 01:10:00[2] 問題文(含コード&リンク):
1から9までの数字を縦横方向に同じものが並ばないように下記の例のように並べる
並べ方が全部で何通りあるかとその並びをすべて列挙する
[3] 環境:特になし
[4] 期限: 明日まで
[5] その他の制限:
例
534681297
685293714
948367125
153472869
426538971
261759483
817945632
379126548
792814356
0018デフォルトの名無しさん
2009/02/13(金) 03:38:280019デフォルトの名無しさん
2009/02/13(金) 08:55:360020デフォルトの名無しさん
2009/02/13(金) 09:34:16"並べ方が全部で何通りあるかとその並びをすべて列挙する").primaryAnswer;
0021デフォルトの名無しさん
2009/02/13(金) 22:20:33C#で言うところのDoEventだっけかな。
0022デフォルトの名無しさん
2009/02/13(金) 23:46:23今ちょっとヘルプ見てみたら、dflにApplication.doEvents()ってあるらしいよ。
確認してないけど、使えるんじゃないかな?
でもdflは意外と地雷があったりするから、凝ったの作ろうとする場合は
気をつけて。
0023デフォルトの名無しさん
2009/02/14(土) 00:09:36??!
0025赤西仁
2009/02/14(土) 15:39:21アークザラッド�Uというタイトルのゲームの、ゲーム画像(歩行画像など)を抽出したいのですが、
かれこれ1年ほど経ちますが、なかなかうまくいきません。
*もちろん抽出した画像は個人範囲内で利用するつもりです。
◆試してダメだったこと
ネット上からダウンロードできる、ありとあらゆる抽出系ツールを試した。
(ちなみに他のゲームはほとんど抽出可能)
◆教わったこと
・アークザラッド�Uは独自の画像形式を使っているから抽出できない。
・PS上で表示されてるということは絶対に摘出はできるはず。
◆抽出は不可能ではないということを知ったとき
2ちゃんねるで質問したところ、
ある方が実際にキャラクターの歩行画像を抽出して
私が立てたスレにアップしてくださいました。
スクリーンショットじゃ嫌なんです。どうか皆さん、お力をお貸しください。
0026デフォルトの名無しさん
2009/02/14(土) 17:22:110027デフォルトの名無しさん
2009/02/15(日) 02:26:24Version D 1.040 Feb 11, 2009
なんかいつの間にか出てる…
2.024が出てないから気付かなかった。
0028デフォルトの名無しさん
2009/02/15(日) 02:38:30* 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やはり2.xでのサポートが待ち遠しい
0030デフォルトの名無しさん
2009/02/15(日) 06:18:462.024はどこに行ってしまったんだろうか…
0031デフォルトの名無しさん
2009/02/15(日) 08:16:32Extrawurst wrote:
> Very nice, but what happened to version 2.024 ?
test version
0032デフォルトの名無しさん
2009/02/15(日) 14:27:29New/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:590034デフォルトの名無しさん
2009/02/15(日) 15:43:220035デフォルトの名無しさん
2009/02/15(日) 15:49:140036デフォルトの名無しさん
2009/02/16(月) 01:59:250037デフォルトの名無しさん
2009/02/16(月) 02:56:500038デフォルトの名無しさん
2009/02/16(月) 06:27:47しかし更新してコンパイル部でコードは通らなくなったがな!
さすが言語の破壊王だ!
Internal error: ..\ztc\cod4.c 357
0039デフォルトの名無しさん
2009/02/16(月) 08:12:44struct 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:092.024飛ばして2.023から2.025になってるんだけど
どういうこと
0041デフォルトの名無しさん
2009/02/16(月) 16:04:46>>31 のようにウォルたんが言ってる
0042デフォルトの名無しさん
2009/02/16(月) 18:09:300043デフォルトの名無しさん
2009/02/16(月) 23:13:240044デフォルトの名無しさん
2009/02/17(火) 01:26:040045デフォルトの名無しさん
2009/02/17(火) 02:08:340046デフォルトの名無しさん
2009/02/17(火) 02:55:480047デフォルトの名無しさん
2009/02/17(火) 12:43:24ttp://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=84330
0048デフォルトの名無しさん
2009/02/17(火) 13:52:44004948
2009/02/17(火) 14:31:520050デフォルトの名無しさん
2009/02/17(火) 16:52:520051デフォルトの名無しさん
2009/02/17(火) 17:07:58ウォルたんも笑って許してくれるさ
0052デフォルトの名無しさん
2009/02/17(火) 17:55:28どうしてでしょうか?
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:080054デフォルトの名無しさん
2009/02/17(火) 19:00:020055デフォルトの名無しさん
2009/02/17(火) 19:14:080056デフォルトの名無しさん
2009/02/17(火) 19:17:21ini を読む前にカレントディレクトリを表示してみるとどうだろう?
えーい、101キーボードでアンダースコートの入れ方がわからん!
0057デフォルトの名無しさん
2009/02/17(火) 19:18:29005852
2009/02/17(火) 19:41:08exe起動だとカレントディレクトリなのに
ファイルのD&D起動だとDocument and setteing\userを表示する
なんでだろ
0059デフォルトの名無しさん
2009/02/17(火) 20:00:45windowsの場合、現在のカレントディレクトリがファイルのD&Dで
D&Dされた先に変更されたりしないからかも。
以前VC++でコードを書いていたとき、同じような感じで悩んだことがある。
そのときはフルパス取得して処理したんだっけな?
0060デフォルトの名無しさん
2009/02/17(火) 20:01:28実行ファイルの場所 == カレントディレクトリ とは限らない
006152
2009/02/17(火) 20:11:22とりえあず
>void main(string[] files){ ... }
のfiles[0]にexeのパスが入ってるから、そこからiniのパス作って見ようと思います
どうもありがとうございました
0062デフォルトの名無しさん
2009/02/17(火) 21:35:30アンダースコアならalt押しながら95入力して放せばいいんじゃね。
0063デフォルトの名無しさん
2009/02/18(水) 04:01:12In 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ガクテカ
0065デフォルトの名無しさん
2009/02/18(水) 07:40:330066デフォルトの名無しさん
2009/02/18(水) 07:58:240067デフォルトの名無しさん
2009/02/18(水) 09:44:10今のstd.regexpは設計、命名規則、実装、全部滅茶苦茶なんだよwww
streamも撮れないとかutf-8しか認識しないとかカスすぎるwww
俺が根っこから全部書き換えてやるから、トラブりそうなやつは今のうちに挙手しとけwww
という感じ
0068デフォルトの名無しさん
2009/02/18(水) 09:56:470069デフォルトの名無しさん
2009/02/18(水) 11:02:29バイナリファイルを指定サイズずつ読み込みたいんだけど、phobosだとどの関数使えばいいんですか?
0070デフォルトの名無しさん
2009/02/18(水) 11:58:520071デフォルトの名無しさん
2009/02/18(水) 19:43:24oniguruma をDで焼き直して実装ならそれはそれでうれしいかも試練。
下手に独自仕様でこられると逆に厄介だ。
正規表現は方言多すぎなんだよ…
0072デフォルトの名無しさん
2009/02/18(水) 20:01:27Tango使ってんのな・・・
Phobos使用者にとっては、導入の敷居が高い。
利用者数ってPhobos<Tangoなの?
0073デフォルトの名無しさん
2009/02/18(水) 20:40:06これよくわからんよなぁ。
Tango使ってる人が布教に熱心なのかPhobos使ってる人が無口なのか。
いつまでたっても次期標準ライブラリなTangoよりPhobosの方が安心なんだが貧弱だからなぁ。
0074デフォルトの名無しさん
2009/02/18(水) 21:34:09std.stream.InputStream の readExact とか?
使った事ないから、違ってたらゴメンね
0075デフォルトの名無しさん
2009/02/18(水) 22:15:570076デフォルトの名無しさん
2009/02/18(水) 22:17:40phobosはad hocくさい実装と、練ってレビューを受けた実装が入り混じっているからなあ。
Tangoは網羅的で労力は頑張ったなという感じだが品質が保証済みかというとそうでもない。
Java、.NET、Pythonにあるような無駄にでかい、標準扱いのライブラリがちょっと欲しかったり。
Deimosという名前で。
007769
2009/02/19(木) 11:59:50ubyte[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:23Stream file = new std.stream.File(path);
while(!file.eof()){
ubyte[1000] dat;
file.read(dat);
writefln(dat);
}
0080デフォルトの名無しさん
2009/02/19(木) 15:31:56while(!file.eof()){
auto len = file.read(dat);
writefln(dat[0 .. len]);
}
にした方がいいんじゃね
0081デフォルトの名無しさん
2009/02/19(木) 16:28:34って書くと
>test.d(2): module thread cannot read file 'core\thread.d'
って帰ってくるんですが
コアってどこにあるんですか?
0082デフォルトの名無しさん
2009/02/19(木) 17:21:110084デフォルトの名無しさん
2009/02/19(木) 20:37:55Tangoもそうだけどなんで増築じゃなくて改築なんだろうな
リンカを通すって特徴をわざわざ殺すやり方ばかりするのが理解できん
0085デフォルトの名無しさん
2009/02/19(木) 20:50:300086デフォルトの名無しさん
2009/02/19(木) 21:14:05意味不明。
変なコードを標準ライブラリに残しておく意味なんてないだろ。
0087デフォルトの名無しさん
2009/02/19(木) 21:48:13ランタイムライブラリが必要な言語は古い物と新しい物の両方を抱えると実行時の
パフォーマンスに影響しかねないけど、Dは使ってないものに関してはオーバーヘッドが
ないようにできるわけだから、そこをもっと生かすべきじゃなんじゃないかなぁと思うんだ。
0088デフォルトの名無しさん
2009/02/19(木) 22:02:44言いたいことは分かるし共感も出来る。
ソフトウェア製作においても重要なことだと思う。
でもね、このスレでその発言はおかしい。
0089デフォルトの名無しさん
2009/02/19(木) 22:08:10普通に言語仕様に破壊的変更が起きるし、正規表現なんざ屁の河童だろ。
0090デフォルトの名無しさん
2009/02/19(木) 22:11:52残念なことに、今はなるべくそうしようという方向に進んでいるようです。
Version D 2.020のあたりのcore.threadとかはその前兆かと。
すでにPhobosですら隔離されつつある。
TangoはまだD2.0に対応する気はなさそうですが。
0091デフォルトの名無しさん
2009/02/19(木) 22:32:32ダメなコードを消せるって幸せなことだよね……
0092デフォルトの名無しさん
2009/02/19(木) 23:25:57ワロタwww
0093デフォルトの名無しさん
2009/02/19(木) 23:38:03過去のしがらみに縛られないのがDのいいところ
0094デフォルトの名無しさん
2009/02/20(金) 00:01:040095デフォルトの名無しさん
2009/02/20(金) 00:43:360096デフォルトの名無しさん
2009/02/20(金) 01:37:170097デフォルトの名無しさん
2009/02/20(金) 02:39:100098デフォルトの名無しさん
2009/02/20(金) 07:52:44完全手探りのアルファ版の段階で互換性気にしてたら、
ほんとぐちゃぐちゃでわけわかんないことになるぞw
0099デフォルトの名無しさん
2009/02/20(金) 08:16:54> 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:37D1はD1でひとつの言語だと考えるといいと思う
あとD2に対応してない時点でTangoは使えないんだよなー
今のところD2やるならPhobosしかない
0101デフォルトの名無しさん
2009/02/20(金) 17:07:570102101
2009/02/20(金) 17:10:570103デフォルトの名無しさん
2009/02/21(土) 02:11:570104デフォルトの名無しさん
2009/02/21(土) 16:23:190105デフォルトの名無しさん
2009/02/21(土) 16:33:220106デフォルトの名無しさん
2009/02/21(土) 18:24:46import 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:22txtの中身も「あいう!」にしてSJISとUTF-8形式で保存してD&D試してみたがforeach抜けた後のコードに到達する
0108107
2009/02/21(土) 20:10:590109106
2009/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-release -O -inlineでコンパイルしても
中身は問題なさそうと言われつつも「このスレを全て選択→コピペ→SJISで保存」したものに中身を変えても
>>109で出てきた"コピー〜test.d"というファイル名に変えてD&Dしても
2バイト目が0x5cな文字と半角カナと半角スペースが混在した二重拡張子の悪質なファイル名
(コピー 〜 ニーモニック 一覧表.d.txt)にしてD&Dしても…ダメだ、落ちない
0111デフォルトの名無しさん
2009/02/21(土) 21:37:000112106
2009/02/21(土) 21:53:59コンパイルは
>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
こんな感じです
0113107
2009/02/21(土) 22:21:15writeln(x"82A0 82A2 82A4 82A6 82A8");
がERROR invalid UTF8 sequenceで落ちなくなってるぞ
こんなの俺の知ってるwritelnじゃない、おかしい、おかしい
もし>>106のwritelnが俺の知ってる以前のwritelnだとしたら…そういうことだ
writeln(x"82A0 82A2 82A4 82A6 82A8");
の挙動を試してみるべし
0114106
2009/02/21(土) 22:40:220115106
2009/02/21(土) 23:03:13直打ちで通るから、D&Dで受けた文字コードを変換できれば通りそうだけど。
0116デフォルトの名無しさん
2009/02/22(日) 00:11:19一瞬メッセージが出てくるということは、例外拾って例外をどこかに吐かせればいいのではないか。
0117デフォルトの名無しさん
2009/02/22(日) 02:44:51druntime導入以降のphobosなら通る。
0118デフォルトの名無しさん
2009/02/22(日) 03:18:47っても検索して引っ掛かったやつをそのまま移植しただけだが。
最新版では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:29ANSI文字列をchar*で扱うべきじゃないと思うのと、各種APIが失敗したときにハンドルリークする可能性がある。
俺の書いたのでよければ参考にして欲しい。
http://ja.doukaku.org/188/lang/d/
0120デフォルトの名無しさん
2009/02/22(日) 09:23:59素晴らしい。
scope, enforceの使い方のお手本みたいな感じですな。
しかしこういった小物コードのいい集積所はないものか
0121デフォルトの名無しさん
2009/02/22(日) 10:57:46これは・・・本物のD言語か
C++と変わらないパチモンコードを書いてた俺に衝撃が走った
0122デフォルトの名無しさん
2009/02/22(日) 16:48:42Dの機能フルで使っちゃうとバージョン変更に極めて弱いコードができてしまう
0123デフォルトの名無しさん
2009/02/22(日) 17:55:390124デフォルトの名無しさん
2009/02/22(日) 18:26:510125デフォルトの名無しさん
2009/02/22(日) 19:27:34scope(exit) {
// A
}
scope(exit) {
// B
}
と来たら A と B はどちらが先に処理されるの?
A と B の順番は言語的に保障されているの?
0126デフォルトの名無しさん
2009/02/22(日) 19:31:46>一つのスコープに複数の ScopeGuardStatement があった場合は、 ソースコード文字列上で現れた順番の逆順で実行さ
>れます。 そのスコープ終了時に破棄されるscopeインスタンスが存在する場合も、 それらのデストラクタも、ソースコード上
>の逆順で ScopeStatement の間に挟まって実行されます。
つまり、B,Aの順番に処理されて、言語的に保障されている。
0127デフォルトの名無しさん
2009/02/23(月) 02:29:370128デフォルトの名無しさん
2009/02/23(月) 04:11:550129デフォルトの名無しさん
2009/02/23(月) 04:12:570130デフォルトの名無しさん
2009/02/23(月) 04:14:18enforce か。初めて知った。
D2 って良さそうだなぁ・・・
0131デフォルトの名無しさん
2009/02/23(月) 04:57:330132デフォルトの名無しさん
2009/02/23(月) 07:24:06真偽値として扱える任意の型の引数を取り、
真偽を判定して真ならそのまま返して偽なら例外を出すだけなので、
C++でも問題なく書ける。
T enforce(T)(T value, lazy Exception ex)
{
if (!value) throw ex();
return value;
}
T valueが真偽を判定されるべきものなのかどうかチェックする機構はない。
まあCとのバインディング用が主たる用途だろうからそんな機構を付けてもしょうがないのではあるが。
0133デフォルトの名無しさん
2009/02/23(月) 08:45:570134デフォルトの名無しさん
2009/02/23(月) 13:12:130135デフォルトの名無しさん
2009/02/23(月) 19:12:27不便だ。もっと変数みたいに扱わせてくれ
0136デフォルトの名無しさん
2009/02/23(月) 20:00:01D でもドライバーとかかけるんかな・・・。
0138デフォルトの名無しさん
2009/02/23(月) 20:59:57D1.0ならめったにコンパイラのバグには遭遇しない。あるにはあるけど十分回避可能。
何を指して安定と呼ぶかによると思うけど、なぜかたまにリンカが死ぬ。
よくタスクマネージャで殺したりしてる。あまり問題に思ったことはない。
コンパイラはオープンソース。コンパイラに同梱されてる。
0139デフォルトの名無しさん
2009/02/23(月) 21:13:26>>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 書けると思うけど
0141デフォルトの名無しさん
2009/02/23(月) 21:34:300142デフォルトの名無しさん
2009/02/23(月) 21:36:310143デフォルトの名無しさん
2009/02/23(月) 21:45:400144デフォルトの名無しさん
2009/02/23(月) 21:57:110145141
2009/02/23(月) 22:10:48あと、ここに書いてある
http://svn.dsource.org/projects/druntime/trunk
から順集でcoreとかまるごと落としてbuild-dmd.bat起動してみたけどファイルが見つからないって言われました
0146デフォルトの名無しさん
2009/02/23(月) 22:41:41druntimeは既にdmd.zipに導入済みなんだけど?
build-dmd.batなんて実行しなくてもcore.*は使えてるよ
あとdmd2.025ではdmcはいらなくなったみたいだよ
0147141
2009/02/23(月) 23:03:320148デフォルトの名無しさん
2009/02/24(火) 00:09:59http://wiki.xomb.org/index.php?title=XOmB_Bare_Bones
D言語で書かれたOSとのこと
0149デフォルトの名無しさん
2009/02/24(火) 00:27:000150デフォルトの名無しさん
2009/02/24(火) 00:58:320151デフォルトの名無しさん
2009/02/24(火) 02:38:09要gdcクロスコンパイラ(構築?)だったりで、
敷居高くて手がだせないけど.
※ソース、fxで落とせたけどieだとダメぽい?
0152デフォルトの名無しさん
2009/02/24(火) 03:45:040153デフォルトの名無しさん
2009/02/24(火) 09:52:030154デフォルトの名無しさん
2009/02/24(火) 10:27:050155デフォルトの名無しさん
2009/02/24(火) 10:31:400156デフォルトの名無しさん
2009/02/24(火) 11:47:070157デフォルトの名無しさん
2009/02/24(火) 14:43:01配列を引数にとる関数meanofを作った時
double mean = meanof(arr[]);
は動くんだが
double sqrmean = meanof(arr[]*arr[]);
みたいな引数にすると動かない
arr[]+1 にしてもダメだった
環境はWinXPでD2.025
0158デフォルトの名無しさん
2009/02/24(火) 18:49:17> ベクトル演算は、スライス演算子が =, +=, -=, *=, /=, %=, ^=, &=, |= 演算子の左辺に来たときに行われます。
これをみた感じ、arr[]*arr[]はベクトル演算に該当しないので計算不可能…普通にできないのではないかと。
0159デフォルトの名無しさん
2009/02/24(火) 20:39:050160デフォルトの名無しさん
2009/02/24(火) 20:45:38なるほど
仕様がねえな
0161デフォルトの名無しさん
2009/02/24(火) 21:39:100162デフォルトの名無しさん
2009/02/24(火) 23:16:59wktkD に見えた。
0163デフォルトの名無しさん
2009/02/24(火) 23:40:470164デフォルトの名無しさん
2009/02/25(水) 01:07:12俺はlinuxとwindowsで使うツールをgtkDで作ってる。
windowsだとちょっともっさりとしてるけど、一応使えてる。
マルチスレッドと相性が悪いらしくて、マルチスレッドと絡むとたまにウィジットが真っ白になったりするけど、気にしなければどうということはない。
0165161
2009/02/25(水) 01:47:33Dには常にwktkで溢れてて貰いたいですね
>>164
やはりマルチスレッド周りは不完全ですか・・・
しかし諦めも肝心ですよね、gtkD使いたいと思います
ありがとうございます
0166デフォルトの名無しさん
2009/02/25(水) 01:51:44JavaのSWTにある程度サンプルが多いから、資料の点であんまり困らない。
0167デフォルトの名無しさん
2009/02/25(水) 02:10:14>(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> 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つながらない
0170デフォルトの名無しさん
2009/02/25(水) 11:18:490171デフォルトの名無しさん
2009/02/25(水) 12:09:45今度からこれテンプレにしてください
tinyurlってアドレス選べるんですね
ttp://tinyurl.com/ccpp2d (C/C++に疲れた人のD言語)
0172デフォルトの名無しさん
2009/02/25(水) 12:27:520173デフォルトの名無しさん
2009/02/25(水) 16:15:39非文字外のバックスラッシュ付き文字を文字列リテラルとする仕様を外し、
デリゲートのシンタックスシュガーに使うと。
こんな感じか?
array.map \(ref i) { i+=1; }
widget.onClick \{ doSomething; }
0174デフォルトの名無しさん
2009/02/25(水) 17:58:08widget.onClick = delegate () { doSomething; }
widget.onClick = () { doSomething; }
widget.onClick = { doSomething; }
これだけあるのに
widget.onClick = \{ doSomething; }
わざわざ文字数増やす意味がわからないんだけど
0175デフォルトの名無しさん
2009/02/25(水) 18:11:19import folder/hello2;
とか無理なの?
0176デフォルトの名無しさん
2009/02/25(水) 18:23:34import folder.*;
みたいなのがしたいってこと?
0177デフォルトの名無しさん
2009/02/25(水) 18:24:080178デフォルトの名無しさん
2009/02/25(水) 19:35:49m1.d m2.d m3.d をフォルダmの中に入れて管理したくなった。
VC#はできたんだけどJavaは知らないです。
0179デフォルトの名無しさん
2009/02/25(水) 19:45:46base\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いや、そこに書いてあるのはラムダ式。
auto square = \x => x * x;
とかだろ。
0182デフォルトの名無しさん
2009/02/25(水) 21:25:19Dでは引数がない関数は括弧を省略することが出来る
0183デフォルトの名無しさん
2009/02/25(水) 22:26:13こうですか?
0184デフォルトの名無しさん
2009/02/25(水) 22:39:380185デフォルトの名無しさん
2009/02/25(水) 23:17:08ラムダ式しか書けず、ラムダ計算できるが最終的にはデリゲートとして扱われるリテラル、という感じ?
0186デフォルトの名無しさん
2009/02/26(木) 02:13:11ラムダ式はC#風にこれでよくね?
他のことに使うとしたら何があるだろう
0187デフォルトの名無しさん
2009/02/26(木) 13:37:250188デフォルトの名無しさん
2009/02/26(木) 13:59:080189デフォルトの名無しさん
2009/02/26(木) 18:50:290190デフォルトの名無しさん
2009/02/26(木) 19:55:160191デフォルトの名無しさん
2009/02/27(金) 02:19:02工学系で複素数演算を使う人は多いと思うんだが、どうだろう。
0192デフォルトの名無しさん
2009/02/27(金) 03:11:150193デフォルトの名無しさん
2009/02/27(金) 03:16:230194デフォルトの名無しさん
2009/02/27(金) 08:40:05n !<>= 0.0
とやっているが、正しいんだかどうだか
0195デフォルトの名無しさん
2009/02/27(金) 09:13:27n is n.nan
でよくね?
0196デフォルトの名無しさん
2009/02/27(金) 09:21:500197デフォルトの名無しさん
2009/02/27(金) 14:21:400198デフォルトの名無しさん
2009/02/28(土) 01:25:28>そういえば前スレあたりで誰か困ってたけど、
それは俺。
とりあえず2.025でコンパイル通りました。
directxフォルダはまだ無理っぽいけど。
いい情報をありがとう。>167
0199デフォルトの名無しさん
2009/02/28(土) 02:21:280200デフォルトの名無しさん
2009/02/28(土) 08:08:020201デフォルトの名無しさん
2009/02/28(土) 13:37:33ギャグではないとおもうよ。必要な物だし。
あれが最善の表現方法かどうかはわからないけど、
少なくとも関数スタイルにするよりはなんぼかましだとおもう。
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演算子よりぱっと見で意味はわかりやすいが、いずれにせよ煩雑だな。
0204デフォルトの名無しさん
2009/02/28(土) 20:55:44比較不能を表す何かがあればいいんだよ
今は!の否定で無理矢理表してるからわかりにくい
0205デフォルトの名無しさん
2009/02/28(土) 21:02:400206デフォルトの名無しさん
2009/02/28(土) 21:11:21○二つの浮動小数点数の関係の全体
でした。
0207デフォルトの名無しさん
2009/02/28(土) 22:21:020208デフォルトの名無しさん
2009/02/28(土) 22:29:530209デフォルトの名無しさん
2009/02/28(土) 23:41:310210デフォルトの名無しさん
2009/02/28(土) 23:44:54Dの浮動小数点数 = 実数 ∪ {非数}
だから、なにもおかしくない。
0211デフォルトの名無しさん
2009/03/01(日) 18:15:070212デフォルトの名無しさん
2009/03/01(日) 19:10:32うぉるたんの授業うけたいなあ
0213デフォルトの名無しさん
2009/03/01(日) 20:09:340214デフォルトの名無しさん
2009/03/04(水) 23:51:00回避方法とかあったりします?
0215デフォルトの名無しさん
2009/03/05(木) 00:19:550216デフォルトの名無しさん
2009/03/05(木) 09:29:29dmdでコンパイルしたら.exeではなく.objが生成されました。
で、それを実行出来ないのですがどうすればいいでしょうか?
0217デフォルトの名無しさん
2009/03/05(木) 09:31:58あるいは後に何も残らないが-runつけるとか
0218デフォルトの名無しさん
2009/03/05(木) 09:33:20objは中間ファイルなので実行できません。
コンパイルした段階でなんかエラーメッセージ出てませんか?
何もエラー出てない限り実行ファイルは生成されないと思います。
0219デフォルトの名無しさん
2009/03/05(木) 15:03:55dmd.zipの他にdmc.zipも必要だったのでした。
そしてdmd.zipを解凍して出来た\dmdと\dmの\dmを
dmc.zipを解凍して出来る\dmに置き換えてやればいいとのこと。
その中のlink.exeが必要だったみたいなのです。
そして無事コンパイル出来ました。
皆さん有難うございました。
ついでに言っておくと、.exeのほかに.mapと.objも生成されました。
0220デフォルトの名無しさん
2009/03/05(木) 15:13:04ちゃんとコンパイル出来ました。
D言語と違ってそのままでも日本語を表示出来ました。
またD言語と同様に.exeのほかに.objと.mapが生成されました。
私は普段C言語はGCC&Cygwinを使っていますがそれでは.exeだけです。
だからびっくりしました。
0221デフォルトの名無しさん
2009/03/05(木) 15:26:50DMD2.025からdmc不要になったはず。
っつかCでも.objはできるような気が。
そうでないと分割コンパイルする意味がない。
0222デフォルトの名無しさん
2009/03/05(木) 15:37:360223デフォルトの名無しさん
2009/03/05(木) 15:59:560224デフォルトの名無しさん
2009/03/05(木) 17:46:02調べたらヴァージョンは2.011でした。
0225デフォルトの名無しさん
2009/03/05(木) 17:47:220226デフォルトの名無しさん
2009/03/05(木) 19:52:03最新バージョン来たよ!
0227デフォルトの名無しさん
2009/03/05(木) 20:04:210228デフォルトの名無しさん
2009/03/05(木) 20:06:25これ、ついに dmd のソース公開ってことですか?
0229デフォルトの名無しさん
2009/03/05(木) 20:12:09New/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* 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そうらしい。コンパイルして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こんなすばらしいコードが見られるなんて、ありがたいことだ。
0233デフォルトの名無しさん
2009/03/06(金) 02:43:16みんな気に入らないところ直してパッチ送ろうぜ
0234デフォルトの名無しさん
2009/03/06(金) 08:20:590235デフォルトの名無しさん
2009/03/06(金) 09:10:210236デフォルトの名無しさん
2009/03/06(金) 11:53:580237デフォルトの名無しさん
2009/03/06(金) 16:10:26ttp://crossacross.org/misc/
0238デフォルトの名無しさん
2009/03/06(金) 22:33:33この前から本家フォーラムで「optlinkは死ね」というタイトルで論争やってて、
いつまでOMF使ってんだとかそんな感じの話が展開してたから、
そのうちボランティア作業でなおる気がする
0239デフォルトの名無しさん
2009/03/07(土) 11:14:080240デフォルトの名無しさん
2009/03/07(土) 16:29:340241デフォルトの名無しさん
2009/03/07(土) 16:59:060242デフォルトの名無しさん
2009/03/07(土) 18:10:030243デフォルトの名無しさん
2009/03/08(日) 02:02:19うちのARMなGlanTankでも通らないかなぁ。やってみようかなぁ。
0244デフォルトの名無しさん
2009/03/08(日) 04:05:18GUIとかどうやるのか知らないけど
0245デフォルトの名無しさん
2009/03/08(日) 04:57:11一から書き直す覚悟が要ると思う。
0246デフォルトの名無しさん
2009/03/08(日) 05:16:500247デフォルトの名無しさん
2009/03/08(日) 11:20:40これってバグ?それとも仕様変更?
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
0248247
2009/03/08(日) 11:28:13struct 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:47struct 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:21lvalue ではないってのは代入不可能ってこと。
逆に今までそんなコード書いていて大丈夫だったのかが気になるな。
0251247
2009/03/08(日) 12:56:01関数のほうは実はopAssign(ref)とかだから問題ないと思うんだ
C++だと構造体のコンストラクタとこういうことができたんですよ
Dはなぜかコンストラクタを持たせると怒られる
0252247
2009/03/08(日) 13:06:28そう考えてた時期が俺にもありました・・・・・
ちくしょー! うぉるたんまたやってくれたな!
ちょっと前のは怒られたのに、今のはこれで通った
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:260254デフォルトの名無しさん
2009/03/08(日) 14:59:37avast先生も怒ってたなぁ
何でだろね
0255デフォルトの名無しさん
2009/03/08(日) 16:40:320256デフォルトの名無しさん
2009/03/08(日) 16:45:39今でもそれは変わらないと思う
構造体を操作するときに若干便利な機能が付加されただけだよね
0257デフォルトの名無しさん
2009/03/08(日) 17:45:31初期のC++だとこんな実装があったとかなかったとか
0258デフォルトの名無しさん
2009/03/08(日) 19:11:24struct A {
int x;
}
void f(ref A){}
void main() {
f(A(3));
}
0259デフォルトの名無しさん
2009/03/08(日) 19:57:06ChageLog見れば分かるけど2.019から構造体コンストラクタ使えるよ
0260デフォルトの名無しさん
2009/03/10(火) 15:43:29これは
0261デフォルトの名無しさん
2009/03/10(火) 16:37:35テンプレートミックスインでどうしても引っかかる。
マクロ使うしかないのか?
0262デフォルトの名無しさん
2009/03/10(火) 16:51:40多重継承か委譲かなあ
0263デフォルトの名無しさん
2009/03/10(火) 17:14:25設計をいじるかマクロ使うかの二択なもんで。
安全テンプレート付きマクロって何気に使いやすいなあ
0264デフォルトの名無しさん
2009/03/10(火) 17:15:230265デフォルトの名無しさん
2009/03/10(火) 19:21:250266デフォルトの名無しさん
2009/03/12(木) 19:26:46interface 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:58string[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何かおかしくね?それだと、2つの連想配列でしょ?
3つ目にしたかったら、連想配列追加しないとだめじゃないかい?
もしくは、連想配列に2要素の何かってことなら、添え字が逆。
0270デフォルトの名無しさん
2009/03/13(金) 19:03:35いや、そこはあってるんじゃないの。
C風の書き方すれば
string hash[string][2];
でしょ。
0271デフォルトの名無しさん
2009/03/13(金) 19:10:01え!そうなのか??
ROMってるだけじゃおいてかれるな。すまない。
0272デフォルトの名無しさん
2009/03/13(金) 20:00:37hash[0]["x1"]="";で
hash["x2"] = cast(string[2][string])hash["x1"]; が増長キャストかな??
0273デフォルトの名無しさん
2009/03/13(金) 20:09:310274デフォルトの名無しさん
2009/03/13(金) 22:34:13import 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:260276デフォルトの名無しさん
2009/03/13(金) 23:05:500277デフォルトの名無しさん
2009/03/14(土) 00:22:02hash[ "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:202732
0280デフォルトの名無しさん
2009/03/14(土) 11:23:230281デフォルトの名無しさん
2009/03/15(日) 03:45:12↓こんなときのために
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こうじゃなくて?
...
parent = with.outer;
with.outer.controls.add(with);
}
...
0283デフォルトの名無しさん
2009/03/15(日) 04:09:27適宜修正しながら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:14with(c = new Control){}
これなら通るけど?
0285デフォルトの名無しさん
2009/03/15(日) 04:13:56なんか意味的にキモく感じたからinnerとか付けたけど
皆さんはこういう場合にはどんな感じに書いてますか?
0286デフォルトの名無しさん
2009/03/15(日) 10:06:55超短期スコープ以外で使うのはダメだろう。
0287デフォルトの名無しさん
2009/03/15(日) 16:33:32VBにもあったよな懐かしい
0288デフォルトの名無しさん
2009/03/15(日) 18:14:49(new Control)
.text("childcontrol")
.width(200)
.dock(DockStyle.RIGHT)
.parent(with.outer);
setterは値返さないからthis返すように設計しとけば使えるけど
そういうやり方もあるという
0289デフォルトの名無しさん
2009/03/15(日) 18:17:570290デフォルトの名無しさん
2009/03/15(日) 18:20:160291デフォルトの名無しさん
2009/03/15(日) 18:24:010292デフォルトの名無しさん
2009/03/15(日) 18:25:350293デフォルトの名無しさん
2009/03/15(日) 18:32:30とか書けないじゃん。
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:27C++ならmutable修飾子つければ行けたけど…Dではそういうのはなかったよね?
0297デフォルトの名無しさん
2009/03/15(日) 19:20:24こんな風に書いたらかえってわかりにくいだろ
fp = fopen("smpl.txt", "r");
if (fp == NULL)
0298デフォルトの名無しさん
2009/03/15(日) 19:22:58fp = fopen("smpl.txt", "r");
if(fp)
みたいに書くわ
0299デフォルトの名無しさん
2009/03/15(日) 19:26:26ライブラリ側が対応してない場合にはstd.contractsのenforceとか?
0300デフォルトの名無しさん
2009/03/15(日) 19:47:48それは状態を変更しない問い合わせメソッドを用意しろと言う話であって、
状態を変更するメソッドが値を返さないことはさほど重要ではないと思うのだけど。
0302デフォルトの名無しさん
2009/03/15(日) 22:37:33かと言って>>293が通らないってのも、変数代入との一貫性が失われちゃうのか。
プロパティのgetter/setterって概念をきちんと言語に盛り込んで、
textbox.text = sはsを返すって仕様にすれば両立できるのかな。
C#とかは>>293みたいなコード通ったっけ?
0303デフォルトの名無しさん
2009/03/15(日) 22:38:51俺はまとめる方が分かりにくいよ
代入文と条件式を一まとめにできる事自体どうかと思う
0304デフォルトの名無しさん
2009/03/15(日) 23:11:29C#は>>293の書き方ができる。
setterが値を返すことはできず>>293の場合はsetter, getterの順番に実行される
0305デフォルトの名無しさん
2009/03/15(日) 23:56:17そうだったのか
それいいな
0306デフォルトの名無しさん
2009/03/16(月) 00:00:32イディオムだと知らなかったら読みにくいでしょ
0307デフォルトの名無しさん
2009/03/16(月) 00:20:030308デフォルトの名無しさん
2009/03/16(月) 11:45:150309デフォルトの名無しさん
2009/03/16(月) 12:53:43textbox1.Text = textbox2.Text = s;
は
textbox2.Text = s;
textbox1.Text = textbox2.Text;
と等価ってことで
0310デフォルトの名無しさん
2009/03/16(月) 12:57:40textbox1.Text = textbox2.Text;
は
textbox2.Text(s);
textbox1.Text(textbox2.Text());
と等価ね
0311デフォルトの名無しさん
2009/03/16(月) 17:38:12mono入れて実験してみたけど、getterは呼ばれなくない?
obj.prop = exprがexprとして評価されるだけだと思う。
0312デフォルトの名無しさん
2009/03/16(月) 20:20:260313デフォルトの名無しさん
2009/03/17(火) 19:00:260314デフォルトの名無しさん
2009/03/17(火) 23:13:270315デフォルトの名無しさん
2009/03/18(水) 15:09:520316デフォルトの名無しさん
2009/03/18(水) 21:17:480317デフォルトの名無しさん
2009/03/19(木) 11:41:340318デフォルトの名無しさん
2009/03/19(木) 17:32:560319デフォルトの名無しさん
2009/03/19(木) 22:09:35今そんな話を?
0320デフォルトの名無しさん
2009/03/19(木) 23:40:46C++で全部再現するのが面倒だったなあと。
0321デフォルトの名無しさん
2009/03/21(土) 02:22:11interface 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:310323321
2009/03/21(土) 02:57:05仕様だと継承するinterfaceをスーパークラスとは別に指定した場合、interfaceの関数は継承しないことになってる。
> インターフェイスを再実装するには、その全ての関数を実装しなければなりません。 基底クラスからの継承はされません
つまり、>>321のコードはCCにおいて、ICを指定したためにIAのa()関数が継承されないことになる。
本来なら
class xxx.CC interface function IA.a isn't implemented
とか出るべきでは?ということ。
0324デフォルトの名無しさん
2009/03/21(土) 20:02:03たまにスパムを見つけては消してるんで、新しいページ作成削除は誰でもできるみたいですが
0325デフォルトの名無しさん
2009/03/22(日) 00:19:11YouC#使っちゃいなYo
0326デフォルトの名無しさん
2009/03/22(日) 03:01:480327デフォルトの名無しさん
2009/03/22(日) 04:02:03なんかおかしいね
0328デフォルトの名無しさん
2009/03/22(日) 04:05:30>>327は>>323へ
0329デフォルトの名無しさん
2009/03/22(日) 04:31:11削ってみたけどこれでいいかな?
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それはアクセプトされるべきだと思うけどなあ
0331デフォルトの名無しさん
2009/03/22(日) 05:02:39そう? interfaceの継承とは何かもっと詳しく定義しないといけないのかな
0332331
2009/03/22(日) 05:20:31と
interface B {void a();}
のときBだけ見たら両方同じなのかなと思ったんだけど
0333デフォルトの名無しさん
2009/03/22(日) 09:41:57インターフェース単位で vtbl 作られるという形なので、
IC は IA に対する void a() が存在していればそれで問題ないと思う。
無関係のインターフェース間で同名の関数がある場合、
それは区別しないといけない。
0334デフォルトの名無しさん
2009/03/22(日) 09:53:53interface IB : IA
interface IC : IA
の IA は、同じものを指しているのか、違うものを指しているのか
ってことになるか。
同じものだ(ICはIAの拡張部分のみだ)とみなしているなら、
再実装を要求しないのはおかしくないし
(「IA自体」の再実装は class CC:CB,IA,IC と 書いていないので要求していない)、
違うものだ(ICの一部だ)とみなすなら、再実装を要求しないといけないと。
仕様には書かれてないよね?
0335デフォルトの名無しさん
2009/03/22(日) 09:59:57それじゃ多重継承と同じ問題があるような…
インターフェースは「こういう関数を持って下さい」という事しか指定しないから
たとえ名前が被っても、その名前の関数を用意するだけなので問題は起こらないのだ!
多重継承なんかとは違うのだよwwwwwwww
ってのがインターフェースじゃん
名前が被ったら被ったインターフェースごとに同名の関数用意させられるんじゃ意味がない
0336デフォルトの名無しさん
2009/03/22(日) 10:46:57interface 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が実装されてないといけないけど、
これで通るから、仕様はともかく実装上は区別されないっぽいな。
0338デフォルトの名無しさん
2009/03/22(日) 22:06:50>>312,323の言うように
class xxx.CC interface function IA.a isn't implemented
とでも表示してエラーになるべき
でOK?
0339デフォルトの名無しさん
2009/03/22(日) 22:07:450340デフォルトの名無しさん
2009/03/22(日) 23:03:27interface IB:IA{ }
class Ca { void a(){};}
class CC:Ca, IB{ }
これも通る。
祖先クラスは関数さえ実装していれば祖先インターフェイスを継承している必要すらないみたい。
派生インターフェイス=祖先インターフェイスの関数が実装されていることを前提としたインターフェイス
って解釈すればこっちの実装もありかな。
0341デフォルトの名無しさん
2009/03/22(日) 23:29:27> 派生インターフェイス=祖先インターフェイスの関数が実装されていることを前提としたインターフェイス
ごめんよくわからん
「CCはCaからaを継承しているからaの実装を持っている」→
「CCはIBの制約を満たしている」→「CCはvalid」
と言う論理なら
> インターフェイスを再実装するには、その全ての関数を実装しなければなりません。 基底クラスからの継承はされません
この仕様に違反しないか?
0342デフォルトの名無しさん
2009/03/22(日) 23:36:23つまりIBのCCに対する制約には2つの考え方があって;
(a)「CCがvoid a()を持っていること」
(b)「CCで新しいvoid a()を定義すること」
今の仕様は(b)なのに実装は(a)になっているという問題か
0343デフォルトの名無しさん
2009/03/23(月) 01:20:29「IBを実装すると言ったが、IAを実装するとは言ってない。だから、
IBの関数なら再実装するが、IAについてはキャストできれば十分なのだ!」
って理屈。
IAにキャストできるってことは、IAかその派生クラスを継承してる必要があって、
そして当然IAの要求する関数を実装してる必要もある。
だから結局IAの関数は実装されてる必要があるけど、キャストに必要なそれに
ついては(再実装の話じゃないから)基底クラスから継承してもおk、って感じ。
0344デフォルトの名無しさん
2009/03/23(月) 02:02:23interface 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何らかの条件でバグが発現するというのだからやっかいな問題だね
具体的に最初に言われたバグが起こるコードを示してもらえたらいいのだけど
0346321
2009/03/23(月) 17:50:26interface 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よく再現できたね
何がどういうバグなのかわからんのだがw
0348デフォルトの名無しさん
2009/03/23(月) 21:31:16http://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懐かしい
0350デフォルトの名無しさん
2009/03/24(火) 21:54:52いや、やつならD#とかやりかねないな
0351デフォルトの名無しさん
2009/03/24(火) 22:59:530352デフォルトの名無しさん
2009/03/25(水) 01:58:29ttp://d.puremagic.com/issues/show_bug.cgi?id=2758
0354デフォルトの名無しさん
2009/03/25(水) 18:16:000355デフォルトの名無しさん
2009/03/25(水) 18:45:330356デフォルトの名無しさん
2009/03/25(水) 22:24:380357デフォルトの名無しさん
2009/03/26(木) 01:11:520358デフォルトの名無しさん
2009/03/26(木) 22:46:310359デフォルトの名無しさん
2009/03/26(木) 23:43:330360デフォルトの名無しさん
2009/03/27(金) 01:37:45本体付属の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:25int 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:580363デフォルトの名無しさん
2009/03/27(金) 09:24:31* 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ありがとう
0365デフォルトの名無しさん
2009/03/28(土) 01:03:46これは…あんまりだorz
0366デフォルトの名無しさん
2009/03/28(土) 01:07:33>* Final refinement of the IO
io.devices.stdout とか出て軒並みこける dsss 無限ループ
みたいになって悩む。というか Previous あるな(恥
0367デフォルトの名無しさん
2009/03/28(土) 01:37:19あんなにみんなが焦がれた大量破壊変更なのに。
といっても、それほど苦労せずに移行出来ると思うけど…
Bufferの機能分岐がちょっと面倒だけど、基本的にそれ以外は難なく移行できたな。
0368デフォルトの名無しさん
2009/03/28(土) 18:32:52WebDAVまだー?
0369デフォルトの名無しさん
2009/03/28(土) 22:00:56ttp://d.puremagic.com/issues/ には見あたらない
0370デフォルトの名無しさん
2009/03/29(日) 00:07:17ttp://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:140372デフォルトの名無しさん
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:340374デフォルトの名無しさん
2009/03/29(日) 19:07:32非静的なメンバ関数は隠し引数thisを持つ(EAX経由で渡される)が、その関数をiX.yに代入した時に引数が消えているから。
0375デフォルトの名無しさん
2009/03/29(日) 19:30:440376372
2009/03/29(日) 22:59:35thisの情報が消えてしまったから、という理解で正しいでしょうか?
ということはこのコードのように非静的関数を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ごめんわからんのでkwsk
0378372
2009/03/30(月) 07:37:24わかりにくくてすいません。
要するに...
・関数ポインタの集合をもつ構造体を定義する(C,D互換性もたせて)。
・C側はその構造体を引数にもつエクスポート関数を実装したDLLを作成する。
・D側から(LoadLibrary, GetProcAddressして)そのDLLのエクスポート関数を呼び出す。
・C側からは構造体の関数ポインタを経由してDのメソッドを呼び出す。
ということがやりたいです。
すいません、サンプルコードかければいいんですが時間が…。
0379デフォルトの名無しさん
2009/03/30(月) 07:51:53Cではむしろこっちの方が普通だと思うのだけど…
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なんて略してるんだ
せめてI/Fじゃないとわからん
0381デフォルトの名無しさん
2009/03/30(月) 14:40:590382デフォルトの名無しさん
2009/03/30(月) 14:59:31Win32APIのタスクトレイ関連機能
0383デフォルトの名無しさん
2009/03/30(月) 15:13:380384デフォルトの名無しさん
2009/03/30(月) 20:09:30ttp://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.となる
この二つの問題って既に報告されてたっけ?
0385372
2009/03/30(月) 21:20:10D同士ならそのとおりやるし、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:170387デフォルトの名無しさん
2009/03/30(月) 22:39:40dmc -ohige.dll hige.c hige.def
hige.d http://codepad.org/N7GzXMeb
dmd -run hige.d
これじゃだめなの?(ひげをこさえすぎた。ちょっと読みにくいかも。
0388372
2009/03/30(月) 23:14:38おぉ、はい、そうです。
最初はそれを考えたんですが、C側でDのインスタンス(HigeHandle)を意識する
させるのがなんだかなぁと思って>>376しか方法がないかと考えておりました。
ここまで手助けして頂けたので後は考えてみます。
どうもありがとうございました。
0389デフォルトの名無しさん
2009/04/01(水) 09:08:34trunkでtango.core.stacktrace.*が追加されてる。
0390デフォルトの名無しさん
2009/04/01(水) 14:39:46http://www.digitalmars.com/d/1.0/changelog.html#new1_042
最新版来たよ
0391デフォルトの名無しさん
2009/04/01(水) 15:02:330392デフォルトの名無しさん
2009/04/01(水) 15:08:29ともあれ、静的に解決できるアダプタを作るのがかなり簡単になる面白い機能だな。
opDotと合わせると継承不要になる場面がかなり多くなりそう。
0393デフォルトの名無しさん
2009/04/01(水) 15:32:080394デフォルトの名無しさん
2009/04/01(水) 18:07:520395デフォルトの名無しさん
2009/04/01(水) 18:23:20一応更新履歴のページに書き換えの必要な部分について書いてあった気がする。
0396デフォルトの名無しさん
2009/04/01(水) 19:18:25>>391 D1? D2?
>>392 また変わり種の機能が増えたのか。把握しきれてるかな俺
>>395 2.020-2.021のdruntime関係の変更も入ってたっけ?
0397391
2009/04/01(水) 19:54:230398デフォルトの名無しさん
2009/04/01(水) 23:28:57自身を初心者だと思うなら、D1の方がやりやすいと思うよ
試験的実装について思考を奪われないで済む
もちろん僕はD1!
0399デフォルトの名無しさん
2009/04/02(木) 00:08:08今回はバグ取りばかりだな。あとはOPTLINKの改善を持ってD2もいいところまで行きそうだ。
0400デフォルトの名無しさん
2009/04/02(木) 00:33:460401デフォルトの名無しさん
2009/04/02(木) 01:22:23相変わらず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:52D2がbetaじゃなくなるまでサポートしない気なのかね
0403デフォルトの名無しさん
2009/04/02(木) 02:55:59それじゃ一生(ry
0404デフォルトの名無しさん
2009/04/02(木) 08:07:15つぎはstatic引数だな。
0405デフォルトの名無しさん
2009/04/02(木) 08:46:000406デフォルトの名無しさん
2009/04/02(木) 08:50:11そろそろD3が出てもいい頃かと・・・
0407デフォルトの名無しさん
2009/04/02(木) 15:21:570408デフォルトの名無しさん
2009/04/02(木) 15:51:29Macサポートがついてから変わったよ(実行ファイルの名前が同じになるからかと)
0409デフォルトの名無しさん
2009/04/02(木) 16:42:25どこでもいいよ
dmd\src\druntime\importに入れておけばsc.iniを編集しなくてもいいけど
0410デフォルトの名無しさん
2009/04/02(木) 17:17:480411デフォルトの名無しさん
2009/04/02(木) 18:43:050412デフォルトの名無しさん
2009/04/02(木) 19:04:520413デフォルトの名無しさん
2009/04/03(金) 01:18:080414デフォルトの名無しさん
2009/04/03(金) 01:44:550415413
2009/04/03(金) 02:18:33--- 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 .. $]);
}
}
0416413
2009/04/03(金) 02:21:16やってることは、linux版と同様にif (!more.length)とreturn join(join(p1, p2), more[0], more[1 .. $]);を付け足しただけ。
0417413
2009/04/03(金) 02:29:53--- 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 .. $]);
}
}
0418413
2009/04/03(金) 02:30:380419デフォルトの名無しさん
2009/04/03(金) 03:22:480420デフォルトの名無しさん
2009/04/03(金) 03:38:27import 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
}
}
0421413
2009/04/03(金) 04:13:47Windowsだと第三引数以降が無視されちゃってる
んで、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了解
0423デフォルトの名無しさん
2009/04/03(金) 21:06:27強いtypedefよりプロパティとか自由にできていい感じだ
0424デフォルトの名無しさん
2009/04/03(金) 22:24:420425デフォルトの名無しさん
2009/04/03(金) 22:29:280426デフォルトの名無しさん
2009/04/03(金) 23:21:36ttp://d.puremagic.com/issues/show_bug.cgi?id=2790
0427デフォルトの名無しさん
2009/04/03(金) 23:22:580429デフォルトの名無しさん
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検証してみたのでおいておきますね
つ http://tinyurl.com/c9pbyn
0431デフォルトの名無しさん
2009/04/04(土) 13:10:18なっちゃうとき、どこが問題か見つける方法ってない?
0432デフォルトの名無しさん
2009/04/04(土) 17:33:06typedefは移植性を上げるためのものだと思う
0433デフォルトの名無しさん
2009/04/04(土) 21:40:150434デフォルトの名無しさん
2009/04/05(日) 02:25:45型に小さなラッパをつけたい場合の用途も結構大きいと思うが。
0435デフォルトの名無しさん
2009/04/05(日) 08:28:05仮にtypedefをalias thisで完全置換したらわかりにくくなりそうだ。
まあ必要ないってこともないんじゃないかなと思う。
0436デフォルトの名無しさん
2009/04/05(日) 08:49:260437デフォルトの名無しさん
2009/04/05(日) 13:01:25ちょっと動くってことはimport関連のパス間違ってるんじゃないか?
sc.iniとか調べてみるといいよ。
0438デフォルトの名無しさん
2009/04/05(日) 23:10:12全部消して入れ直すべし
0439デフォルトの名無しさん
2009/04/06(月) 02:03:13typedefした/された型同士は相互に代入できなかったんじゃなかった?
0440デフォルトの名無しさん
2009/04/06(月) 02:05:48知らなかった
0441デフォルトの名無しさん
2009/04/07(火) 00:05:06完全に等価なのは無理だよね
テンプレートでは外側の型が優先されるから
そこでも適切に化けないと引っかかったりする
0442デフォルトの名無しさん
2009/04/07(火) 17:53:540443デフォルトの名無しさん
2009/04/07(火) 18:17:560444デフォルトの名無しさん
2009/04/07(火) 18:37:450445デフォルトの名無しさん
2009/04/07(火) 18:57:15この言語を使うのは難しい
0446デフォルトの名無しさん
2009/04/07(火) 19:01:14最低限どの導入か書いてくれないと
dmdとかだと展開してPATH通すだけだし
0447デフォルトの名無しさん
2009/04/07(火) 19:14:21既存の情報だけでこの10年近く大勢のの人間が導入できたというのに…
0448デフォルトの名無しさん
2009/04/07(火) 19:25:090449デフォルトの名無しさん
2009/04/07(火) 19:27:370450デフォルトの名無しさん
2009/04/07(火) 19:34:360451デフォルトの名無しさん
2009/04/07(火) 19:57:050452デフォルトの名無しさん
2009/04/07(火) 21:08:04New/Changed Features
* Added FreeBSD 7.1 support.
Bugs Fixed
* Bugzilla 2796: Dependency on libstdc++-v3
0453デフォルトの名無しさん
2009/04/08(水) 01:38:100454デフォルトの名無しさん
2009/04/08(水) 02:41:580455デフォルトの名無しさん
2009/04/08(水) 08:45:110456デフォルトの名無しさん
2009/04/09(木) 01:38:46New/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:140459デフォルトの名無しさん
2009/04/09(木) 12:46:33DStressのD2版必要だよなあ
0460デフォルトの名無しさん
2009/04/09(木) 12:51:460461デフォルトの名無しさん
2009/04/09(木) 15:01:13どうしたもんかな
0462デフォルトの名無しさん
2009/04/09(木) 17:01:290463デフォルトの名無しさん
2009/04/09(木) 20:25:14おれ「えっ」
店員「当店のポイントカードはお餅ですか」
おれ「いえしりません」
店員「えっ」
おれ「えっ」
店員「まだお餅になってないということでしょうか」
おれ「えっ」
店員「えっ」
おれ「変化するってことですか」
店員「なにがですか」
おれ「カードが」
店員「ああ使い続けていただければランクがあがってカードが変わりますよ」
おれ「そうなんだすごい」
店員「ではお作りいたしましょうか無料ですよ」
おれ「くさったりしませんか」
店員「えっ」
おれ「えっ」
店員「ああ期限のことなら最後に使ってから一年間使わないときれます」
おれ「なにそれこわい」
店員「ちょくちょく来ていただければ無期限と同じですよ」
おれ「なにそれもこわい」
店員「えっ」
おれ「えっ」
0464デフォルトの名無しさん
2009/04/09(木) 22:10:07全ビットの組み合わせになるように書かない限り
どうやったって書けないぞ。
でも、最近はCPUパワーで何とかなっちゃうのかね。
32bitなんか一瞬でカウントしちゃうし、確かにそういうテストを書くこともあるんだが…
0465デフォルトの名無しさん
2009/04/09(木) 22:17:520466デフォルトの名無しさん
2009/04/09(木) 22:21:490467デフォルトの名無しさん
2009/04/09(木) 23:57:200468デフォルトの名無しさん
2009/04/10(金) 12:29:170469デフォルトの名無しさん
2009/04/10(金) 16:19:150470デフォルトの名無しさん
2009/04/11(土) 10:53:44最適化かなんかのバグかね?
0471デフォルトの名無しさん
2009/04/11(土) 11:07:19リテラルをsqrtに渡した結果がおかしかったらしいから
CFTE周りだと思う。
0472デフォルトの名無しさん
2009/04/11(土) 11:08:33ageちまった、すまん。
0473デフォルトの名無しさん
2009/04/11(土) 12:02:56今回の場合はさすがに意味ありそうだけど
0474デフォルトの名無しさん
2009/04/11(土) 12:09:07でも、dmd は C++ で書いてあるわけだが。
0475デフォルトの名無しさん
2009/04/11(土) 12:34:41何も使ってないだろ今
0476デフォルトの名無しさん
2009/04/11(土) 12:39:01いわゆる医者の不養生。
0477デフォルトの名無しさん
2009/04/11(土) 12:54:50感想とか求む
0478デフォルトの名無しさん
2009/04/11(土) 14:58:320479デフォルトの名無しさん
2009/04/11(土) 16:58:47Internal error: ..\ztc\cgcod.c 1549
とか出てコンパイルできないバグも全然直らないし
0480デフォルトの名無しさん
2009/04/11(土) 18:28:10両方の型がある関数オーバーロードの解決ってどうなっているんだっけ。
曖昧だからダメといわれるのだろうけど、優先順位は付けられるのかしら。
0481デフォルトの名無しさん
2009/04/11(土) 19:35:05>もっともよく マッチする関数が選択されます。 マッチの適合度は以下の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:270483デフォルトの名無しさん
2009/04/11(土) 22:01:38ありがとう。
結局Eがやりたいのだが、やっぱ曖昧なままか。
派生を外してopDotやalias thisでどうなるかも試してみる
0484デフォルトの名無しさん
2009/04/12(日) 00:29:11ttp://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=87394
0485デフォルトの名無しさん
2009/04/13(月) 15:00:13http://dronten.googlepages.com/dscite (DSciTE)
0486デフォルトの名無しさん
2009/04/15(水) 01:54:550487デフォルトの名無しさん
2009/04/16(木) 20:55:230488デフォルトの名無しさん
2009/04/16(木) 22:40:000489デフォルトの名無しさん
2009/04/17(金) 12:38:2400 名前:null[sage] :2009/04/17 12:37
☆ チン
☆ チン 〃 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ヽ ___\(\・∀・) < D.NETマダー?
\_/⊂ ⊂_ ) \________
/ ̄ ̄ ̄ ̄ ̄ ̄ /|
| ̄ ̄ ̄ ̄ ̄ ̄ ̄| |
| 愛媛みかん |/
0490デフォルトの名無しさん
2009/04/17(金) 12:42:330491デフォルトの名無しさん
2009/04/17(金) 13:32:310492デフォルトの名無しさん
2009/04/17(金) 16:44:580493デフォルトの名無しさん
2009/04/17(金) 22:39:444.0から入るんじゃ?
0494461
2009/04/18(土) 00:07:50Internal 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なんか他にも言語仕様上ででっかい違いある?
0496デフォルトの名無しさん
2009/04/18(土) 01:24:21文字列ミックスイン
CTFE
0497デフォルトの名無しさん
2009/04/18(土) 01:44:040498デフォルトの名無しさん
2009/04/18(土) 01:46:230499デフォルトの名無しさん
2009/04/18(土) 10:33:160500デフォルトの名無しさん
2009/04/18(土) 13:25:53socket.sendでvoid[]にcastしようとすると
'cannot implicitly convert expression '
って怒られるしどうすれば良いのでしょう……
0501デフォルトの名無しさん
2009/04/18(土) 14:05:47auto d = (cast(void*)&s)[0 .. S.sizeof];
としてみたら?
0502デフォルトの名無しさん
2009/04/18(土) 15:16:170503デフォルトの名無しさん
2009/04/18(土) 21:17:29再び質問なのですが、受け取ったchar[]なバイナリデータを構造体に戻すにはどうすればよいのでしょうか。
0504デフォルトの名無しさん
2009/04/18(土) 21:35:30void[] data;
assert(data.lengh >= S.sizeof);
auto s = *(cast(S*)data.ptr);
0505デフォルトの名無しさん
2009/04/18(土) 21:39:090506デフォルトの名無しさん
2009/04/19(日) 04:46:17こういうチェックってassertでいいの?
それとも、普通にifで比較して例外投げた方がいい?
0507デフォルトの名無しさん
2009/04/19(日) 05:24:54普通にifで比較して例外投げ。
コーディングのバグとしてしかありえず、それを検出したいのなら(関数の使い方が間違っているとか)、
assert。
0508デフォルトの名無しさん
2009/04/19(日) 06:19:300509デフォルトの名無しさん
2009/04/19(日) 16:36:05MBSってどの型にすべきなの?
phobosではtoMBSz(string)はchar*になってるけど、ubyte*にすべき?
また、wchar*をwstringに変換する関数がないっぽいんだけど
みんなどうしてるの?
int len = wcslen(buf);
wstring str = buf[0..len].idup;
みたいな感じ?
0510デフォルトの名無しさん
2009/04/19(日) 17:33:01俺は
typedef ubyte achar;
alias invariant(achar)[] astring;
ってして使ってる。
wchar*からwstringはそんな感じの関数を自作
0511デフォルトの名無しさん
2009/04/19(日) 17:50:02自分のソースコードにはTCHARとしか出てこないからあんまり気にしてないけど。
変換にはわなDのtchar.dを使ってるけど、それだとlstrlen使ってるな。
0512デフォルトの名無しさん
2009/04/19(日) 20:21:250513デフォルトの名無しさん
2009/04/19(日) 23:01:31ありがとう。
charがUTF8で思い切ったのはいいけど、Cとの互換性が鬱陶しくなったなぁ。
0514デフォルトの名無しさん
2009/04/19(日) 23:58:42いまさら98系に対応しています!とかいうアプリケーション作っても喜ぶ人はほとんどいない気がする。
0515デフォルトの名無しさん
2009/04/20(月) 01:58:160516デフォルトの名無しさん
2009/04/20(月) 03:15:370517デフォルトの名無しさん
2009/04/20(月) 16:40:46LLVM D
0518デフォルトの名無しさん
2009/04/20(月) 19:37:27Version D 2.029 Apr 19, 2009
大規模アップきたよー\(^p^)/
0519デフォルトの名無しさん
2009/04/20(月) 20:01:400520デフォルトの名無しさん
2009/04/20(月) 20:33:370521デフォルトの名無しさん
2009/04/20(月) 20:45:22Fileにバグがあって云々、って文言からすると、あんまり間を置かずに2.030になりそうだけど。
0522デフォルトの名無しさん
2009/04/20(月) 21:14:450523デフォルトの名無しさん
2009/04/20(月) 22:03:31std.stdio.write(int)が使えなくなっている(エラーメッセージが分かりづらい)
std.randomが破壊的に変わりまくり(前のが無駄に分かりにくかったのは確かだが)
std.string.toStringがstd.conv.to!(string)になっていた(deprecatedメッセージが適切すぎてこの機能にありがたさを感じる)
0524デフォルトの名無しさん
2009/04/20(月) 22:05:550525デフォルトの名無しさん
2009/04/20(月) 23:10:540526デフォルトの名無しさん
2009/04/21(火) 00:08:480527デフォルトの名無しさん
2009/04/21(火) 01:32:310528デフォルトの名無しさん
2009/04/21(火) 01:37:120529デフォルトの名無しさん
2009/04/21(火) 02:32:360530デフォルトの名無しさん
2009/04/21(火) 06:23:08しかし各種特異点近傍の振る舞いもやっぱり変わった気がする
あとで確かめてみるけど
0531デフォルトの名無しさん
2009/04/21(火) 11:38:130532デフォルトの名無しさん
2009/04/21(火) 15:11:38Version 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:210534デフォルトの名無しさん
2009/04/21(火) 15:24:11core.stdc.stdio.fflush
0535デフォルトの名無しさん
2009/04/21(火) 15:45:53object.d: Error: module object cannot read file 'object.d'
とか出てコンパイルできんようになった…
0536デフォルトの名無しさん
2009/04/21(火) 16:12:070537デフォルトの名無しさん
2009/04/21(火) 16:21:40動かないときは一旦全部消すのがdmd更新の定石
0538デフォルトの名無しさん
2009/04/21(火) 19:29:46どうファイルを置くように想定してるのかいまいち分からない
0539デフォルトの名無しさん
2009/04/22(水) 11:57:12string b = std.string.format(1, "X", new A );
どっちがお好み?
0540デフォルトの名無しさん
2009/04/22(水) 12:13:09後者を使うなら、やはりフォーマット文字列を与えるべきだと思う。
0541デフォルトの名無しさん
2009/04/22(水) 23:45:09がきもすぎる。
0542535
2009/04/22(水) 23:49:100543デフォルトの名無しさん
2009/04/23(木) 00:37:290544デフォルトの名無しさん
2009/04/23(木) 01:15:500545デフォルトの名無しさん
2009/04/23(木) 06:29:57パスに空白入れると面倒そうなものは
%SystemDrive%dev\とかにぶっ込むと無難。
0546デフォルトの名無しさん
2009/04/23(木) 12:54:19is式の中にdelegateの呼び出しがあるのか?
どうなるコード?
0547デフォルトの名無しさん
2009/04/23(木) 15:20:04デジゲートの中身にセマンティクスエラーがなければtrue、さもなくばfalse。
0548デフォルトの名無しさん
2009/04/23(木) 16:51:290549デフォルトの名無しさん
2009/04/24(金) 00:57:41人類オブジェクトの全配列は、やつらに処理を移譲してしまうしかないのか……!
みたいな。寝よう。
いや違う。そんなことはどうでもいいんだった。
> /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:49writefln(10)とか第一引数にフォーマット与えずに使ってるんじゃないの?
0551デフォルトの名無しさん
2009/04/24(金) 11:59:36writelnはフォーマットなし
ちゃんと使い分けするようになった
0552デフォルトの名無しさん
2009/04/24(金) 15:53:110553デフォルトの名無しさん
2009/04/24(金) 16:18:42dmdに引数で*.libなり*.aなり渡してやるか、pragma(lib)つかえば、
特に複雑なことをしなくてもリンクできるはずだが。
0554デフォルトの名無しさん
2009/04/24(金) 16:40:02windowsでdmd2.0.26なんだけど
そのままだと Not a Valid Library File て怒られて、
coffimplibとやらで変換してもC側の関数をDから呼ぶと
undefinedになってしまう。
0555デフォルトの名無しさん
2009/04/24(金) 16:44:19VCだとほぼ無理だしBCBだと形式に互換性はあるけどちょっと工夫しないとリンクできなかったと思う。
DLLにしてインポートライブラリ作るならどのコンパイラで作ったやつでもリンクできるはず。
0556デフォルトの名無しさん
2009/04/24(金) 17:11:13リンケージあわせてるか?
0557デフォルトの名無しさん
2009/04/24(金) 19:24:46今後,insertとかも追加されたりするだろうか.
0558sage
2009/04/25(土) 00:53:07dmd 2.029 --> 120k
gcc 4.3.3 --> 6k
20倍違うのね(;;)
dmd はビルドが速いっていいますけれども
どれくらい速いですか?
0559デフォルトの名無しさん
2009/04/25(土) 01:01:320560デフォルトの名無しさん
2009/04/25(土) 02:21:15ソースによっていろいろ変わってくるでしょうけれども例えばの話で、
gcc で 1時間 程掛かかる物が dmd だと 30分 程で済むという位ですか?
0561デフォルトの名無しさん
2009/04/25(土) 03:32:03と言うかC/C++言語は基本的にコンパイルがむちゃくちゃ遅いので恐らく比較にならんです。Cで1時間ならDで5〜6分くらいでは。
gdcと比較してと言う意味なら大差ないんじゃないでしょうか。
0562デフォルトの名無しさん
2009/04/25(土) 03:43:030563デフォルトの名無しさん
2009/04/25(土) 04:56:09Delphiをいろいろ調べてきました、ほとんどコンパイル(やビルド)に時間が掛からなくて
ほとんど、あっという間に終わるってかいてありました。
すごいです。
とても使いたいですけれども、ただ、仕様が安定していないのとライブラリが少ないのが痛いです。
(SDLライブラリを使用しようと、SDL1.2.13のヘッダーを手動で変換してたのですけれども途中で疲れました。
dmd用のを探したけれども古い物しか見つかず、ヘッダーをbit→bool変換しなくてはいけなかったりlibがWIN用でしかも
2種類あったりで?。ビルド時エラー連発になったので、どうせならと新しいのをソースから落としてきました(Linux))
0564デフォルトの名無しさん
2009/04/25(土) 07:59:57>ほとんど、あっという間に終わるってかいてありました。
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いろいろありがとうございました
ライブラリ、OpenGL関係もあって、めっちゃ感激でした。
0566デフォルトの名無しさん
2009/04/25(土) 17:46:16Dのが実行ファイルのサイズがでかいのはガベージコレクタが付いてるからで、
特に無駄なコード生成してるというわけではないです。
gccであってもC++でiostreamなんか使うと200KB超えるのであまり気にすることもないと思います。
0567デフォルトの名無しさん
2009/04/25(土) 19:45:540568デフォルトの名無しさん
2009/04/26(日) 17:41:500569デフォルトの名無しさん
2009/04/27(月) 01:37:23新しいPhobos解説して
0570デフォルトの名無しさん
2009/04/27(月) 21:33:30解説って言ってもなあ…
なんか難解なとこある?
0571デフォルトの名無しさん
2009/04/27(月) 22:36:48どういうときに使うと便利なのか
とか
0572デフォルトの名無しさん
2009/04/27(月) 23:59:250573デフォルトの名無しさん
2009/04/28(火) 00:06:590574デフォルトの名無しさん
2009/04/28(火) 00:30:20サクッと短いアプリ(スクリプトではなく)作ったり
とか
0575デフォルトの名無しさん
2009/04/28(火) 00:38:22生活できるんだがなぁ
0576デフォルトの名無しさん
2009/04/28(火) 01:09:570577デフォルトの名無しさん
2009/04/28(火) 01:14:580578デフォルトの名無しさん
2009/04/28(火) 01:17:310579デフォルトの名無しさん
2009/04/28(火) 12:05:060580デフォルトの名無しさん
2009/04/28(火) 13:43:23DFLはDっぽいコードがかけるしGUIで外観作れて使い勝手がよく軽いが、Winのみ。あと手の込んだものが作りにくい。
標準というにはどちらも惜しい感じだ…
gtkDとかwxDとかってどうなの?
0581デフォルトの名無しさん
2009/04/28(火) 23:32:10Metaprogramming in D by Walter
0582デフォルトの名無しさん
2009/04/29(水) 10:08:220583デフォルトの名無しさん
2009/04/29(水) 11:52:520584デフォルトの名無しさん
2009/04/29(水) 11:57:24ベースになるライブラリが存在するgtkD/DWT/wxWidgetsを
標準にするなんてことができるのだろうか?
0585デフォルトの名無しさん
2009/04/29(水) 12:00:49せっかくDの標準にするんだったらDらしいのがいいね
0586デフォルトの名無しさん
2009/04/29(水) 15:11:18DFLだけだとTableTreeとかCoolBarとか使えないから、そういうのは自分で作る必要があるってあたり。
そういうときはDWT使うけど、簡単なものはDFLの方が気軽に使えて好きだな。
0587デフォルトの名無しさん
2009/04/29(水) 18:48:38どうも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'
0588587
2009/04/29(水) 19:16:44ttp://www.digitalmars.com/d/2.0/phobos/std_range.html を見たら
どうやらDMDはisInputRangeと勘違いしているようだ
うぉるたん勘弁してください><
0589デフォルトの名無しさん
2009/04/29(水) 20:07:58R 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拡張できるようになっているから若干Dっぽいと言えなくもないんだ
でもまだ標準としては物足りないよね
0591587
2009/04/29(水) 22:30:12#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:54rangeがForwardRangeならコピーをとってるから、foreachからでた後もrangeは同じ場所を指している。
ForwardRangeでないなら(たとえばソケットとか)、空になってしまうのは仕方ない。
0593デフォルトの名無しさん
2009/04/30(木) 00:40:43コピーをしないでイテレートしたいケースもなんとかして欲しいっしょ
0594デフォルトの名無しさん
2009/04/30(木) 16:01:36いや、言ってること意味不明
0595デフォルトの名無しさん
2009/04/30(木) 16:36:46まあ、ForwardRangeでないRangeもラッパかぶせればForwardRangeにできるけれども。
0596587
2009/04/30(木) 17:37:50foreach (it; container)
はやめて
foerach (it; container.begin)
にすれば解決しそうだが、どうも納得いかないな
0597デフォルトの名無しさん
2009/04/30(木) 17:44:19Rangeをコピーしたときに複製されるのはビューなはずだが。
コピーに破壊的操作をすれば、コピー元も変化する。
0598596
2009/04/30(木) 17:47:14foreach (Iterator it; container) とやったときはイテレータループにすればいいんだ
問題は foreach (ref value; container) とやったとき
コピーしたやつを渡すとループ後に破棄されるからこまる
0599デフォルトの名無しさん
2009/04/30(木) 18:03:520600デフォルトの名無しさん
2009/04/30(木) 18:33:50コンテナ構造体の場合はコピーコンストラクタでRange状態をコピー元と別に持つようにして、
コンテナクラスの場合は、おとなしくコンテナとは別のオブジェクトをRangeとして実装しろ、
って感じ?
0601デフォルトの名無しさん
2009/04/30(木) 18:51:570602デフォルトの名無しさん
2009/04/30(木) 19:07:05RangeとはIteratorの開始点と終了点を持ったものらしい
利点はコンテナに対するアルゴリズムをそのまま使えるということ
D言語はRangeの前にコンテナを用意しろと
0603デフォルトの名無しさん
2009/04/30(木) 19:41:58> 問題は foreach (ref value; container) とやったとき
> コピーしたやつを渡すとループ後に破棄されるからこまる
containerのfront関数やpopFront関数の返値型を、
ref int front() というように参照返しにしてやればいいっぽいよ。
ref front()だとダメだった。
0604デフォルトの名無しさん
2009/04/30(木) 20:39:270605デフォルトの名無しさん
2009/05/01(金) 00:55:28か
foreach (val; range(container))
で我慢するしかないか
0606デフォルトの名無しさん
2009/05/01(金) 00:58:590607デフォルトの名無しさん
2009/05/01(金) 14:25:46cast(const(ubyte)[])使うと、うっかりconst書き忘れそう。
0608デフォルトの名無しさん
2009/05/01(金) 17:48:450609デフォルトの名無しさん
2009/05/01(金) 19:11:160610デフォルトの名無しさん
2009/05/01(金) 19:12:09const_cast欲しいなぁ
Dがキャスト1つにしてる理由ってなんだっけ
0611デフォルトの名無しさん
2009/05/02(土) 00:33:400612デフォルトの名無しさん
2009/05/02(土) 03:16:05コンパイルツールは付属のmake使ったりとかしてる。dsssよくわかんねー。
0613デフォルトの名無しさん
2009/05/02(土) 04:06:07中途半端なツールを使うくらいなら、使わない方がすっきりとしててわかりやすい。
まあ、VisualStudioぐらいしっかりとしたものなら別だが。
dmdのバージョンアップは、大きく変化したときは様子見。
安定してきたなと思ったらする。
0614デフォルトの名無しさん
2009/05/02(土) 05:27:59alias const(ubyte) cubyte;
const(char)[] x = "hoge".dup;
cubyte[] y = cast(cubyte[])x;
0615デフォルトの名無しさん
2009/05/02(土) 06:28:16cubyteを誤ってubyteと書く可能性があるから、根本的解決になってない。
0616デフォルトの名無しさん
2009/05/02(土) 06:45:14IDEとかdsssとかは何度かチャレンジしてるけどダメだった。
0617デフォルトの名無しさん
2009/05/02(土) 07:53:420618デフォルトの名無しさん
2009/05/02(土) 09:40:43デバッガはgdb(cgdb)使ってたけど1.028かその辺でステップ実行できなくなり、
その後zerobugsを使ったけどフリー版が期限切れになり(それにクソ重い)、
結局ロギングコードを埋め込みまくるスタイルになった。
0619デフォルトの名無しさん
2009/05/02(土) 10:24:20お前の人生誤ってばかりだからな。
0620611
2009/05/02(土) 10:26:500621デフォルトの名無しさん
2009/05/02(土) 10:43:13VSっぽく開発が進められて、なかなか安定感あると思う。なにより軽い!
でもPoseidonが参照返し関数があるモジュールの解析に
失敗して自動補完つかえなくなったりしてマズー
0622デフォルトの名無しさん
2009/05/02(土) 10:49:08GUIライブラリはwxD。
わかってたけどgdcユーザ少なそうだな。
0623デフォルトの名無しさん
2009/05/02(土) 17:01:230624デフォルトの名無しさん
2009/05/02(土) 17:05:49.ptr
0625デフォルトの名無しさん
2009/05/02(土) 17:25:590626デフォルトの名無しさん
2009/05/02(土) 17:35:580627デフォルトの名無しさん
2009/05/02(土) 18:11:330628デフォルトの名無しさん
2009/05/02(土) 18:42:130629デフォルトの名無しさん
2009/05/02(土) 19:36:28ソースはあるけどオプソじゃないよね?
0630デフォルトの名無しさん
2009/05/02(土) 19:44:180631デフォルトの名無しさん
2009/05/02(土) 19:44:24バックエンドの再配布はできないから、
OSI的オープンソースではないね。
0632デフォルトの名無しさん
2009/05/02(土) 22:14:51>>624
623じゃないけどそんなのあるってすっかり忘れてた!
どうもありがとう!
0633デフォルトの名無しさん
2009/05/02(土) 23:14:27byte 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:310635デフォルトの名無しさん
2009/05/03(日) 01:11:03俺は使ってないけど
0636デフォルトの名無しさん
2009/05/03(日) 02:14:03そんなのあったっけ
template A(T) if (これのことか?) {}
0637デフォルトの名無しさん
2009/05/03(日) 02:19:520638デフォルトの名無しさん
2009/05/03(日) 02:21:02ttp://gihyo.jp/admin/clip/01/fdt/200905/01
0639デフォルトの名無しさん
2009/05/03(日) 02:36:510640デフォルトの名無しさん
2009/05/03(日) 02:43:41それであってる
省略した形でも勿論使えるので新しいPhobosでは積極的に使われてる
0641デフォルトの名無しさん
2009/05/03(日) 02:46:550642デフォルトの名無しさん
2009/05/03(日) 02:53:25ラッパ構造体を作ってやればいい。
0643デフォルトの名無しさん
2009/05/03(日) 03:06:090644デフォルトの名無しさん
2009/05/03(日) 03:07:21それはどれに対するレス?
0645デフォルトの名無しさん
2009/05/03(日) 03:21:14const 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:410647デフォルトの名無しさん
2009/05/03(日) 10:29:41継承っぽいよね、継承でよくないの?
0648デフォルトの名無しさん
2009/05/03(日) 16:12:100649デフォルトの名無しさん
2009/05/03(日) 17:26:50でかいオブジェクトツリーを辿って型別に処理を書く場合、
else ifでキャストを羅列するか、visitorパターンを使うことになるが、
前者はパフォーマンスが気になるし、後者はツリーの型を増やす拡張がやりにくい。
Dのキャストの実装を見たところ、classinfoとインターフェースを辿って比較してるだけなので、
switch文中でそれをマージして無駄のないジャンプを作ってくれれないかなぁみたいな。
0650デフォルトの名無しさん
2009/05/04(月) 06:01:39テンプレートを駆使してそれらしいものを作ってはみたが,毎度のごとくコンパイラのバグでコンパイルすらできなかった……orz
0651デフォルトの名無しさん
2009/05/04(月) 07:42:30ちょっと例文を頼む
本家にポストしてみるわ
0652デフォルトの名無しさん
2009/05/04(月) 11:46:33// こういう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// こういう記述で
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念のためだが、classinfo_listはclassinfoのinterfacesとbaseをたどって作るrangeでいいんだよね?
0655デフォルトの名無しさん
2009/05/04(月) 14:51:380656デフォルトの名無しさん
2009/05/04(月) 15:11:08switch(o.classinfo){
case C.classinfo: break;
case B.classinfo: break;
case A.classinfo: break;
}
新しい構文とか必要ないし、こんな感じの拡張の方が嬉しいな
0657デフォルトの名無しさん
2009/05/04(月) 15:40:24baseを辿って作るrangeか配列で。インターフェースはこの配列自体を
複数持たせるとかが必要かな・・・。クラスの階層を使ったswitchを
やめてただのループにすればbaseとinterfaceを混ぜた配列でいいと思うけど、
折角使えそうなものを使わないのも勿体ないかなぁと。
>>656
それのcaseをダイナミックキャスト相当にすると現存のコードが動かなくなるんでは。
あと、キャスト後の変数の宣言も一回で済ませられると便利かなぁと。
0658デフォルトの名無しさん
2009/05/04(月) 15:43:25ClassInfoの時だけセマンティクスが変わるのはよくない
0659デフォルトの名無しさん
2009/05/04(月) 15:57:14> Internal error: toir.c 183
あばばばばば
0660デフォルトの名無しさん
2009/05/04(月) 16:53:22oの型はそれぞれの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あと予約語増やしてやって欲しい。
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:18fall throughは考えてなかった。fall throughさせると変数宣言が
曖昧になるので、caseの後ろに変数宣言をつけられるようにするとかかな。
type_switch (obj) {
case C:
case B, b: break;
case A, a: break;
}
0663デフォルトの名無しさん
2009/05/04(月) 19:42:28これでよくね?
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それだとAの派生クラスCを作ったときにtypeMapも更新しなくちゃいけないよね?
0665デフォルトの名無しさん
2009/05/04(月) 21:59:150666デフォルトの名無しさん
2009/05/04(月) 22:09:53無条件の登録はできないわけで、リフレクションがあったって大して変わらんかと。
0667デフォルトの名無しさん
2009/05/04(月) 22:46:560668デフォルトの名無しさん
2009/05/06(水) 16:40:050669デフォルトの名無しさん
2009/05/06(水) 19:13:480670デフォルトの名無しさん
2009/05/06(水) 21:18:520671デフォルトの名無しさん
2009/05/06(水) 22:39:27これ使えば好きなエディタを使ってIDEで使いたい機能のほとんど実装できそう
インテリセンスも辞書引きも、デバッガ呼び出しも
コード解析してdotにクラス図描いて表示も、クラスビューも
頑張ればほとんどの事が出来そうな気がする
0672デフォルトの名無しさん
2009/05/07(木) 01:19:410673デフォルトの名無しさん
2009/05/07(木) 02:44:38WinXP環境ではLoadLibrary()が失敗する。
Win7RCならいけたからたぶんVistaでもいける気がする。
DのプログラムからDで作ったDLLを読むとWinXPでも成功する。
GetLastError()で取り出したエラーコードは998(メモリロケーションへのアクセスが無効です)。
わけがわからん。。。。
0674デフォルトの名無しさん
2009/05/07(木) 03:20:030675デフォルトの名無しさん
2009/05/07(木) 04:03:330676デフォルトの名無しさん
2009/05/07(木) 18:24:38むしろカッコがないほうが気持ち悪いよな。
C#だと、
new A().MethodOfA();
が通って
(B)a.MethodOfB();
が通らないのが気持ち悪くて、わざわざカッコを書いちゃう。
0677デフォルトの名無しさん
2009/05/07(木) 19:27:00Could not detect versions
ってなんでしょうか。
Descentを使ってやると上記のエラー文が出てくるんです。
最初は¥がだめなんだと思ってたんですが、違ってたようで、
コマンドラインでスラッシュに変えて打っても
DSSS config error: unrecognized line '[D:/d/main.d]'.
と出ます。
どうしやったらコンパイル通るんでしょうか?
0678デフォルトの名無しさん
2009/05/07(木) 19:31:31new Class.Method;を認めるならこんなんも認めることになるかな
new Module.Class.Method();
new Class.StaticInnerClass.Method();
あとDではこれってどうなるべきなんだろう
new StaticClass.StaticInnerClass.Method();
0679デフォルトの名無しさん
2009/05/07(木) 19:41:080680デフォルトの名無しさん
2009/05/07(木) 21:04:07ドライブレターを削って相対パスにしてみるとかプロジェクト
ファイルとソースを同じパスになるようにしてみたらどうだろ。
0681デフォルトの名無しさん
2009/05/07(木) 23:18:051個古いやつで試したらあっさり動きました。
お騒がせしました。
0682デフォルトの名無しさん
2009/05/08(金) 23:33:34パース失敗するバグが直ってた!
0683デフォルトの名無しさん
2009/05/09(土) 02:32:410684673
2009/05/09(土) 02:49:08DLL_PROCESS_ATTACHで前のサンプルようにgc_init()とか書いてたけど、
新しいサンプルにあるようにRuntime.initialize()するようにしたら問題なく
ロードできた。
サンプルなんて変わってないだろーとチェックを怠っていた凡ミスだ。。。
0685デフォルトの名無しさん
2009/05/09(土) 17:16:140686デフォルトの名無しさん
2009/05/09(土) 17:16:490687デフォルトの名無しさん
2009/05/09(土) 21:05:180688デフォルトの名無しさん
2009/05/09(土) 21:20:190689デフォルトの名無しさん
2009/05/09(土) 21:25:04なんでデマングルだけなの?
マングル化も
0690デフォルトの名無しさん
2009/05/09(土) 21:57:50Phobosで信頼できるのはAlexandrescu先生の作品だけだぜ!
0691デフォルトの名無しさん
2009/05/10(日) 02:05:58mangleofを忘れて貰っちゃ…
0692デフォルトの名無しさん
2009/05/10(日) 03:17:00そんなのあったなぁ…。
プロパティかぁ。
0693デフォルトの名無しさん
2009/05/10(日) 08:41:22自動的にstatic importされるmoduleの書き方とかないの?
0694デフォルトの名無しさん
2009/05/10(日) 08:51:27…なぜstatic importをメインに使っていこうと思ったのか詳しく
0695デフォルトの名無しさん
2009/05/10(日) 23:36:02とは思うな。
std.とかはいらないにしても 俺ライブラリの関数ぐらいは。
0696デフォルトの名無しさん
2009/05/10(日) 23:46:360697デフォルトの名無しさん
2009/05/11(月) 01:03:55それ以外をそのままの名前で全部importする方法が欲しいんですけど
import std.stdio : p = writeln;
import std.stdio;
これすると衝突・・・しないじゃないか
なんてこったい
でもwritelnという名前は残ってしまうのはなんとかなりませんか
0698デフォルトの名無しさん
2009/05/11(月) 09:51:06assert(false, "muripo");
}
0699デフォルトの名無しさん
2009/05/11(月) 12:07:490700デフォルトの名無しさん
2009/05/11(月) 12:51:42いい構文も思いつかないです
0701デフォルトの名無しさん
2009/05/12(火) 15:39:42みたいに…
0702デフォルトの名無しさん
2009/05/12(火) 19:26:46でけたよ
http://codepad.org/MKHVHlFS
0703デフォルトの名無しさん
2009/05/12(火) 22:05:380704デフォルトの名無しさん
2009/05/12(火) 22:31:230705デフォルトの名無しさん
2009/05/13(水) 02:46:070706デフォルトの名無しさん
2009/05/13(水) 06:49:490707デフォルトの名無しさん
2009/05/13(水) 07:21:05こんなことできるんだなー。
0708デフォルトの名無しさん
2009/05/13(水) 19:40:28New/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:460710デフォルトの名無しさん
2009/05/13(水) 21:28:33おお凄い。来てるな未来。
マゾも狂喜w
0711デフォルトの名無しさん
2009/05/13(水) 22:50:46| `*。
,。∩ * もうどうにでもな〜れ
+ (´・ω・`) *。+゚
`*。 ヽ、 つ *゚*
`・+。*・' ゚⊃ +゚
☆ ∪~ 。*゚
`・+。*・ ゚
0712デフォルトの名無しさん
2009/05/13(水) 23:31:170713デフォルトの名無しさん
2009/05/13(水) 23:42:17なんというか自分のコードを対応させることを考えるとわくわくしてきたぜ
0714デフォルトの名無しさん
2009/05/13(水) 23:57:49でも、今回は大した互換性の崩れはなさそうだな。
0715デフォルトの名無しさん
2009/05/14(木) 00:59:120716デフォルトの名無しさん
2009/05/14(木) 01:24:390717デフォルトの名無しさん
2009/05/14(木) 01:24:450718デフォルトの名無しさん
2009/05/14(木) 01:42:07・・・むりぽ
0719デフォルトの名無しさん
2009/05/14(木) 01:52:54v1でがまん
0720デフォルトの名無しさん
2009/05/14(木) 10:18:29static int hoge;
static int* fuga = &hoge;
みたいなのが通らなくなってたのが互換性の崩れかな。
他のは何も考えず__gsharedしてしまえば昔と同じ(バグも同じ)か。
>>715
配列演算もまだ最適化できていない(むしろ遅い)んで、なんとも……
0721デフォルトの名無しさん
2009/05/14(木) 14:31:30i = 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:280723デフォルトの名無しさん
2009/05/14(木) 18:12:300724デフォルトの名無しさん
2009/05/14(木) 19:15:40-array=256とか。
0725デフォルトの名無しさん
2009/05/14(木) 20:07:260726デフォルトの名無しさん
2009/05/14(木) 21:39:340727デフォルトの名無しさん
2009/05/15(金) 04:10:570728デフォルトの名無しさん
2009/05/15(金) 06:55:30ループ用の処理のフットプリントを考えれば、
まあ4、8までは黙って展開していいと思う
0729デフォルトの名無しさん
2009/05/15(金) 07:26:22int[TypeInfo] typehash;
typehash[typeid(int)] = 1;
これを
typehash[int] = 1;
みたいにするにはどうしたらいいのだろう。
TypeInfoはClassInfoにしようかなとは思っているが。
0730デフォルトの名無しさん
2009/05/15(金) 09:04:26typehash.get!intとかで我慢するしかない。
0731デフォルトの名無しさん
2009/05/15(金) 22:49:26switchの代わりにhashを使うという方法で。
0732デフォルトの名無しさん
2009/05/15(金) 23:07:31並列化の実装はとりあえずOpenMPに投げてしまってはどうでしょう。
デフォルトならばコア数で配列を分割するよう指示。
必要に応じてコンパイラオプションで分母の値を設定することも可能、とか。
0733デフォルトの名無しさん
2009/05/16(土) 10:54:15http://www.infoq.com/news/2009/05/D-Source
0734デフォルトの名無しさん
2009/05/16(土) 16:25:32C言語で止まってる俺には理解できないw
0735デフォルトの名無しさん
2009/05/16(土) 18:43:200736デフォルトの名無しさん
2009/05/16(土) 19:07:000737デフォルトの名無しさん
2009/05/16(土) 19:11:500738デフォルトの名無しさん
2009/05/16(土) 22:14:56まとめすぎ
0739デフォルトの名無しさん
2009/05/16(土) 23:57:490740デフォルトの名無しさん
2009/05/16(土) 23:59:070741デフォルトの名無しさん
2009/05/17(日) 00:16:29配列関係の仕様全部。
長さの情報を他の変数で記憶しておかなくて良いし、連結も演算子ひとつでOKだし、部分抽出もコピーも楽ちん。
C++使ってた頃STLのvectorとstringとmap使いまくってたもんで、
それとほぼ同等の機能を言語仕様として取り込んでくれてる点も素晴らしい。
0742デフォルトの名無しさん
2009/05/17(日) 00:55:18GCがあって、scope文があって、'->'じゃなくて'.'に統一されてて、
っていう周辺機能があってこそだけど。
0743デフォルトの名無しさん
2009/05/17(日) 01:00:580744デフォルトの名無しさん
2009/05/17(日) 01:01:02C/C++と比べて、D言語に大きなデメリットはありませんか?
いい加減C++に疲れてきたから優れているというD言語学んでみようと思ってます
0745デフォルトの名無しさん
2009/05/17(日) 01:24:57GCに完全に依存しきったコードを書かなければならないこと。
よって、マイコン用のプログラムには不向き。
0746デフォルトの名無しさん
2009/05/17(日) 01:37:05・IDEとかの開発環境が微妙。
・ライブラリなんかはやっぱC/C++の充実っぷりが最強。
・コンパイラやライブラリにバグがあったり。
・バージョンアップでコンパイル通らなくなったりする。
まあ、最後のデメリットはさいきんあんまないし、あってもだんだん喜びに変わっていくんだぜ。
まとめると言語そのものはいいけど周辺と実装がやっぱなー、みたいな感じだ。個人的には。
0747デフォルトの名無しさん
2009/05/17(日) 01:38:120748デフォルトの名無しさん
2009/05/17(日) 04:34:20Objective-Cみたいに
0749デフォルトの名無しさん
2009/05/17(日) 04:42:12Digital Mars D-OS
0750デフォルトの名無しさん
2009/05/17(日) 04:49:58全てのアプリケーションをコンパイルし直すどころかコードを書き直さなければならない。
0751デフォルトの名無しさん
2009/05/17(日) 04:56:160752デフォルトの名無しさん
2009/05/17(日) 08:48:530753デフォルトの名無しさん
2009/05/17(日) 11:17:38もう関数呼び出しの度に結果用バッファを用意したり、
毎回戻り値をチェックしてエラーだったら何返そうかなんて考えるのは嫌だお
でもタイプセーフなのがいいし、ランタイムもできればないほうが嬉しいんだお
あと関係ないけどJava7からプロパティもクロージャも外されて超がっかりだお……
0754デフォルトの名無しさん
2009/05/17(日) 18:28:25ulongをStream.writeBlockで出力したらビッグエンディアンだった件
0755754
2009/05/17(日) 18:40:510756デフォルトの名無しさん
2009/05/17(日) 22:37:54Cでも定石で簡単に分けられるけど、言語仕様としてこういうのが入ってるのがいい。
0757デフォルトの名無しさん
2009/05/17(日) 23:47:31配列作るときに重宝する
0758デフォルトの名無しさん
2009/05/18(月) 14:35:510759デフォルトの名無しさん
2009/05/18(月) 14:40:000760デフォルトの名無しさん
2009/05/18(月) 14:47:44本当はモジュール名込みでほしいのだが、まあ動くのでよし
0761デフォルトの名無しさん
2009/05/18(月) 17:26:20this.classinfo.name
0762デフォルトの名無しさん
2009/05/18(月) 19:13:13.classinfoがランタイムにしか取れんのです
ClassName.classinfo.nameは静的に決まっていてもいいはずなのにランタイム扱いなので、
実行時にclassinfoを取って比較したいのにできなくて困っていたという。
0763デフォルトの名無しさん
2009/05/18(月) 19:38:03コンパイル時の話か。
ごめんね、ちゃんと読んでなかった。
0764デフォルトの名無しさん
2009/05/19(火) 23:34:46int 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:100766デフォルトの名無しさん
2009/05/20(水) 10:02:28最近、ROMってるだけじゃわからんくなってきたなぁ。
0767デフォルトの名無しさん
2009/05/20(水) 11:46:35なんか違うものになってた。車輪の再発明っぽい
コンパイル時にアップキャスト可能か調べたりできたっけ?
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:160769764
2009/05/20(水) 15:42:38で、いろいろやってみたら const int opCmp(ref const (A) o) { hogehoge; } にしないといけないらしい、面倒だ…
自己解決で申し訳ない。
0770デフォルトの名無しさん
2009/05/21(木) 17:45:410771デフォルトの名無しさん
2009/05/21(木) 18:48:23> コンパイル時にアップキャスト可能か調べたりできたっけ?
の話は、コンパイル時にテンプレートやstatic ifで受け取った型があるクラスの派生かどうかを調べたい、というものです。
std.traits.BaseTypeTupleのうちから特定のクラスを探すには……というので簡単な方法があればいいのですが、
なければ自分で作るのかなと。
0772デフォルトの名無しさん
2009/05/21(木) 19:02:12is使えば出来るだろ。
0773デフォルトの名無しさん
2009/05/21(木) 19:21:32っすね。すっかり忘れていましたorz
0774デフォルトの名無しさん
2009/05/21(木) 23:39:17ややこしいのは自分様用に
0775デフォルトの名無しさん
2009/05/22(金) 00:09:18じぶんよう^H^Hようなんだ・・・・
0776デフォルトの名無しさん
2009/05/22(金) 02:09:22普通に使ったら値型なのにコレはキモチワルイw
0777デフォルトの名無しさん
2009/05/22(金) 12:33:400778デフォルトの名無しさん
2009/05/23(土) 01:46:000779デフォルトの名無しさん
2009/05/23(土) 22:11:130780デフォルトの名無しさん
2009/05/23(土) 23:16:580781デフォルトの名無しさん
2009/05/24(日) 02:04:140782デフォルトの名無しさん
2009/05/24(日) 03:07:540783デフォルトの名無しさん
2009/05/24(日) 05:09:560784デフォルトの名無しさん
2009/05/24(日) 12:14:460785デフォルトの名無しさん
2009/05/24(日) 12:20:430786デフォルトの名無しさん
2009/05/24(日) 14:55:531.x系は安定してる?
破壊的バージョンうっぷは2.x系のみ?
そろそろ1.x系で自作アプリをごにょごにょ作っても大丈夫?
0787デフォルトの名無しさん
2009/05/24(日) 15:12:540788デフォルトの名無しさん
2009/05/24(日) 16:37:300789デフォルトの名無しさん
2009/05/24(日) 21:13:22もう最初から2.x専用で作った方が楽だ
0790デフォルトの名無しさん
2009/05/24(日) 21:23:33PHPだって5.2以降じゃないと動かないスクリプトたくさんあるし
過去のバージョンにも対応させる必要はないと思う
0791デフォルトの名無しさん
2009/05/24(日) 21:29:06だったらDではコンパイルできなくて当然
0792デフォルトの名無しさん
2009/05/24(日) 21:34:13version(D_Version2) mixin(code);
else mixin(convert_for_d1(code));
}
0793デフォルトの名無しさん
2009/05/24(日) 23:27:00D2の std.signals の再発明っぽいね。
あと3か月でD2の仕様を固めるらしい。
http://lists.puremagic.com/pipermail/digitalmars-d/2009-May/057124.html
0794デフォルトの名無しさん
2009/05/24(日) 23:50:200795デフォルトの名無しさん
2009/05/24(日) 23:54:07多倍長整数型はあるのに有理数型がないなんて。
0796デフォルトの名無しさん
2009/05/25(月) 00:32:310797デフォルトの名無しさん
2009/05/25(月) 00:41:35メンテナンスする人いなくて止まってる。
0798デフォルトの名無しさん
2009/05/25(月) 08:28:42D3を作り始める原因になる最大の破壊的変更はなんだろう
0799デフォルトの名無しさん
2009/05/25(月) 10:29:19C#で作ったソフト移植してみたけど比較にならないくらいでかくなった
0800デフォルトの名無しさん
2009/05/25(月) 10:33:10メニーコア・・だったらいいなと思う
0801デフォルトの名無しさん
2009/05/25(月) 11:46:490802デフォルトの名無しさん
2009/05/25(月) 14:25:002007のカンファレンスでの内容としていまだ無いのっていったら
構造体のinterface継承、macro、暗黙変換の演算子オーバーロード、DTL
とかかな?ほかにも面白そうな機能まだ残ってるけど
0803デフォルトの名無しさん
2009/05/25(月) 14:46:020804デフォルトの名無しさん
2009/05/25(月) 14:47:05以前からチマチマ話題に出しているコンテキストに応じた名前の選択がないかな
enum E { A, B, C};
void f(E e);
f(E.A); ← 現在は完全な修飾が必要
f(A); ← こうしたい
まあ言語としてはだいぶ洗練されてきたが、
標準ライブラリの弱さがどうしてもなあ。
JavaほどでなくていいがCよりは充実させてほしい
0805デフォルトの名無しさん
2009/05/25(月) 16:00:50別々enum同士で同じ名前が定義できなくなりそうだ。C++みたいに。
0806デフォルトの名無しさん
2009/05/25(月) 16:01:450807デフォルトの名無しさん
2009/05/25(月) 16:10:33型名を修飾しなくていいようにしてほしい、って話だろうな。
C++のように常に修飾が要求されないのは気持ち悪い気がする。
0808デフォルトの名無しさん
2009/05/25(月) 16:46:46関数がオーバーロードされていればそうなるかと
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:09enum 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:380811デフォルトの名無しさん
2009/05/25(月) 20:23:08その手の名前の衝突は列挙子のメンバに限らず、モジュールレベルでも起きうることだから、
今更とりあげて問題視すべきこととは思わない。
0812デフォルトの名無しさん
2009/05/25(月) 21:10:25Overload Setsもあるし全く問題ない
でも必要性をあまり感じないな
0813デフォルトの名無しさん
2009/05/25(月) 21:11:05andrei無双始まる?
0814デフォルトの名無しさん
2009/05/25(月) 23:01:48ドメイン変わった?
サーバ落ちた?
0815デフォルトの名無しさん
2009/05/26(火) 00:40:060816デフォルトの名無しさん
2009/05/26(火) 00:49:54逆に場当たり的に作られてきた“標準”ライブラリの多さにビビるな
0817デフォルトの名無しさん
2009/05/26(火) 09:52:45あってほしいが、他をやって3ヶ月でいけるかな?
0818デフォルトの名無しさん
2009/05/26(火) 12:49:450819デフォルトの名無しさん
2009/05/26(火) 12:56:50B 「流石に誰か作ってるよね?」
C 「流石に誰か作ってるだろ常識的に考えて」
結果誰も作ってませんでしたパターンがありそうで怖い
0820デフォルトの名無しさん
2009/05/26(火) 13:05:24可変長配列(vector)って組み込み以外に必要なのかな
0821デフォルトの名無しさん
2009/05/26(火) 14:23:43mapとhash(unordered)は連想配列で足りるな
0822デフォルトの名無しさん
2009/05/26(火) 17:28:26あたりを全部組み込み型にしちゃえばいいんじゃないかな!
ライブラリでは不可能な最適化を行い、最高のパフォーマンスを提供します!みたいな。
0823デフォルトの名無しさん
2009/05/26(火) 17:33:31ライブラリでは不可能な最適化って具体的にどんな?
0824デフォルトの名無しさん
2009/05/26(火) 18:14:360825デフォルトの名無しさん
2009/05/26(火) 18:43:13VC++でソートの性能を自作したのとSTLで比べたら、圧倒的な差をつけてSTLが勝ったことがある。
なんでか調べたら、C++では標準ライブラリを特別扱いして最適化することを認めてるとかそんな理由だった気がする。
だから漠然とだけど組み込み型の方が速くなる可能性あるのかな、と思ってたけど違うのかな?
0826デフォルトの名無しさん
2009/05/26(火) 19:15:40mapとhashとsetの区別はしてる?
0827デフォルトの名無しさん
2009/05/26(火) 22:53:480828デフォルトの名無しさん
2009/05/27(水) 01:20:58普通に作ってassumeUnique
0829デフォルトの名無しさん
2009/05/27(水) 12:56:510830デフォルトの名無しさん
2009/05/27(水) 13:06:23ありがとうございました。
>>829
std.algorithmで見た気がする
0831デフォルトの名無しさん
2009/05/27(水) 23:27:03ちなみにXPとUbuntuです
0832デフォルトの名無しさん
2009/05/27(水) 23:42:37バージョンの話なら、2もそろそろ破壊的変更がなくなるらしいから、これから1をつかう理由もないかと。
0833デフォルトの名無しさん
2009/05/27(水) 23:47:27実用度の程は知らんが
0834デフォルトの名無しさん
2009/05/28(木) 00:03:520835デフォルトの名無しさん
2009/05/28(木) 12:09:22どうもです
dmd入れてみます
0836デフォルトの名無しさん
2009/05/28(木) 15:20:330837デフォルトの名無しさん
2009/05/28(木) 15:37:320838デフォルトの名無しさん
2009/05/28(木) 16:21:320839デフォルトの名無しさん
2009/05/28(木) 16:43:03なんかすごいことになってるなぁ。
0840デフォルトの名無しさん
2009/05/28(木) 23:10:340841デフォルトの名無しさん
2009/05/28(木) 23:13:54今WinのCodeBlocksでDバイナリ作るとexe吐く際に異常終了扱いされるバグが出てるんだが、
もしかしたら俺だけかもしれないので試してみていただきたい。
0842840
2009/05/28(木) 23:46:30Hello 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すいませんがまたアドレス変わりました
0845デフォルトの名無しさん
2009/05/29(金) 23:50:500846デフォルトの名無しさん
2009/05/29(金) 23:53:16language, 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への移行
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まず始めに、すべてのグローバル変数を探し出して、それぞれの配置を再検討します。
ソースコードの複雑さにも寄りますが、グローバル変数を特定するのは
いつも簡単であるとは限りません。
グローバル変数の宣言は暗黙である(あった)ために、grepする方法がありません。
グローバル変数をすべて確実に探し出すのは困難です。
そこで、新しいdmdコンパイラでは -vtls スイッチが追加されました。
スイッチ付きでコンパイルすると、デフォルトでスレッドローカル記憶域に配置されるようになった
すべてのグローバル変数の一覧が出力されます。
immutableへの移行
immutableなデータは、一度だけ初期化され、決して変更されることはありません。
これは、マルチスレッドで同期の問題が起こらないので、immutableなデータをTLSに
置く必要がないことを意味します。
コンパイラは、immutableなデータをTLSではなく古いグローバルに配置します。
sharedとしてマーク
複数のスレッドで共有されることになるグローバルなデータは、sharedキーワードで
マークされるべきです
0849デフォルトの名無しさん
2009/05/31(日) 00:09:49これによって、flagが古いグローバルに配置されるだけではなく、共有される型にもなります。
int* p = &flags; // エラー, flags は shared
shared(int)* q = &flags; // ok
sharedの属性はconstやimmutableのように推移的になります。
__gsharedでごにょごにょ
時には、上記の解決策が適用できない場合もあるでしょう
-Cコードとのインターフェースで古いグローバルを使用する
-とりあえず動けばいいんだ、元に戻してくれ、後で修正するから
-このアプリはシングルスレッドのみ。共有の問題は発生しない
-とにかく最高のパフォーマンスを
-すべての同期問題を自分で処理したい
Dはシステム言語なので、もちろんこういうことを行う方法があります。
記憶域クラス__gsharedを使用してください
0850デフォルトの名無しさん
2009/05/31(日) 00:11:03TLSに関して最もよく発生するコンパイラのエラーは:
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:080852デフォルトの名無しさん
2009/05/31(日) 11:49:49これでいけた。
0853デフォルトの名無しさん
2009/06/02(火) 11:58:090854デフォルトの名無しさん
2009/06/02(火) 12:18:04C++0xとかきもすぎ
0855デフォルトの名無しさん
2009/06/02(火) 19:07:090856デフォルトの名無しさん
2009/06/03(水) 04:14:580857デフォルトの名無しさん
2009/06/03(水) 09:40:15alias immutable(char)[] string;
class A{
invariant{}
}
0858デフォルトの名無しさん
2009/06/03(水) 12:45:560859デフォルトの名無しさん
2009/06/03(水) 15:31:260860デフォルトの名無しさん
2009/06/03(水) 23:50:49StorageClassとしてのimmutableは、invariantと等価な実装になってるらしいw
0861デフォルトの名無しさん
2009/06/04(木) 01:15:300862デフォルトの名無しさん
2009/06/04(木) 01:36:41違う。記憶域クラスはimmutable、不変性契約がinvariant。
記憶域クラスとしてinvariantが使えるのは一時的な措置だろう。
0863デフォルトの名無しさん
2009/06/05(金) 05:55:290864デフォルトの名無しさん
2009/06/05(金) 05:59:090865デフォルトの名無しさん
2009/06/05(金) 12:42:020866デフォルトの名無しさん
2009/06/05(金) 16:31:01staticなら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なんでクラス or 抽象クラスにしないんだ
>>867
目的がわかんね
0869デフォルトの名無しさん
2009/06/08(月) 02:48:20インターフェイスがデフォルト実装を持つと、vtblがぐちゃぐちゃになって、
多重継承を禁止している理由に反するから、そういう機能が標準で入ることはないだろう。
0870デフォルトの名無しさん
2009/06/08(月) 03:27:50多重継承するから
>>869
継承禁止でつけられないかなと思うのよね
仮想関数の引数を固定して呼ぶだけ、みたいなマクロ的用途で欲しいことが
0871デフォルトの名無しさん
2009/06/08(月) 03:36:35んー確かに
継承ツリーの最上位でメンバメソッドがfinal指定されていると、
仮想関数でなくなって静的に解決できるようになるから、仮想関数テーブルの問題はなくなるね。
あとは、名前の衝突だけど、これは普通に複数のインターフェイスを実装する場合にでも
起こりうることだから、C#みたいにどのインターフェイスを実装するのか明示できるようにして欲しいね。
0872デフォルトの名無しさん
2009/06/08(月) 12:00:18ああ,多重継承の代わりの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:46C#ではこうやって実装する。
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:020875デフォルトの名無しさん
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:39andreiタソの本キター?
0877デフォルトの名無しさん
2009/06/13(土) 16:06:05D終わったな
0878デフォルトの名無しさん
2009/06/13(土) 20:15:440879デフォルトの名無しさん
2009/06/14(日) 02:48:510880デフォルトの名無しさん
2009/06/14(日) 04:03:51this(){
}
で宣言できるんだな。
c#だったら
classの名前と同じ名前で宣言してたけど
thisで宣言できるとこっちのほうがわかりやすくていいな。
0881デフォルトの名無しさん
2009/06/14(日) 05:01:020882デフォルトの名無しさん
2009/06/14(日) 05:01:420883デフォルトの名無しさん
2009/06/14(日) 06:00:270884デフォルトの名無しさん
2009/06/14(日) 14:47:310885デフォルトの名無しさん
2009/06/14(日) 15:23:17コンストラクタがthisでアロケータがnewな現状でいいと思う。
0886デフォルトの名無しさん
2009/06/14(日) 15:25:19this() {
this(default_value);
}
this(value) {
...
}
ってのができるので、newだと気持ち悪い、と思った。
0887デフォルトの名無しさん
2009/06/14(日) 15:34:300888デフォルトの名無しさん
2009/06/14(日) 16:21:230889デフォルトの名無しさん
2009/06/14(日) 16:52:470890デフォルトの名無しさん
2009/06/14(日) 18:03:42そんなのはヲルたん一人でなんでも決められるDだからできること。
0891デフォルトの名無しさん
2009/06/14(日) 23:33:15訳本を待ってる間に仕様が変わってる予感
0892デフォルトの名無しさん
2009/06/15(月) 00:54:110893デフォルトの名無しさん
2009/06/15(月) 01:05:14これがスケジュール通りいくなら、最新の情報で校正して出してくれるかもね
0894デフォルトの名無しさん
2009/06/15(月) 02:54:040895デフォルトの名無しさん
2009/06/15(月) 03:55:440896デフォルトの名無しさん
2009/06/15(月) 04:49:35俺たちがするんだ
0897デフォルトの名無しさん
2009/06/15(月) 04:50:34DのライバルはJavaやC#
0898デフォルトの名無しさん
2009/06/15(月) 04:53:15そういう時代がくればいいが
0899デフォルトの名無しさん
2009/06/15(月) 04:54:21ってことね
0900デフォルトの名無しさん
2009/06/15(月) 05:14:100901デフォルトの名無しさん
2009/06/15(月) 05:28:43さっくりひっくりかえせる力はあるような気がする
0902デフォルトの名無しさん
2009/06/15(月) 05:29:19どこが参考になったのかw
0903デフォルトの名無しさん
2009/06/15(月) 05:32:470904デフォルトの名無しさん
2009/06/15(月) 05:33:45Objective Cか。Objective C++もあるけど
0905デフォルトの名無しさん
2009/06/15(月) 05:35:13GCが嫌なんだったらまずはこれを作ってみたらいいのでは。
一時オブジェクトの破棄がスイープまで起こらないことが問題になるような
シビアなコードを本当にC++で書く人なんてまれだろう
0906デフォルトの名無しさん
2009/06/15(月) 05:40:340907デフォルトの名無しさん
2009/06/15(月) 12:07:15オブジェクトが一つフリーになったからといってメモリは解放できない。
0908デフォルトの名無しさん
2009/06/15(月) 14:38:46そういえばGC持ってるとそこがいいらしいけどなんで?
0909デフォルトの名無しさん
2009/06/15(月) 15:00:03一度使ってヒープに戻すよりも再活用するほうが色々リーズナブルみたいだ。
0910デフォルトの名無しさん
2009/06/15(月) 15:15:31オブジェクト一つを破棄しても、メモリを解放できるとは限らない。
それは、Cのmalloc/freeや、C++のnew/deleteでも同じ話。
0911デフォルトの名無しさん
2009/06/15(月) 15:42:50じゃあGCがあるからC++の代わりにはならないというのはデマなんだ
0912デフォルトの名無しさん
2009/06/15(月) 16:41:56DのGCってなんの意味があんの?
0913デフォルトの名無しさん
2009/06/15(月) 16:53:13いや、GCが解放するときデストラクタは呼ばれるぜ。
GCが解放してくれるっていう保証がないだけw
0914デフォルトの名無しさん
2009/06/15(月) 20:49:36絶望した
0915デフォルトの名無しさん
2009/06/15(月) 20:57:540916デフォルトの名無しさん
2009/06/15(月) 21:01:200917デフォルトの名無しさん
2009/06/15(月) 23:18:35でも、局所で使う以外は面倒だ
0918デフォルトの名無しさん
2009/06/15(月) 23:59:320919デフォルトの名無しさん
2009/06/16(火) 00:02:090920デフォルトの名無しさん
2009/06/16(火) 00:09:16参照カウントが0になった時用のデストラクタと
スイープされた時用のデストラクタがあればいいんだ
0921デフォルトの名無しさん
2009/06/16(火) 00:13:420922デフォルトの名無しさん
2009/06/16(火) 00:24:44わざわざGCする
必要がないから
0923デフォルトの名無しさん
2009/06/16(火) 00:52:420924デフォルトの名無しさん
2009/06/16(火) 01:26:04GCが保証されていないってのは、アプリケーションの正常終了時のこと。
メモリが不足したらGC走ってデストラクタ呼ぶのは当然として、
終了時に確実にデストラクタがよばれることがなぜか仕様上定められていない。
実際には最近のdmdでは呼ばれるっぽい?
0925デフォルトの名無しさん
2009/06/16(火) 06:47:03invariantオブジェクトは破壊してはいけないことになってるし。
0926デフォルトの名無しさん
2009/06/16(火) 09:36:58DOSクルー
0927デフォルトの名無しさん
2009/06/16(火) 18:00:19オブジェクトの移動が仮想メモリ下に隠蔽されたりとかするんだろうか
0928デフォルトの名無しさん
2009/06/16(火) 18:06:140929デフォルトの名無しさん
2009/06/16(火) 18:13:54あとLinux辺りにはGC実装したいという利害関係が一致した人が居る予感。
0930デフォルトの名無しさん
2009/06/16(火) 19:22:440931デフォルトの名無しさん
2009/06/17(水) 11:44:20それでも非invariantオブジェクトは破壊して解放するのを保証して欲しい
0932デフォルトの名無しさん
2009/06/17(水) 11:57:32破壊順はstaticコンストラクタの逆順でいいじゃん
0933932
2009/06/17(水) 13:01:530934デフォルトの名無しさん
2009/06/17(水) 15:02:590935デフォルトの名無しさん
2009/06/17(水) 15:45:59訳わかんないからCGとかなくていいよ!
0936デフォルトの名無しさん
2009/06/17(水) 18:01:120937デフォルトの名無しさん
2009/06/17(水) 18:01:50C/C++は生き残り続ける
0938デフォルトの名無しさん
2009/06/17(水) 18:08:41そもそも完全に駆逐された言語ってのも少ない気がするけどなあ。
一般的にって話じゃなくて、このスレ住人で、とか自分の中で、って話なら同意。
0939デフォルトの名無しさん
2009/06/17(水) 19:33:02一回業界で根付いたものは、システムとともに長生きするんだろうな。
0940デフォルトの名無しさん
2009/06/17(水) 19:39:370941デフォルトの名無しさん
2009/06/17(水) 19:44:31数年前ガートナーによれば、全世界で稼働してるソフトウェアは
ソースコードにして3100億行で、そのうちの2000億がCOBOLらしいよ。
そして新たに年間50億行書かれてるというから恐ろしい。
0942デフォルトの名無しさん
2009/06/17(水) 19:58:47楽に綺麗に書ける言語とはまた別
0943デフォルトの名無しさん
2009/06/18(木) 19:31:08D1.0 + Phobos
D1.0 + Tango
D2.0 + Phobos
D2.0 + Tango
どれ使うべき?あとIDEとGUI Libraryは何を使うべきかな?
0944デフォルトの名無しさん
2009/06/18(木) 20:16:270945デフォルトの名無しさん
2009/06/18(木) 20:19:040946デフォルトの名無しさん
2009/06/18(木) 20:31:480947943
2009/06/18(木) 20:48:25http://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:490950デフォルトの名無しさん
2009/06/18(木) 21:38:32とりあえずクロスプラットフォームで動くネイティブGUIアプリをD言語で作りたい。「D言語で」ってのが重要、C++で作るのがもっとも適しているのは承知済み。
なんでD1.0使うべきなんだろうが、PhobosよりTangoの方がいいの?まだバージョン1.00になってないみたいだが…
0951デフォルトの名無しさん
2009/06/18(木) 22:27:46その時にTangoも1.0になるんじゃないの
0952デフォルトの名無しさん
2009/06/18(木) 23:38:51// 連想配列絡みのメソッドは全て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> じゃ、これなに?w
これなにって...ないってことじゃないか
0954デフォルトの名無しさん
2009/06/19(金) 16:21:00> 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>>952の趣旨に合ってる?
0956デフォルトの名無しさん
2009/06/19(金) 19:15:53c_putの方のtable[key]は、constが暗黙に非constにキャストされるような感じなのがダメなのかな。
0957デフォルトの名無しさん
2009/06/19(金) 20:15:050958デフォルトの名無しさん
2009/06/19(金) 20:33:56おまえらが何を悩んでるのかわからんが、Tがmutable型のとき
Tからconst(T)へは変換できるが、const(T)からTへの変換はできない。
それだけの話だろ。
いかなる場合でも、これに例外を設けると、それが抜け道となってconst-correctnessが崩壊する。
0959デフォルトの名無しさん
2009/06/19(金) 20:40:51まあそれは仕様として当然の事ではあるけど、
こういう場合は特例として暗黙に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が崩壊する。
やっぱりこれだよなぁ…
0960958
2009/06/19(金) 21:00:07連想配列のopIndexAssignはキーが存在しない場合、キーと値のペアを格納するからダメだけど、
opIndexやopIn_rなら既存のキーと引数で与えられたキーを比較するだけだから、
const(KeyType)を受け付けるべきだと思うよ。
この場合、KeyTypeにbool opEquals(const(Object))のオーバーロードが必要になるが。
0961デフォルトの名無しさん
2009/06/19(金) 21:07:510962952=959
2009/06/19(金) 21:09:20>この場合、KeyTypeにbool opEquals(const(Object))のオーバーロードが必要になるが。
ああ、なるほど
しかしそれは今のObjectには存在しないから追加したとしたらopEquals(Object)をオーバーロードしてる全てのクラスに修正が必要になってきて
ごめんなさい
俺が悪かったです
0963デフォルトの名無しさん
2009/06/19(金) 21:22:570964デフォルトの名無しさん
2009/06/19(金) 21:38:34さもないとconstにした途端比較できなくなる
0965デフォルトの名無しさん
2009/06/19(金) 21:43:09int 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:49const bool opEquals(const Object)
だけがあればいいんじゃないの?
0967デフォルトの名無しさん
2009/06/19(金) 21:56:550968デフォルトの名無しさん
2009/06/19(金) 22:14:12逆はちゃんとエラーになったからたぶんきっと仕様
0969デフォルトの名無しさん
2009/06/20(土) 02:01:28なんか参考になるページとかない?
0970デフォルトの名無しさん
2009/06/20(土) 02:12:09どうしてもというなら一からTangoで作り直せ
0971デフォルトの名無しさん
2009/06/20(土) 02:41:22まず、標準ライブラリをラップするライブラリから作ることになるよw
まじでやめといた方がいい。
0972969
2009/06/20(土) 03:09:59標準入出力からして全然違うとかもう勘弁して欲しいわ・・・
0973デフォルトの名無しさん
2009/06/20(土) 04:29:48tangobosってのがあった気がする。
今も使えるかは知らない。
0974デフォルトの名無しさん
2009/06/20(土) 04:32:110975デフォルトの名無しさん
2009/06/20(土) 06:11:23druntimeがあるのはD2だけだな。
D2でTangoが使えるようになった時にはPhobosと共存できるに違いないと信じる。
0976デフォルトの名無しさん
2009/06/20(土) 06:27:130977969
2009/06/20(土) 11:44:20>>973
試してみます。
>>976
参考になりました。
tangoとphobosへの依存は最小限というか可能な限り使わないって
方針かな・・・代わりにWin32に依存してるのかもしれないけど。
しかし、それでも結構細々とした対応が必要なのとすでに
D3用のversionが用意されてるのが泣けた。
0978デフォルトの名無しさん
2009/06/20(土) 19:10:37いくらPhobosが使えないからといって、言語のベースをカオスにした罪は大きい
0979デフォルトの名無しさん
2009/06/20(土) 20:19:06それで泥臭いPhobosを使わなくて済むようにしたかったんだろう…
Boostみたく普通のライブラリにすれば神ライブラリと呼ばれたろうに…
0980デフォルトの名無しさん
2009/06/20(土) 20:44:020981デフォルトの名無しさん
2009/06/20(土) 20:46:130982デフォルトの名無しさん
2009/06/20(土) 21:08:33とか書くたびに絶望的な気分になる
0983デフォルトの名無しさん
2009/06/20(土) 21:08:520984デフォルトの名無しさん
2009/06/20(土) 21:55:54tango自体はどうでもいいが、ライブラリがtango依存なせいでtangoを入れざるを得ない。
0985デフォルトの名無しさん
2009/06/20(土) 22:13:49tangoって使ったことないけどそんな気持ち悪いんかw
それは確かに絶望的な気分になるのも頷ける・・・
0986デフォルトの名無しさん
2009/06/20(土) 23:28:10D2だとPhobosはRangeが中心になってきてるし
今後はネットワークモジュールが入る可能性もあるので
Tangoを使うメリットが減りそうな感じ
レス数が950を超えています。1000を超えると書き込みができなくなります。