D言語 Part14at TECH
D言語 Part14 - 暇つぶし2ch175:デフォルトの名無しさん
07/08/05 12:03:28
っ gtkD

176:デフォルトの名無しさん
07/08/05 12:22:53
Duit
URLリンク(www5.ocn.ne.jp)


177:デフォルトの名無しさん
07/08/05 12:24:50
>>175-176
ありがとうございます
調べたら色々出てきたので
いくつか比較してみたいと思います
URLリンク(www.autla.com)


178:デフォルトの名無しさん
07/08/06 11:56:11
URLリンク(d.hatena.ne.jp)
これってどうなんじゃろ? 仕様外?

179:デフォルトの名無しさん
07/08/06 12:50:22
inが通るなら、outも通らなきゃねとおも

180:デフォルトの名無しさん
07/08/06 13:09:37
コンパイラ自身がassertion failureって言ってるなら
間違いなくコンパイラのバグだと思うけど。

181:デフォルトの名無しさん
07/08/06 13:11:52
どっちが?
inが通るのが?
それともoutが通らないのが?

182:デフォルトの名無しさん
07/08/06 14:26:28
コンパイラのコード(.cファイル)内でassertion failureを起こしてるから
コンパイラにバグがあるのは確定。

関数リテラルでは"FunctionBody"が書ける仕様になってる。
これはin、out、bodyが書ける構文要素のことなので、
outを書けないのはバグ。
inが書けるのは仕様通り。
delegateを省略した場合に事前・事後条件が書けないのはバグ。

183:デフォルトの名無しさん
07/08/06 14:57:24
ところでWin32APIを軽くラップしようとしたら、
char[]をnullに出来ないので困っていたりする。

func(char[] str){
  win32api(toStringz(str));
}
func(null);

とするとnullが""に暗黙変換されちゃって、funcにnullが持ち込めない。
nullableみたいのって無かったっけ?

184:デフォルトの名無しさん
07/08/06 15:16:56
str is null ? null : toStringz(str) では

185:183
07/08/06 15:31:32
>>184
func()と同じ理由でtoStringz()もnullを受け取ることはできないので、あまり意味はないかと。
toStringz(null)はtoStringz("")として呼び出される事になるので。

って、そう考えるとtoStringz()も使っちゃダメってことじゃないか。
めんどくせーなー。

186:デフォルトの名無しさん
07/08/06 15:41:08
void main() { int[3] a = [1,2,3]; }

実行時に "Error: Stack Overflow" ってなるんだけど、何が悪いのでしょうか?
DMD 2.003を使ってます。

187:184
07/08/06 16:05:29
>>185
いやいやいや、toStringzにnull渡してないから。こう。
 void func(char[] str){
  win32api(str is null ? null : toStringz(str));
 }
実際には何回もつかうだろうから関数化すりゃいいと思う。

> toStringz(null)はtoStringz("")として呼び出される事になるので。
違う。nullはnull。toStringzの実装が特に""とnullを区別してないだけで

188:デフォルトの名無しさん
07/08/06 16:06:30
>>184じゃないが
str is null ? null : toStringz(str)
なのに
toStringz(null)
が出てくる理由がわからんし、
ポインタ型にnullを渡すと(p==0)になるでしょ常考。

189:デフォルトの名無しさん
07/08/06 16:10:06
>>182
writefln(array[out(i) { assert(i<a.length); } body { return 4; }()]);
仕様によれば、こういう変態的なコードもありなんだな

これ試してて気づいたんだが、
writefln(array[{ return $-1; }()]); が、
writefln(array[{ return array.length-1; }()]); と等価になってないっぽい。

190:デフォルトの名無しさん
07/08/06 16:15:23
$の方値がぶっこわれてるな

>>186
DMDのバグ

191:デフォルトの名無しさん
07/08/06 16:24:44
>>185
空のchar[]とnullは区別できないよ。

import std.stdio;
void main() {
writefln("" is null); // false
// 文字列リテラルはNULターミネータを持っている。
char[] s;
writefln(s is null); // true
// 配列の初期値はnull
s = "".dup;
writefln(s is null); // true
// NULターミネータは複製されない。
s = "aa".dup; s.length = 0;
writefln(s is null);
// 長さを 0 にしても再利用のため(?)に同じ場所を指し続けている
}

192:デフォルトの名無しさん
07/08/06 16:50:58
ちなみに、こういう気持ち悪いことにもなってるから注意が必要。

import std.stdio;
void main() {
string a = "";
writefln(a is null); // false
writefln(a == null); // true
}

193:デフォルトの名無しさん
07/08/06 17:41:04
win32api(str.length ? toStringz(str) : null); で良くね?

194:デフォルトの名無しさん
07/08/06 21:06:38
>>191-192
なるほど

195:デフォルトの名無しさん
07/08/06 21:52:03
win32api(str.ptr ? toStringz(str) : null);
とかどうよ

196:183
07/08/06 21:58:03
ウッヒョー。今まで仕様を勘違いして覚えてたのか俺は。
・配列はnull値を取れない
・nullは長さ0の配列に暗黙変換される
とばかり思ってました。

えーと、正しくはこういうこと、でいいんでしょうか?
・配列はnull値を取れる
・null配列はほとんどの場面で長さ0の配列と同じ挙動をする
・両者はis nullの結果で区別できる

>>184さんごめんなさい。正しくその書き方で事足りました。
みんなもありがとう。おかげでアホな誤解から解放されました。

でも("".dup is null)がtrueになる理由だけよく分からない……。

197:デフォルトの名無しさん
07/08/06 22:44:21
あれ? URLリンク(www.kmonos.net)
の配列のデフォルト初期化の項には
>  動的配列は要素数0に初期化されます
て書いてある。

198:デフォルトの名無しさん
07/08/06 23:00:28
>>196
・要素数が0になった場合、変数自体がnullに書き換えられる場合がある。

199:デフォルトの名無しさん
07/08/06 23:20:21
大昔にも同じ議論をみたな。
結局なんかうやむやなまま今日に至るわけだけれども。

URLリンク(yaneu.com)
news://news.digitalmars.com:119/bu5gub$13kh$1@digitaldaemon.com

200:デフォルトの名無しさん
07/08/07 05:20:19
URLリンク(d.hatena.ne.jp)
うむむやはりこれはバグでしたか...
もやもやがすっきりしました
ありがとう賢い人たち

201:デフォルトの名無しさん
07/08/07 05:47:18
って、あげてしまった
(ご迷惑おかけしてすいません)

202:デフォルトの名無しさん
07/08/07 05:48:21
あげたら迷惑なの?

203:デフォルトの名無しさん
07/08/07 08:00:22
>>200-201
D言語をいじくる夏休みとはうらやましいかぎりだぞ


204:デフォルトの名無しさん
07/08/07 08:30:08
gdcはどうなってるんだい?

205:デフォルトの名無しさん
07/08/07 09:42:02
DFL 0.9.6 リリース

206:デフォルトの名無しさん
07/08/07 12:18:16
>>205
ちょっとコントロールが追加されたくらいかな

207:デフォルトの名無しさん
07/08/07 22:30:28
コンパイラにコンテンツアシストの支援機能を早く組み込め。
そしたらあっという間に普及するから。

208:デフォルトの名無しさん
07/08/07 22:36:51
こんな言語仕様が不安定な言語は普及しないよ。
D が流行るのは言語仕様が安定してからでいい。

209:デフォルトの名無しさん
07/08/08 02:16:30
つまりヲルターが死ぬまで流行ることはないということか

210:デフォルトの名無しさん
07/08/08 02:28:35
つまり、Rubyは、Matzが死ぬまで流行ることはないのだろうか

211:デフォルトの名無しさん
07/08/08 02:41:25
デリゲートリテラルの引数の型を推論できるようにならんかなあ。

void func(int delegate(int) dg);

func( (i) { return i * 2; } );
とか、願わくば
func(i => i * 2);
とか書きたい。

212:デフォルトの名無しさん
07/08/08 05:41:35
後のほうの記法がきもい

213:デフォルトの名無しさん
07/08/08 07:00:49
素人乙

214:デフォルトの名無しさん
07/08/08 08:36:05
ラムダ記法はほしい

215:デフォルトの名無しさん
07/08/08 08:47:55
>>211
現状の戻り値推論だけなら、要求されているdelegate型と
生成したdelegate型が異なれば型エラー出るけど、
なんかその推論をやっちゃうとエラーの元になりそうだな。

むしろ仮引数名の方を省略したい。
(int){return @int * 2;}
みたいな。
普通の関数でも省略できるとなおよし。

216:デフォルトの名無しさん
07/08/08 12:05:43
今のままでいいよ
下手に省略すると、人間もコードから内容を推論しなきゃならなくなるからめんどい

217:デフォルトの名無しさん
07/08/08 12:31:20
DとObjective-Cを混ぜてみたいな。スクリプト言語より強力になりそうな気がしてね。

218:デフォルトの名無しさん
07/08/08 17:10:17
Objective-C++は失敗作だったけどな

219:デフォルトの名無しさん
07/08/08 18:54:09
開発環境>>ライブラリ>>>>>言語仕様
って感じで、D言語は3.0になったとしてもはやらなそう

220:デフォルトの名無しさん
07/08/08 20:14:16
ヲルタータンが「言語仕様はこれにて平定!」って言わない限り無理ぽ

221:デフォルトの名無しさん
07/08/08 23:38:42
これにて閉廷!

222:デフォルトの名無しさん
07/08/08 23:59:34
これにて閉経!

223:デフォルトの名無しさん
07/08/09 00:00:11
はたして、進化をやめたDに使う価値はあるのだろうか。

224:デフォルトの名無しさん
07/08/09 00:05:11
せめて処理系がほぼ下位互換でないと使う気にはなれんね

225:デフォルトの名無しさん
07/08/09 03:31:04
>>223
価値ないな…
D言語は変り続けることが美しいのさ…

226:デフォルトの名無しさん
07/08/09 04:00:04
罷り間違ってD言語が普及してしまったら
下位互換性を重要視するようになると思うよ

227:デフォルトの名無しさん
07/08/09 04:00:49
それは困る

228:デフォルトの名無しさん
07/08/09 04:02:15
そんときゃE言語作ればいいじゃない

229:デフォルトの名無しさん
07/08/09 04:03:32
それはいい言語になりそうだな。

230:デフォルトの名無しさん
07/08/09 04:05:05
>>229

231:デフォルトの名無しさん
07/08/09 04:24:35
>>230は尊敬しているようです

232:デフォルトの名無しさん
07/08/09 04:31:07
E言語はもうあるけどな

233:デフォルトの名無しさん
07/08/09 04:34:54
かなりのものは既に使われてるよな。
何か昔一覧を載せてるサイト(不正確に見えたが)があったけど、見つからない。

234:デフォルトの名無しさん
07/08/09 07:05:25
scope File("hoge.txt") s;
なんていう表現があったら時々便利そうだなあ
いらんけど

235:デフォルトの名無しさん
07/08/09 13:15:47
>233
URLリンク(www.kmonos.net)
これか?

236:デフォルトの名無しさん
07/08/09 13:49:49
>>234
scope s = File("hoge.txt");
でいいと思うよ。

237:デフォルトの名無しさん
07/08/10 18:18:19
更新マダー

238:デフォルトの名無しさん
07/08/10 18:22:54
こっちのスレは1年以上待って、もっと待つつもりで、実装はさらに待つつもりなのにおまいらときたら
スレリンク(tech板)

239:デフォルトの名無しさん
07/08/10 23:08:43
>>238
なんだか誠に申し訳ないw
でもDはDで……仕様確定マダー?

そいやDの仕様もだいぶ増えてきた感があるけど、
まだコンパイラの実装はC++ほど大変でもないんかな?
だとしたらどっかに決定的な違いがあるんだろーか。
教えてC++の偉い人ー。

240:デフォルトの名無しさん
07/08/10 23:14:38
ウォルタたんがDの理念の一つに掲げているのに
「処理系の作りやすさ」があるから、そうなんだと思うよ。知らないけど。

241:デフォルトの名無しさん
07/08/11 02:22:03
だれかDコンパイラを自分で作ってる人とかいないのかな

242:デフォルトの名無しさん
07/08/11 02:25:12
少し前にd.D.announceに自分で作ってみたとかいう人がいたような

243:デフォルトの名無しさん
07/08/11 15:01:01
>>227
なんかわろたw

244:デフォルトの名無しさん
07/08/11 17:28:29
>>238
もうD言語使えよと言いたくなる場面ばっかりでわろた

245:デフォルトの名無しさん
07/08/11 18:00:30
DもC++0xも永遠に完成しない

246:デフォルトの名無しさん
07/08/11 18:05:45
C++ユーザがもっとDに流れてくれたらいいのに
似たような言語に人的資源が分散してるのがもったいない

247:デフォルトの名無しさん
07/08/11 18:09:41
やはりここは「ぼくらの」形式で間引きだな

248:デフォルトの名無しさん
07/08/11 18:14:44
C++用のライブラリ作ってるけど、
Dポーティングを念頭に書き換え始めてる
というかDで類似の仕様設計を書き始めてる
でも.NET用のポーティングもありかなと思い始めたり
D#マダー

249:デフォルトの名無しさん
07/08/11 18:36:03
普及するしないの分かれ目は
もはや言語がどうこうってところじゃなくなってるんだけどね


250:デフォルトの名無しさん
07/08/11 18:39:05
ちゃんと標準がTangoに置き換わるまで実質ライブラリさえ作れないような状況だろ。
今作ってもどうせ作り直しになるし。

251:デフォルトの名無しさん
07/08/11 18:54:19
本当に完全にTangoに置き換わるのなら、もうTangoでライブラリ作ればいいだけの話のような。
……本当に標準がTangoに置き換わるって信じてもいいのか?

252:デフォルトの名無しさん
07/08/11 19:01:02
>>251
それが信じられないから困る

phobosがダメなところとTangoの良いところってどんなのがある?
phobosはダメだダメだと聞くがあまり具体的には出てこなくて
まずは文字コード周りかな

253:デフォルトの名無しさん
07/08/11 19:07:14
みんなエディタなに使ってるの?

254:デフォルトの名無しさん
07/08/11 19:28:40
個人的には入出力関係はTangoの方が好きかなぁ
コンテナ(コレクション)についてもTangoがほしいね
あと、ゆくゆくはTangoでXMLもいじれるようになりそう

255:デフォルトの名無しさん
07/08/11 19:31:31
ようやくTango1.0が出そうかなっていうときにもうD2.0だもんなぁ・・・・

256:デフォルトの名無しさん
07/08/11 19:47:39
D2.0ってなにそれはおいしいの?
と思う俺とForeachRangeStatementが2.0だけってことはそろそろ対応お願いしますという
Walterタンの無言の意思表示なのではと思う俺と…

257:デフォルトの名無しさん
07/08/11 21:09:52
もうv1はバグフィックスだけだろ。
美味しい機能《えさ》はv2にしか提供されない。

258:デフォルトの名無しさん
07/08/11 21:52:10
そもそもTangoが標準になるって発言元はどこなんだぜ?

259:デフォルトの名無しさん
07/08/11 22:17:02
>>258
Tango製作陣からじゃないの

260:デフォルトの名無しさん
07/08/11 23:43:00
まぁTangoのほうがモノが良いなら自然に置き換わっていくんじゃね?

261:デフォルトの名無しさん
07/08/12 00:04:50
どっちかが完全に上位互換ならうれしいんだけどね。
混在できたっけ?

262:デフォルトの名無しさん
07/08/12 00:23:12
>>261
無理じゃなかったっけ。前に似た話出てた気がする。
もともと置換を目的に作られてるしなあ。

つか本当に>>255に同意。
なんでここで互換性ないバージョンとか出して既存ライブラリぶっちぎれるのかと。
Phobosお話になんねー、みたいな声はウォルたんに届いてないんだろうか。

263:デフォルトの名無しさん
07/08/12 00:51:04
ウォルタ「いや、他にやりたいことあるし…」

264:デフォルトの名無しさん
07/08/12 01:17:57
ウォルタ「ライブラリのためにDを止めたくないのくらいわかってくれるだろ」

265:デフォルトの名無しさん
07/08/12 01:29:21
ウォルタ「ライブラリが追随すればいいだろwwwww更新おせーんだよwwww」

266:デフォルトの名無しさん
07/08/12 01:41:46
ウォルタ「俺の勝手だろwwwwwwwwwwef9swccnj3」


267:デフォルトの名無しさん
07/08/12 01:44:39
普遍条件にinvariant()って括弧がいるのはどうにかならんかなあ。
見た目が悪すぐる

268:デフォルトの名無しさん
07/08/12 08:36:17
>>267
気にしすぎじゃね?
>>240あたりの理由で()付じゃないとダメだという可能性は?

269:デフォルトの名無しさん
07/08/12 11:03:23
ウ「本来のあるべき姿を追い求めた結果だから仕方ないだろ」


270:デフォルトの名無しさん
07/08/12 11:19:19
まぁdmd2.0のFinal Const Invariantの導入があるから整合性のために仕方がないよ。
struct{
final    {int     final_hoge = 0;}
const    {int     const_hoge = 0;}
invariant{int invariant_hoge = 0;}
}
これでinvariantだけ定数の宣言じゃなくて不変条件になると違和感が漂いすぎるし。


271:デフォルトの名無しさん
07/08/12 12:25:29
unittestにあわせて、ちょっと長いけどinvarianttestとかにしてくれりゃいいのに。

272:デフォルトの名無しさん
07/08/12 19:05:21
ちょっとD触ってみたんだけど試してみたいことがあってサンプルコード探して動かしてみようとしたら動かない、とかデフォ?
メッセージボックスに日本語出力するだけですげー時間かかって泣きそうだったわ

あとみんなは開発環境何使ってるの?
Eclipse+Descentでやってたらソースにエラーの赤線引いてあるけど見た目どこも問題ないしコンパイル通るし動作するしで微妙だった

273:デフォルトの名無しさん
07/08/12 19:11:49
>>272 D2.0系だとサンプルコードってほとんどないんじゃないかな
今公開されてるサンプルコードって大半がD1.0時代のものだと思う(しかも今のD1.0系で動くとも限らない)
少なくとも日本語の文書においては

274:デフォルトの名無しさん
07/08/12 19:22:34
>>272
まだまともなIDEはないから、俺は普通のテキストエディタで書いて、コマンドラインからビルドしとるよ。

275:デフォルトの名無しさん
07/08/12 19:24:11
俺も>>274と同じくコマンドライン(というかバッチファイル作ってダブルクリック)
ポセイドンとかどうなんだろ?

276:デフォルトの名無しさん
07/08/12 19:47:28
>>273
そーなんか
とりあえず1.0系インスコしたんだけどみんな2.0系使ってるの?
2.0系って正式リリースされてないよね?

>>274-275
そーかー
Code::BlocksとPoseidonも使ってみるよ
コード補完がないとソース書いててだるい気がするしね

277:デフォルトの名無しさん
07/08/12 20:00:11
>>276
正式リリースなんて飾り。

278:デフォルトの名無しさん
07/08/12 20:09:37
>>276
バージョンが0.001増えるだけで、大幅な書き直しを余儀なくさせられる言語。それがD

279:デフォルトの名無しさん
07/08/12 20:31:15
バージョンアップしたらHello, woldさえコンパイル通らなくなったときは泣きそうになった

280:デフォルトの名無しさん
07/08/12 20:31:53
書きまつがえた

281:デフォルトの名無しさん
07/08/12 21:54:14
>>276
予約語以外までまともにコード補完できるIDEなんてまだないかと

>>279
これのことかな s/stdout/dout/g
import std.cstream;
void main() {
stdout.writefln("Hello, world!"); // 古いコード
}

歴史は繰り返す(Tango)
Cout(Hello, world!").newline;

282:デフォルトの名無しさん
07/08/12 22:15:35
cout << "Hello, World!" << endl;
とC++みたいに出力できるのを作ったことがあるがマニピュレータ周りでモチベーションが切れて終了

283:デフォルトの名無しさん
07/08/12 22:24:48
coutなんて飾りです

284:デフォルトの名無しさん
07/08/12 22:46:27
doutとかs(td)outとかじゃないのか

285:デフォルトの名無しさん
07/08/12 23:12:09
>>282
C++のストリームの記法が便利だと思ったことは一度も無いな

286:デフォルトの名無しさん
07/08/12 23:28:32
つかC++形式の利点って何なの?
たぶんCのprintfが非型安全だから作られたんだと思うんだが、Dだと型安全な可変個引数関数が作れるわけで。

287:デフォルトの名無しさん
07/08/13 00:18:06
型安全、拡張可能、フォーマット文字列の解析が不要ってとこか
その代償として、寄せ、桁、精度、基数等の指定が必要な場合の
記述が面倒くさすぎ

ぶっちゃけ拡張可能性という面でもstreambufが継承可能であることが
重要で、入出力演算子なんてただのオモチャだと思ってる

288:デフォルトの名無しさん
07/08/13 00:32:35
tangoの方間違ってたらすまん
phobosのwriteflnの方がピンと来るのは俺だけ?
tangoのはどうなんだこれ
CoutとStdoutの使い分けとか必要なのか?

string hoge = "hoge", HOGE = "HOGE";
int a = 10, b = 20;
//phobos
writefln(hoge, a, "[%s%d]", HOGE, b);
//tango
Cout(hoge)(a)("[")(HOGE)(b)("]").newline;
Stdout.formatln("{}{}[{}{}]", hoge, a, HOGE, b);


289:デフォルトの名無しさん
07/08/13 05:32:21
Coutキタナッ

290:デフォルトの名無しさん
07/08/13 06:20:23
tx好きー。

291:デフォルトの名無しさん
07/08/13 06:44:43
Code:Blocks使ってみた
入力補完させよーとするとC++かなんかの予約語を補完してくださった

Poseidon使ってみた
日本語表示もできるし予約語の補完もできるし自分で書いたメソッドの入力補完もできるっぽい ちょっと幸せ
でもエディタの挙動とか配色がキモい たぶん変更できるんだろうけどまだあんまし触ってない

292:デフォルトの名無しさん
07/08/13 07:24:56
writefln で十分だな。

293:デフォルトの名無しさん
07/08/13 08:07:31
printfで十分だ

294:デフォルトの名無しさん
07/08/13 08:33:23
うむ
C++ ライクな入出力ストリーム表記はどうにも好きになれん

295:デフォルトの名無しさん
07/08/13 09:13:18
型安全であることと、色んなもんに出力できるという点は評価できるが、
printf ライクにそれを行うことも可能なわけで。

296:デフォルトの名無しさん
07/08/13 15:42:56
>>288
tangoはこれならstd::coutのほうがましだな

297:デフォルトの名無しさん
07/08/13 18:23:02
正直、これ位の簡易な実装で俺は良いんだけどなぁ。
void main(){
  println(2,' ',3,' ',4);
}

static import std.string,std.stdio;
alias std.string.toString toString;
string toString(string x){return x;}
string toString(Object o){return o.toString;}
//構造体とか配列とか連想配列とかも同じノリで定義

void println(T...)(T x){
  foreach(v;x){
    string r = toString(v);
    std.stdio.fwrite(r.ptr,1,r.length,std.stdio.stdout);
  }
  std.stdio.putc('\n',std.stdio.stdout);
}


298:デフォルトの名無しさん
07/08/13 18:26:37
結局型安全にした printf ライクなものが一番だよね。

299:デフォルトの名無しさん
07/08/13 19:43:44
writeflnに慣れすぎて手放せなくなってる

300:デフォルトの名無しさん
07/08/13 21:48:15
誰かD1.0を擬人化してみてくれ

301:デフォルトの名無しさん
07/08/13 21:52:16
>>300
スレリンク(tech板)

302:デフォルトの名無しさん
07/08/13 22:08:16
>>297
それでprintf("%08X", n);
とかはどうやりますか?

303:デフォルトの名無しさん
07/08/14 00:20:21
>>300
1.0限定かよ


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