D言語 Part15at TECH
D言語 Part15 - 暇つぶし2ch175:171
07/10/15 01:14:50
>>172, 174

ああ、ごめん。俺が言ったのはクラスや配列を引数として渡すときのこと。
int などの基本型ならそのままの値渡し。


176:デフォルトの名無しさん
07/10/15 20:42:17
/*
以下のコードがコンパイルエラーになるんだけどバグ?
bug.d(12): Error: this for m needs to be type S not type bug.C
bug.d(12): class bug.C member m is not accessible
*/
import std.stdio;
import win32.windows;

struct S
{
 int m;
}
class C
{
 int f()
 {
  return S.m.offsetof; // エラーになる
 }
}
int main()
{
 writefln("%d", S.m.offsetof); // これはOK
 return 0;
}


177:デフォルトの名無しさん
07/10/15 21:28:16
バグっぽいね

178:デフォルトの名無しさん
07/10/16 07:26:22
デリゲートの挙動が意味不明だ

179:デフォルトの名無しさん
07/10/16 18:36:41
>>178
どんな感じっすか


180:デフォルトの名無しさん
07/10/16 19:18:31
デリゲートな部分ですから、、、

181:デフォルトの名無しさん
07/10/16 19:40:16
【審議中】
    ∧,,∧  ∧,,∧
 ∧ (´・ω・) (・ω・`) ∧∧
( ´・ω) U) ( つと ノ(ω・` )
| U (  ´・) (・`  ) と ノ
 u-u (l    ) (   ノu-u
     `u-u'. `u-u'

182:デフォルトの名無しさん
07/10/16 21:33:12
OpenGL+SDLでゲームを作っているのですが、
SDL_mixerとABAさんのsound.dを使うようにしたところ、
Out of memoryというエラーが出てクラッシュするようになってしまいました。
メモリ使いすぎかと思ったのですが、
タスクマネージャから見るとメモリ使用量はほとんど増加していないので、
どんなバグを疑えばよいですか?
ソースコードの変更点としては、数箇所にSound.playSe()とSound.playMarkedSe()を追加しただけで、
しかもこのライブラリはABAさんが実用化しているので、何が変わっているのかさっぱりです。
これを取り除くとやはり発生しなくなります。

183:デフォルトの名無しさん
07/10/16 21:34:58
書き忘れ。
コンパイルは成功して、同じ用にゲームは動き、音もなるのですが、
しばらく動かしていると突然エラーが出て終了する、という状態です。

184:デフォルトの名無しさん
07/10/16 23:33:10
>>180
口元の筋肉がちょっと動いた

185:デフォルトの名無しさん
07/10/17 00:29:22
D言語のコンパイラ精度ってどうなの

186:デフォルトの名無しさん
07/10/17 01:22:29
正確性には欠けるな。バグだらけ

187:デフォルトの名無しさん
07/10/17 01:24:16
>>182
D2.0でやってる?

188:178
07/10/17 02:36:03
>>179
要はこういうことなんだなあ、と
URLリンク(www.kmonos.net)

189:デフォルトの名無しさん
07/10/17 04:23:32
爆弾キターーーー

URLリンク(www.digitalmars.com)

What's New for D 2.006
* Transformed all of string, wstring, and dstring into invariant definitions.
  Tons of changes in function signatures and implementations rippled through the standard library.
  Initial experience with invariant strings seems to be highly encouraging.
* Implemented Overload Sets for functions and templates.

phobosの機能追加は多すぎて省略

190:デフォルトの名無しさん
07/10/17 05:04:39
何か凄い凄い。
std.getoptでプログラムの引数の利用が容易に、std.fileにディレクトリ内のファイル一覧を簡単に取得する方法が無かったのが修正された、std.stdioに機能増えすぎワロタ、std.contractsが新鮮。
std.conv.parseとstd.string.munchのコンボもいい。けど、refを使ったのは別のモジュールにまとめて欲しいような気がしないでもない。

191:デフォルトの名無しさん
07/10/17 05:16:50
すごい、すごいけどD1.0系列の更新が止まったように見える…
仕様が固定されたD1.0系列を使うか新機能とPhobosが見せる巻き返しを堪能するためにD2.0を使うべきか…悩ましい…

192:デフォルトの名無しさん
07/10/17 05:29:55
何がすごいのかさっぱり分からん

193:デフォルトの名無しさん
07/10/17 05:59:56
D言語
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
           ___                _
       / ____ヽ           /  ̄   ̄ \
       |  | /, -、, -、l           /、          ヽ 
       | _| -|○ | ○||         |・ |―-、       |
   , ―-、 (6  _ー っ-´、}         q -´ 二 ヽ      |
   | -⊂) \ ヽ_  ̄ ̄ノノ          ノ_ ー  |     |
    | ̄ ̄|/ (_ ∪ ̄ / 、 \        \. ̄`  |      /
    ヽ  ` ,.|     ̄  |  |         O===== |
      `- ´ |       | _|        /          |

194:デフォルトの名無しさん
07/10/17 07:51:06
な、なんだどうした何が起こった!? 日本語訳を!
良いニュースなのか悪いニュースなのか!?

195:デフォルトの名無しさん
07/10/17 07:55:39
C++が使えない無能の為のプログラミング言語=D言語

196:デフォルトの名無しさん
07/10/17 08:10:22
ktkr

197:デフォルトの名無しさん
07/10/17 08:15:42
こりゃまたすごいのきたな。

198:デフォルトの名無しさん
07/10/17 08:24:33
てかD言語ってまだ開発してたのか

199:デフォルトの名無しさん
07/10/17 09:13:04
標準ライブラリって本当にPhobosからTangoに移行するん?

200:デフォルトの名無しさん
07/10/17 11:54:50
>>199
定期的に話題になるよな
2.0をいじってたら、
Tangoのわなびとしか、最近思えなくなってきた。


201:デフォルトの名無しさん
07/10/17 12:05:40
URLリンク(www.digitalmars.com)
ををVariant来た! boxはいらない子になるのかなぁ・・・

!isっていつからあった?

202:デフォルトの名無しさん
07/10/17 12:14:31
あ、string系のaliasがconst(char)[]からinvariant(char)[]に変わったのか。

……どーいう意味を持つのかイマイチ分からない。
というか、未だに「invariant型」の動作がよく分からん。

invariant(char[]) book = "I, Robot";
って宣言したbookに関して、

book ~= " by Isaac Asimov";
book.length = 1;
book = "2001 Space Odyssey";
こういう動作は別に禁止されないんだよね。invariant型って、どういう目的で使えばいいの?

203:デフォルトの名無しさん
07/10/17 12:32:07
>>191
D2.006の新しいPhobosの機能をD1.xに移植した人がdigitalmars.D.announsに。
std2ってやつ。



204:デフォルトの名無しさん
07/10/17 13:24:39
>>202
invariant(char[]) book = "I, Robot";

invariant(char)[] book = "I, Robot";
で、意味が変わるきがするが

205:デフォルトの名無しさん
07/10/17 14:02:50
>>201
!isはisが導入されたときからあったと思う

206:デフォルトの名無しさん
07/10/17 14:11:49
>>204
それは同じ意味になる
URLリンク(www.digitalmars.com)
の Invariant Doesn't Apply To Declared Symbols のあたり。

207:デフォルトの名無しさん
07/10/17 14:19:58
>>202
たとえば
 class Stream {
  int opApply( int delegate(ref const(char)[] line) dg );
 }
こういう宣言だったとしたら、
string s;
 foreach(line; din) if( line[0] == '#' ) s = line;
 writeln( "#で始まってた最後の行は", s );
このコードは期待した通りに動かないかもしれない。
Streamが内部でlineの中身を勝手に再利用してるかもしれないので。
constだと、"自分が"lineの中身を書き換えることはできなくなるけど、
他のところで書き換えが起こる可能性は否定できない。

これが
 class Stream {
  int opApply( int delegate(ref invariant(char)[] line) dg );
 }
こうだったら、opApplyの実装を見るまでもなく↑のコードは普通に動く。
invariantな配列の中身はもう"誰も"書き換えないので、Streamが後で
書き換えるようなことがない。

とかそういう使い方。

208:デフォルトの名無しさん
07/10/17 14:29:13
おい。invariant周りでコンパイル通らなくなったぞ。
まーた全部書き換えかよ…

209:デフォルトの名無しさん
07/10/17 14:48:24
なんでもかんでもidupつけないといけないのは気持ち悪いな

210:デフォルトの名無しさん
07/10/17 15:21:42
aasumeUniqueでおk

211:デフォルトの名無しさん
07/10/17 15:49:37
URLリンク(www.digitalmars.com)

string letters()
{
char[] result = new char['z' - 'a' + 1];
foreach (i, ref e; result)
{
e = 'a' + i;
}
return assumeUnique(result);
}

これか なるほど

212:デフォルトの名無しさん
07/10/17 19:05:34
>>208
動作確認してなかったので翻訳してなかったんだが、

string, wstring, dstringの定義をinvariant付きにしました。
関数の定義と実装を(標準ライブラリ関数の影響も含めて)山ほど変更する必要があります。
invariantなstringを使ってみた最初の感想としては、かなり有望です。


なにがどう有望なのか試してないのでなんともいえませんが。

213:デフォルトの名無しさん
07/10/17 19:37:54
おいおい、phobos 張り切るのもいい加減にしろよ。tango の立場がなくなっちまうじゃないか。

214:デフォルトの名無しさん
07/10/17 20:01:30
walたんがTangoに「○○追加してね」っていえばいい

215:デフォルトの名無しさん
07/10/17 20:41:34
D2.x用のTangoは、どうなってる? もう出てる?

216:デフォルトの名無しさん
07/10/17 20:45:46
>>215
まだじゃね?

217:デフォルトの名無しさん
07/10/17 21:20:07
import std.stdio, std.contracts;
void main() {
foreach(string line; lines(enforce(fopen(__FILE__)))) {
write(line);
}
}

SUGEEEE

218:デフォルトの名無しさん
07/10/17 21:22:39
そんな感動するようなことじゃないが、これまでなかったのが不思議だな。

219:デフォルトの名無しさん
07/10/17 21:31:01
そういう短いけれども案外実用的なコードがたくさん欲しいところ

220:デフォルトの名無しさん
07/10/17 21:31:17
>>187
解決しました。
すいません、もともとあったメモリ関係のバグが、たまたま出てきた形でした。

221:デフォルトの名無しさん
07/10/17 21:45:35
D言語、1系が安定しない永遠のβだった頃から注目してるけど、
1系が成熟しないままさっさと2系に移ったところを見ると
実用的になるのは3系が登場してからかなと思ってしまう。

222:デフォルトの名無しさん
07/10/17 21:51:38
Dは永遠にをるたんの実験言語。
実用的になるなんてあり得ないよ。

223:デフォルトの名無しさん
07/10/17 21:59:20
>>209-211
さっぱりわからんのだが・・・
idup付ける代わりにassumeUniqueで済むってことだけじゃないよな?
余計にタイプ数増えるんだが
本当はassumeUniqueは何のためのものなの?

224:デフォルトの名無しさん
07/10/17 22:05:37
>>223
idupはデータのコピーが行われるが、
assumeUniqueはコピーが行われない。

225:デフォルトの名無しさん
07/10/17 22:40:23
>>224
うーん
そうですか
もうちょっと暗黙のコピーが発生するのを許容して
明示的な指定が減るようになったらいいね

226:デフォルトの名無しさん
07/10/17 22:50:17
テストしてなさすぎワロス
いろいろ試してみたがdmd2.006はstd.formatが壊れてるな

//>writef
//testtest1010
//%s=%dvalue200
import std.stdio;
void main(){
 writef("test", "test", 10, 10, "\n%s=%d", "value", 200, "\n");
}

227:デフォルトの名無しさん
07/10/17 23:01:33
>>226
>Breaking change: std.stdio.writef can now only accept a format as its first argument.

228:デフォルトの名無しさん
07/10/17 23:21:22
>>227
あ 最後に書いてあるのそういうことか thx

229:デフォルトの名無しさん
07/10/17 23:34:02
stringにconstつけてみたりinvariantになったりするのはWalterたんからの「ソース見直せリファクタリング汁!!」というご命令に違いない!

230:デフォルトの名無しさん
07/10/17 23:57:41
Andrei Alexandrescuありがとう、そしてがんばれー
とエールを送っておこう

231:デフォルトの名無しさん
07/10/18 01:09:50
>>230
Andrei Alexandrescu先生のTMPが見られるのは今やD言語だけ!(でもない)

232:デフォルトの名無しさん
07/10/18 01:40:11
gdcってdmdで言うv2.0以降はあるの?

233:デフォルトの名無しさん
07/10/18 01:46:50
svnで対応してるよ。

234:デフォルトの名無しさん
07/10/18 19:31:42
>>206
ありがと しらんかった

235:デフォルトの名無しさん
07/10/19 00:01:06
coroutineが、phobosでほしいなぁ

236:デフォルトの名無しさん
07/10/19 00:14:29
そこは言語仕様に組み込むべきだろう。

237:デフォルトの名無しさん
07/10/19 06:13:14
dmd2.004 以降でこういうちょっと怪しいのをコンパイルしようとすると途中で固まる。
void main(){ f([[]]); }
void f(int[][] a){}

f(cast(int[][])[[]]); ならおk

-v 付きでコンパイルすると semantic3 までは表示されるけど code が表示されずに止まってる。
何これ?

238:デフォルトの名無しさん
07/10/19 06:40:44
D言語で作られたアプリケーションって何があるよ

239:デフォルトの名無しさん
07/10/19 11:33:27
Dで作ったOS
それがDOS

240:デフォルトの名無しさん
07/10/19 11:37:56
URLリンク(www.digitalmars.com)

int ifind(in const const char[] s, in const const char[] sub);

なんなんだ、const だらけかよ。
inつかっても constをこれだけ使うっていうのがなんとも・・・

241:デフォルトの名無しさん
07/10/19 12:44:04
in const constってどういう意味ですかwwww
inって
invariant const scopeだったよねwwwconst三つですかwwwww

242:デフォルトの名無しさん
07/10/19 13:09:17
typo
ソース見れ

243:デフォルトの名無しさん
07/10/19 13:36:42
D言語でstaticライブラリをつくる方法はどうやるのでしょうか。
コンパイル激早なんで、やる必要があまりないのかもしれませんが・・・

244:デフォルトの名無しさん
07/10/19 13:50:03
budなら
bud -lib main.d

何も使わないでやるなら
dmd -c main.d
lib -c -l main.lib main.obj

245:デフォルトの名無しさん
07/10/19 13:50:18
>>240
なんかintつけるとDDocが変なものを生成する。

246:デフォルトの名無しさん
07/10/19 14:18:48
static引数まだー?

247:デフォルトの名無しさん
07/10/19 16:20:50
>>246
なにそれ

248:デフォルトの名無しさん
07/10/19 16:53:40
関数名に?入れて述語ry

そういやなんで?とか!とかは識別子にならないの?

249:デフォルトの名無しさん
07/10/19 17:01:03
scopeクラスが単にnew ScopeClass();でエラー出さないでしかもスコープ抜けてもデストラクタが呼ばれないですけどこれはバグ?

250:デフォルトの名無しさん
07/10/19 17:03:49
やっべDMD古いからかな。新しいので試してみます。一応古いのは1.020です

251:デフォルトの名無しさん
07/10/19 17:24:27
>>249
scope周りはバグだらけ。もうどうしようもない

252:デフォルトの名無しさん
07/10/19 17:40:25
把握しました

253:デフォルトの名無しさん
07/10/19 17:50:04
本当にconstとかinveriantとか必要なのか?
C++から移ってきたときはほしいなと思ったこともあったけど、現状のconstとinveriantを見てるとうざったさ以上の便利さを感じない…
もっと上手い方法なかったのかな…


254:デフォルトの名無しさん
07/10/19 18:03:42
デリゲート便利だなw
Scheme触って帰ってきたら使わずには居られないwwww

255:デフォルトの名無しさん
07/10/19 19:50:18
>>253
constまわりは、まだまだこれからって感じだと思う。
現時点では文字列をimmutableにするためにしか使われてないし。
評価を下すのはまだ早いと思う。
現状のconstまわりの仕様には問題あると思うが。

文字列(配列)のスライスはコピー作らないから、文字列をimmutableにする意味はあると思うし、現時点では、
「inveriantは文字列をimmutableにするためのもの」
って割り切って、それ以外の機能は使わないようにすれば何とかやっていけそうだと俺は感じてる。


256:デフォルトの名無しさん
07/10/19 23:12:18
>>244
ありがとうございます
作れました!

257:デフォルトの名無しさん
07/10/20 02:46:33
勇気出してD2を入れることにしたぞー!

258:デフォルトの名無しさん
07/10/20 07:56:12
macroって結局なんなの?

259:デフォルトの名無しさん
07/10/20 13:09:30
>>258
カンファレンスのをるたんのスライド見れば分かるよ。

260:デフォルトの名無しさん
07/10/20 14:45:02
それでも俺は1系列を使い続ける

261:デフォルトの名無しさん
07/10/20 16:50:22
>260
1系列は俺に任せてお前達は先に行け!

まで読んだ

262:デフォルトの名無しさん
07/10/20 17:38:26
>>261
文字数増えてるという不思議。

263:デフォルトの名無しさん
07/10/20 18:20:58
>>262
つまり行間じゃなくて字間を読んだということか

264:デフォルトの名無しさん
07/10/20 20:27:45
D2.0のstring周りの改変は
暗黙のコピーがいやでしょうがない
どこでどう動いてるか把握したい
文字列で、知らぬ間にメモリをちょっとでも使われるのも嫌でたまらん
ってことかな。

スクリプトライクな手軽なコーディングを
できるだけ殺さないように、がんばってんだよね


265:デフォルトの名無しさん
07/10/20 22:14:00
みんな phobos と tango のどっち使ってる?
phobos は単純明快だが機能面でちょっと不足な上にバグ多いし、
tango は機能面はある程度充実してるけどドキュメントが整備されてない上に使いにくかったりするし、
なんかこう、どっちも中途半端なんだよなぁ。


266:デフォルトの名無しさん
07/10/20 22:28:27
>>248
全角?も駄目なんだな。これで我慢しとけ。

bool もしかしてnullですか(Object nullかどうか調べるオブジェクト)
{
 return nullかどうか調べるオブジェクト is null;
}


267:デフォルトの名無しさん
07/10/21 00:09:01
もしかしてnullですか?

268:デフォルトの名無しさん
07/10/21 00:10:25
もしかしてnullですか¿

269:デフォルトの名無しさん
07/10/21 00:11:09
nullですよ¡

270:デフォルトの名無しさん
07/10/21 03:22:06
>>264
藻前は組み込みに向いている
Dが組み込みに対応するその日まで
Dで生き延びろ

271:デフォルトの名無しさん
07/10/21 03:25:55
>>264の発言は>>264自身のことじゃなくてDの文字列仕様の意図でしょ?

272:デフォルトの名無しさん
07/10/21 07:58:34
>>265
両者の良いところが全部一つに集まると、
素晴らしき真のDが誕生してどんな願いも叶えてくれると伝説にはあります

273:デフォルトの名無しさん
07/10/21 09:51:27
>>270
げ、するどい 正直びっくりした。
組み込み屋です。 Dが早く使えないかねらってます。


274:デフォルトの名無しさん
07/10/21 12:02:31
ちょっと和んだ

275:デフォルトの名無しさん
07/10/21 13:55:30
>>273
そう考えると2.006 invariant stringは有望だなあ。
Walterたんが「リアルタイム処理ではmalloc/freeよりGCの実行制御のほうが有利なこともある」
ってるが、そういうのは確かにあるので分かる気はする。
実際free listと組み合わせるとなかなか高速に動作してくれるし。
ada並の用途になるとDも本望だろう。

276:デフォルトの名無しさん
07/10/21 14:37:40
>>272
それを後の人は「闇鍋」と呼んだ。

277:デフォルトの名無しさん
07/10/21 14:57:01
D1~D7まで揃えるとDragonが(ry

278:デフォルトの名無しさん
07/10/21 15:34:37
組み込み屋ってなにするひと?

279:デフォルトの名無しさん
07/10/21 15:45:17
>>278
URLリンク(ja.wikipedia.org)組み込みシステム

280:デフォルトの名無しさん
07/10/21 15:57:58
>>279
サンクス

281:デフォルトの名無しさん
07/10/21 17:11:50
組み込みに関してはかなり素人で見当違いなことかもしれないんだが…
たとえばH8のマイコンがGCCのコンパイラでコンパイルできるみたいだけど、
GDCとH8を使ってD言語による組み込み向けのプログラムを作ることはできないのかな?

282:デフォルトの名無しさん
07/10/21 18:59:26
GDC

283:デフォルトの名無しさん
07/10/21 19:00:39
ごめん、途中で送ってしまった

GDCでクロスコンパイラはつくれるかもしれないが、
ターゲットが32ビットCPUでないとだめかもしれない。


284:デフォルトの名無しさん
07/10/21 19:01:25
tango 0.99.2を使ってるんだが、IConduitやらOutputStreamやら入出力周りの関係と用途がさっぱりわからん。
ソースによらず汎用的にストリームを扱いたいときはどのインタフェースをサポートすればいい?

285:デフォルトの名無しさん
07/10/21 20:22:16
>>281
去年 gdc を H8 にポートしてみた事がある。
phobos の GC がうまく動作しないところで絶賛放置中。
2日の作業じゃここらが限界だった。


286:デフォルトの名無しさん
07/10/21 22:06:18
GCつかわなければいけるんじゃなかろうかと一瞬考えたけど、そんなDに意味はあるのかどうか真剣に考えてしまった。

287:デフォルトの名無しさん
07/10/21 22:16:38
ベターC++と高速コンパイルだぜ!

288:デフォルトの名無しさん
07/10/21 22:41:03
GDCだと遅い罠

289:デフォルトの名無しさん
07/10/22 00:17:21
じゃあ意味ないんじゃね?

290:デフォルトの名無しさん
07/10/22 00:56:13
>>284
flectioned から抜き出してみた。tango と phobos の差異を吸収するような
書き方が一番なんでないかい?

static if(is(typeof((new object.Object()).toUtf8()) == char[])){
 const bool inTango = true;
 const bool inPhobos = false;
}else{
 const bool inTango = false;
 static if(is(typeof((new object.Object()).toString()))){
  const bool inPhobos = true;
 }else{
  const bool inPhobos = false;
 }
}

static if(inTango){
 import tango.stdc.stdio;
} else static if(inPhobos) {
 import std.c.stdio;
}

int main()
{
 printf("Hello world");
 return 0;
}


291:デフォルトの名無しさん
07/10/22 00:58:57
またあげちまったよ・・・すまん

292:デフォルトの名無しさん
07/10/22 01:23:43
URLリンク(dsource.org)
Tangobos is a compatibility layer to allow most Phobos software to be compiled unmodified on Tango.
It is effectively a port of Phobos to Tango: it is only modified to the degree required to make it compile.
これってTango/Phobos共存させるのが目的なんだよな?

293:デフォルトの名無しさん
07/10/22 02:30:10
テラタンゴボスwww

294:デフォルトの名無しさん
07/10/22 10:56:20
なんというド直球ネーミングw

295:デフォルトの名無しさん
07/10/22 11:06:07
D言語製のブラウザってある?

296:デフォルトの名無しさん
07/10/22 12:24:25
>>292
Tangoboswww
見間違いかと思ったわw

297:デフォルトの名無しさん
07/10/22 12:57:13
>>292
Tangoの上に乗っかるPhobos互換レイヤか

298:デフォルトの名無しさん
07/10/22 13:07:18
どっちかに統一したほうが良いように思うのは俺だけ?w

299:デフォルトの名無しさん
07/10/22 13:09:36
Tangoboswwwwwwwwwwwww

300:デフォルトの名無しさん
07/10/22 13:31:59
>>298
統一してほしいね~

そもそも、TangoはPhobosと共存できないように
作る必要があったのだろうか?

301:デフォルトの名無しさん
07/10/22 14:03:17
誰かがグレイトなライブラリを作ればいい。
どうせ D はまだ実用されてるとは言いがたい状況なんだし、
新規のライブラリがポンと出てきた所で問題は無い。

302:デフォルトの名無しさん
07/10/22 14:08:58
それをここで作るんですよ

303:デフォルトの名無しさん
07/10/22 14:27:52
Pascal型UpperCamelCaseが嫌いなのでphobos中心にマージされて欲しいと思う俺がいるが、
phobosはバージョンアップに追従するのが原則、
Tangoはそこまでやったりもしてないからなあ。

C++ユーザからの乗り換えパスとしてSTLとboost相当の移植は欲しい気がする
lexical_castとかはC++では使えるけどDではtoStringその他が使えるからまあいいけど。

304:デフォルトの名無しさん
07/10/22 14:35:52
>>303
>lexical_cast
確かめてないけどstd.conv.toは?

305:デフォルトの名無しさん
07/10/22 16:47:31
makefileがわりにmake.dってファイル作ってrdmd make.d optionってやるのよさそうだね。
bud使ったほうが早いかな?むしろrdmd bud.dってかww

306:デフォルトの名無しさん
07/10/22 16:49:55
いまさら気づいたけどなんもよくないね

307:デフォルトの名無しさん
07/10/22 17:01:00
D2でライブラリ関係のコンパイル通らなすぎわろたあああああああああああ

308:デフォルトの名無しさん
07/10/22 17:31:37
>>303
ちゃんと「The D Style」なんてのまで存在してるのに、
そこまでlowerCamelが嫌いだったのかねぇ・・。

豊富な機能やクラス設計に「おお」と思いつつ、ドキュメントのHelloWorldを見た時点で

> tango.io.Console;
「え? モジュール名・・」
> Cout("Hello...")(s).newline
「え? Coutて? UpperCamelな関数? いや()演算子持ったオブジェクト?
 つかなんで可変引数使わへんのん? で、newline? 構文が最終的にプロパティ参照になっちゃってるやん?」

そんなTango。

309:デフォルトの名無しさん
07/10/22 17:34:31
そういう話題が出ないはずないと思うんだけどなぁ・・・

なんか考えがあってのことなのかね?

310:デフォルトの名無しさん
07/10/22 17:44:08
Tangoは機能自体はいいんだが、俺も設計が気に食わない。

311:デフォルトの名無しさん
07/10/22 17:54:10
たしかにCoutはきもい
void coutln(T...)(T t){ ... }
とか各自定義汁ってことか?www

312:デフォルトの名無しさん
07/10/22 17:56:18
とりあえず動けばおkってことになってるのかな???

313:デフォルトの名無しさん
07/10/22 18:15:54
自分はCoutよりStdout派。
import tango.io.Stdout;

Stdout("こんにちは 世界\n");
Stdout(1, 2, 3, 4, 5).newline;
int a = 5, b = 10;
Stdout.format("てすと {} + {} = {}", a, b, a+b).newline;

314:デフォルトの名無しさん
07/10/22 18:33:08
opCallのオーバーロードは、C++のビットシフトのオーバーロードより数倍キモイ。

315:デフォルトの名無しさん
07/10/22 18:34:55
まぁ、なんだかんだワガママ言ってもphobosよりはOOPが生きてるし、
使いたいといえば使いたいんだよねTango。

SDLに対するSDL_image/mixer/..、C++のSTLに対するboostみたく、
phobosがコンパイラ添付の最低限ライブラリ、
Tangoが「事実上の標準」な拡張ライブラリ、とかに分かれててくれるのが理想と思う俺。
組込みとか色々タイトな分野じゃない限り、普通Tangoを被せて使うものだよ、みたいな。

316:デフォルトの名無しさん
07/10/22 19:09:10
ならTangoはPhobosを利用しないといけないな!
つーかなんでTangoはPhobosと共存できないのwww意味不明wwwwww

317:デフォルトの名無しさん
07/10/22 19:11:50
Phobosは廃止でいいよwwwwwwww

318:デフォルトの名無しさん
07/10/22 19:41:58
そこでTangobosが登場する??

Phongoとか、ネーミングはもうちょっとなんとかならんかったのか。

319:デフォルトの名無しさん
07/10/22 19:51:41
Tacos

320:デフォルトの名無しさん
07/10/22 20:02:40
>>319
それ良さそう。

321:デフォルトの名無しさん
07/10/22 20:19:52
>>304
俺も使ってないけど使えると思う。
というのはともかくとして、C++はlexical_castが無いと面倒な場面があるのだが、
Dではstd.conv.toを使わなくても結構いけるのでそのへんが良い。

322:デフォルトの名無しさん
07/10/22 20:21:13
>>319
cはどっから来たんだよw

323:デフォルトの名無しさん
07/10/22 20:22:33
無理に2つのライブラリ名入れることも無くない?

324:デフォルトの名無しさん
07/10/22 21:01:04
PThaonbgoos

325:デフォルトの名無しさん
07/10/22 21:02:42
よめなす。ふぁんぐーす(bはサイレント)?

326:デフォルトの名無しさん
07/10/22 21:09:56
たんごぼす

327:デフォルトの名無しさん
07/10/22 21:24:47
こんどこそでいもすで

328:デフォルトの名無しさん
07/10/22 22:06:25
Daimos(デイモス)はもうすでにあるし、Harmonia(ハルモニア)でよくね?
ギリシャ神話でアレス(Ares)の娘…ポボス(Phobos)とデイモス(Daimos)の妹?
ハーモニー(調和)の語源。とってつけたような設定じゃないか。

329:デフォルトの名無しさん
07/10/22 22:07:57
すまん、スペルミス。
×Daimos
○Deimos

330:デフォルトの名無しさん
07/10/22 22:12:21
ハルモニアっていうとロマサガ思い出す・・・

331:デフォルトの名無しさん
07/10/22 22:25:30
ちなみに
Harmonia URLリンク(harmonia.terrainformatica.com)
Ares URLリンク(www.dsource.org) もすでにあるが

332:デフォルトの名無しさん
07/10/22 22:27:36
>>328
それいいけど名前資源の無駄遣いはそろそろ控えるべきだと思ったw
やるならマジでやって欲しい・・・

333:デフォルトの名無しさん
07/10/22 22:28:16
あるのかよ
だから無駄遣いはダメだと(ry

334:デフォルトの名無しさん
07/10/22 23:23:03
あったのか
ライブラリの名前資源の干渉は防げないもんなぁ

335:デフォルトの名無しさん
07/10/22 23:31:29
じゃあ、
com.digitalmars.phobosとかするか?w

336:デフォルトの名無しさん
07/10/22 23:34:07
そんなことされたら勝手に名前変えるぞゴルア

337:デフォルトの名無しさん
07/10/23 00:38:02
もう日本語にしちゃおうぜ

338:デフォルトの名無しさん
07/10/23 00:41:43
しかもひらがなな

339:デフォルトの名無しさん
07/10/23 00:44:24
日本人である私たちがコードやコメントやパッケージ名に日本語を使わないのはおかしい!
って言ってみるテスト

340:デフォルトの名無しさん
07/10/23 00:45:24
import 標準.標準入出力;
void main() {
 writefln("ほげほげ");
}
// こんなの嫌だぞ俺w

341:デフォルトの名無しさん
07/10/23 00:47:01
でも
import std.stdio;
よりは意味が取れる罠w
表意文字万歳

342:デフォルトの名無しさん
07/10/23 00:53:23
ヒント: タイプ数

343:デフォルトの名無しさん
07/10/23 00:55:16
じゃあひらがなかカタカナでいこう

344:デフォルトの名無しさん
07/10/23 00:57:55
ヒント: 文字幅

345:デフォルトの名無しさん
07/10/23 01:15:21
輸入 標準.標準入出力;
無 主() {
 整形書出改行("ほげほげ");
}

こんな中国産言語ならありそうだな

346:デフォルトの名無しさん
07/10/23 01:18:50
そしてブロックはPython風にインデントでやれば{}も消える!!

347:デフォルトの名無しさん
07/10/23 01:26:22
>>344
半カナはどうだ? タイプはかな入力で。

ドウニュウ キカク.キカクニュウシュツ;
ナシ メイン(){
  ギョウカキ("ホゲホゲ");
}

348:デフォルトの名無しさん
07/10/23 01:36:31
話を広げておいて申し訳ないのだがものすごい既視感がwww
前に似たような話してたお

349:デフォルトの名無しさん
07/10/23 01:36:58
>>347
かな入力なんてできる人はかなりレアだぞ…
俺にはつらいw

350:デフォルトの名無しさん
07/10/23 01:39:11
Phobos上でTangoが動作しつつ、キモイ名前をどうにかしてくれたらTangoはかなり使いやすいライブラリだと思うんだ。
って話だったっけ?

351:デフォルトの名無しさん
07/10/23 01:53:33
まったくそのとおりである

352:デフォルトの名無しさん
07/10/23 02:12:57
std::cout << "hoge" << std::endl; の悪習を引きずるかのような
Cout("hoge").newline; に代表される
気持ち悪いインタフェースがなくなればってのも加えておいてくれ

353:デフォルトの名無しさん
07/10/23 02:57:09
そもそも
std::cout << "hoge" << std::endl;
の良かったところはグローバルな演算子オーバーロードで簡単に拡張が加えられるところだったと思うんだ。
std::ostream& operator<<(std::ostream& strm, const Hoge& fuga);
逆にいえばこれが使えなければ意味がないわけで…
Cout("hoge").newline;
とかは何を意図してこんなことをしようと思ったのか…

まぁ、可変個数引数だと問題はあるけど。
String s;
Cout(s.append("aa"), s.append("bb"), s.append("cc"))).newline;
これだと
aabbccとなるかccbbaaとなるかわからん。

354:デフォルトの名無しさん
07/10/23 03:00:35
ここではおまいらが好き勝手言ってるだけだけど、
何か良くて何が悪いのかが評価できるなら素晴らしいライブラリを作ることもできそうなのになw
Phobosのobject.dをいじらず、The D Style準拠で
Cout周りのインタフェースをほげほげした(どうすんだこれ)
そんなTangoに改造したらいいってわけか


355:デフォルトの名無しさん
07/10/23 03:01:20
2か所訂正…orz
auto s = new String; で aaaabbaabbccとなるかccccbbccbbaaとなるか…か。

356:デフォルトの名無しさん
07/10/23 03:03:07
>>353
待て待てその最後みたいなのはC++でもやっちゃいけないことになってるんじゃなかったか
それを問題視する必要はないことしようぜ

357:デフォルトの名無しさん
07/10/23 03:04:05
>>353
>演算子オーバーロード
ヒント: toString

358:357
07/10/23 03:05:52
あ、でもtoStringよりもストリーム演算子の方が効率的だわな。

359:デフォルトの名無しさん
07/10/23 03:08:47
>>353
>opCall_rまだー?
まで読んだ。

360:デフォルトの名無しさん
07/10/23 03:10:52
("hogahage")Cout;

こうですか><

361:デフォルトの名無しさん
07/10/23 03:11:59
俺もそうおもたw
けどおかしいだろw

362:デフォルトの名無しさん
07/10/23 03:34:05
(Cout "hogahage");

じゃあこうですか><

363:デフォルトの名無しさん
07/10/23 10:42:06
そして半角ひらがなの復活

364:デフォルトの名無しさん
07/10/23 17:17:25
暇だから上げてみます。
自分用に作ったフレームワークです。

libwindowはライブラリでそっちをなるべくいじらない方向で設計されてます。
WorksMainはライブラリの実装で関数をガリガリ書くことでその目的を遂げます。
このライブラリはウインドウズ専用です。

URLリンク(www9.uploader.jp)

365:デフォルトの名無しさん
07/10/23 17:37:53
>>363
ちょ!それスレ違い。
いや、俺もそのスレみてるからわかるんだが。

366:デフォルトの名無しさん
07/10/23 18:49:23
>>364
方向性にはげあがるほど同意
lowerCamelはいかが?(参照>>308

367:デフォルトの名無しさん
07/10/23 19:55:18
>>365-366
じゃああえて・・・DFLでよくね?

368:デフォルトの名無しさん
07/10/23 20:20:35
>>362
それなんてLisp?

369:デフォルトの名無しさん
07/10/23 21:07:29
>>366
関数名はキャピタライズを採用して欲しかった俺がいる。

Time now = Now;

とかやりたかったのに・・

370:デフォルトの名無しさん
07/10/23 21:42:58
これで諦めてください><;
Time now = Time.now();

371:364
07/10/23 23:33:54
URLリンク(www9.uploader.jp)
ここのアップローダはD関係なら自由に使ってください。合計200MBまで入りますから。
っていうか、人のライブラリがどうなってるか気になる!!!
そうそう、あとで後悔した時用に削除Passを忘れずに。

で!レスサンクス!!

>>366
こういう先頭大文字とかって名前あったんですね。。。
C++辺りからの癖になってるんですけど、次は小文字も検討してみます。

>>367
それ言われるとちょっと弱い。笑
⑨にも・・・を見るとTangoだとかvar1系だとかそういうのが良くわからないので使ってないんですけど、
将来的な移植性を考えるとやっぱ習得したいですねぇ。。。

372:デフォルトの名無しさん
07/10/23 23:57:44
「ひとこぶらくだはひとこぶうんち ふたこぶらくだはふたこぶうんち これはうそ!」

lower/upper camel という字面を見てたら思い出した子供時代のはかない記憶。

373:デフォルトの名無しさん
07/10/24 12:20:43
Overload setっていうのでtoStringがかぶらなくなるのかと思ったら
import std.string;
class Foo {
void bar(char* ptr) {
string s = toString(ptr); // std.string.toString(char*)呼んで欲しい
// けどObjcet.toStringにマッチしないのでエラー
}
}
ダメなのか。まあstd.conv.toができたからいいけど

374:デフォルトの名無しさん
07/10/24 13:14:32
string s = .toString(ptr);
って書けばいいから、できなくても別に不便ではないな

375:デフォルトの名無しさん
07/10/24 13:29:20
ExceptionとErrorの使い分けがわかりません><
おしえてくだしあ><

376:デフォルトの名無しさん
07/10/24 13:31:57
class Exception;
回復可能な例外は全て Exception クラスから派生すべきです

class Error: object.Exception;
回復不可能な例外は Error クラスから派生すべきです

377:デフォルトの名無しさん
07/10/24 13:33:33
回復が可能かそうでないかの区別がつきません><><><

378:デフォルトの名無しさん
07/10/24 14:57:06
例外が回復可能かどうかなんて設計段階で判断できるような。
設計で判断できなくても経験積めばここは復帰無理だなっていうのが直感で分かるように。

379:デフォルトの名無しさん
07/10/24 15:35:55
どの範囲で復帰不能か可能か、って話もあるしな

380:デフォルトの名無しさん
07/10/24 15:38:23
なにがどうなると回復不可能になるの?

381:デフォルトの名無しさん
07/10/24 15:46:00
回復が不可能になるとだな

382:デフォルトの名無しさん
07/10/24 15:58:04
場合によりけりでしょ。
タイムアウトなんかで期待される結果が帰ってこなかった場合に、
初期値等のテキトーな値代入して問題なく処理続行できるなら例外、
出来ないならエラーって言う感じでいいんでは。


383:デフォルトの名無しさん
07/10/24 16:29:31
回復不可能だって分かった時点でErrorの子クラスでExceptionをラップして投げなおせばいい。

384:デフォルトの名無しさん
07/10/24 16:31:01
にゃる そういう意味なのか
システムがぬっ壊れたりするのかとおもた

385:デフォルトの名無しさん
07/10/24 18:59:27
俺が分類したケース

回復不能
・root/admin権限が必要なのになかった

回復可能
・ファイルが見つからなかったが、指定しなおせばよい

>>384
最終的にはシステムがぬっ壊れない限りは回復の手段を用意することはできるかと思う

386:デフォルトの名無しさん
07/10/24 19:01:42
処理続行できるような想定範囲内のエラーで例外投げるな。例外は例外的な事態に使用すべき。
……みたいなの(やや極端な言い方だけども)を信じてたんで微妙に慣れない。
多分戻り値でエラー処理みたいな文化が嫌なんだろうけど、効率なんかも考えると回復可能なエラーまで例外ってどうなの? って気がしてしまう。
上みたいな(勝手な)文化を持ってたせいかExceptionに回復可能な、みたいなニュアンスも感じないし。

実際のところDでなんか書いてるときにみんなErrorとException使い分けてるの?

387:デフォルトの名無しさん
07/10/24 19:10:19
俺の考えでは、プログラムの動作自体が危うい場合がError。
それ以外は全部Exception。

たとえば、ファイルをコピーするプログラム、copyを作るときに、
パラメータで指定されたファイルが見つからない場合は、Exception。

388:デフォルトの名無しさん
07/10/24 19:14:12
基本的にException。
拾いたければ拾えばいいじゃん(たいていは回復可能だから)
というスタンス。

行列演算で要素数が不適切なときもException(動的に要素数を決められる場合)。

ただし契約違反は実装者が間違ってるからassertするときはErrorが多い。

389:デフォルトの名無しさん
07/10/24 19:18:20
>>386
引数、返り値が適切なほうがいいというのはあるかもしれない。
計画の中にpureという仕様が入ってるが、
ああいうのをまじめにやるならエラー処理のために引数や返り値がつぶされるのは好ましくない。

390:デフォルトの名無しさん
07/10/24 19:21:41
>>386
> 処理続行できるような想定範囲内のエラーで例外投げるな。例外は例外的な事態に使用すべき。

これは誰の教えなのかkwsk

391:デフォルトの名無しさん
07/10/24 20:44:55
人生のExceptionが発生しました

392:デフォルトの名無しさん
07/10/24 20:58:52
>>391
回復可能なのか、よかったな

393:デフォルトの名無しさん
07/10/24 21:06:09
回復には神権限が必要です


394:デフォルトの名無しさん
07/10/24 21:15:29
引きこもりでごめんなさい→Exception
生まれてきてごめんなさい→Error

ってことか

395:デフォルトの名無しさん
07/10/24 21:33:52
お願い届いて!!私のException!!!

引きこもりでごめんなさい。

396:デフォルトの名無しさん
07/10/24 21:49:23
そろそろ人生のErrorが発生しそうで不安になってきた。

397:デフォルトの名無しさん
07/10/24 22:31:15
Javaみたく「こいつはこーいう例外投げるかもしれんからちゃんと対処しろよ!」ってコンパイラに言われないしなぁ。
意識してErrorを自前で投げたことはないや。
assert違反とか、デバッグモードで埋め込まれる配列境界チェックなんかはErrorか? そんくらい。

あれ? ErrorてExceptionの派生クラスだったのか?
つまり「Error is a Exception」「回復不可能は回復可能の一種」 ・・あれ?

おかしくないですかカテジナさん!

398:デフォルトの名無しさん
07/10/24 22:31:22
ファイル読み込みルーチンで、開くべきファイルがロックされてたり
ファイルがなかったりしたら、再試行とか考えてException、
そもそもファイルシステムや開くファイルの種類が非対応だったりして
なにをどうしようがファイル読み込みは無理、ってなのはError、とか。

ただ、それらを受け取るルーチンでは、たとえば別の読み込みルーチンを
使うとかで、(より大きな枠組みから考えると)復帰可能だったりするかもしれない。

という感じで、回復可能か否かが処理の段階によって変わることに注意して組むと
Errorの使い出もあるんじゃなかろうか。

399:デフォルトの名無しさん
07/10/24 22:53:29
Errorがでたのに何事もなくプログラムが動作し続けるってのは、ちょっとおかしいと思う。
それだと正常系に復帰してるじゃん、と。

OutOfMemoryぐらい致命的でないとErrorというのとはちょっと違うと思う。

400:デフォルトの名無しさん
07/10/24 23:08:48
>>399
回復不可能は回復可能がグレードアップ!
という考えで

401:デフォルトの名無しさん
07/10/24 23:11:16
つまり、ErrorをExceptionで捕えることができるのはおかしい、と。
Exceptionを派生したErrorってのがおかしいんだよな。
Errorを派生したExceptionとか、ErrorとExceptionはそれぞれ何からも派生してないってのがいいような気がするね。
Tangoみたいに安易に消しちゃうのはどうかとも思うが。

402:デフォルトの名無しさん
07/10/24 23:38:26
>>399
頑張ってメモリ解放して状況解消する頑健なプログラムだってありうるべ
メモリ食いつぶしかねないプログラムなら特に。

どんなエラーも何らかの処理がなされる、というのがDの例外機構なわけで、
399的な「絶対に正常系に復帰しない」発想だと、例外もクソもなく強制終了
するしかない状況じゃないとErrorを出さない、という意味のない話になるべ

何が正常動作かは処理の段階によって変わるんじゃね

403:デフォルトの名無しさん
07/10/24 23:40:29
その処理の段階ってちゃんと定義されてるのかな?

今のままだとExceptionとErrorがごっちゃになりそうな悪寒

404:デフォルトの名無しさん
07/10/25 00:23:53
むしろError使ったことないし
必要な場面に出くわしたことがないし
これからも使わない気がしている

405:デフォルトの名無しさん
07/10/25 00:27:56
そういうのを定義するのが設計だべ

まあそんなまじめなプログラム俺も書いたことないけど

406:デフォルトの名無しさん
07/10/25 07:11:32
2.006にしてみたらinvariant string関係の変更がtonほど出てきた

407:デフォルトの名無しさん
07/10/25 07:59:27
invariantのおかげでWin32API使うとき今まで以上にキャスト式書く機会が増えた。それ以外で特に気になるところはなし。
今は2.006でphobosが強化されたという話を聞いてわくわくしてるところ。

408:デフォルトの名無しさん
07/10/25 08:24:16
invariant stringとstd.stringの変更を解決してたら、設計の理由がなるほどと……
無駄なコピーを抑えたいという発想をどう実現するかがなんか分かってきた。

variant世界とinvariant世界が分かれてる感じで、
両者の窓口がcast(invariant)やidup、dupといった風情。

in char[]を受け取ってchar[]を返す関数の内部でstd.string関数を使う場合、
入り口でcast invariantして出口でdupすればおk、みたいな。
ただしこの方法だとスレッドセーフには気をつけないとならんので注意かも。

409:デフォルトの名無しさん
07/10/25 08:55:20
めぐりめぐって
invariantがなくなって、Cと同じになったりしてな・・・

410:デフォルトの名無しさん
07/10/25 09:41:42
散々こねくり回して出た結論がそれならば、それもまたよし。

411:デフォルトの名無しさん
07/10/25 09:58:43
idupの個人的まとめ
・idupは本当にコピーを生成する
・idupしたコピーはGCに回収される

idupされた文字列を参照するようなstring(std.string中の関数の返り値など)をいつまでも受け渡し続けると、
いつまでたっても回収されずに残り続けることになるかもしれない。
巨大な文字列から1行だけ取り出すとかした場合はidupして、
巨大なやつをGCに回収してもらいやすくするのは考えられる。

idupは比較的気軽に使えるかなと思う。
長期的に生存する可能性があるプログラムについては知らね

412:デフォルトの名無しさん
07/10/25 10:25:51
ArrayBoundsErrorは回復不可能なんですか?

413:デフォルトの名無しさん
07/10/25 10:30:57
配列の範囲外に対する不正なアクセスだからエラーなんでは?
そもそもDは配列のサイズがあらかじめ調べられるので、範囲外に対するアクセスは事前に防げるはず。

414:デフォルトの名無しさん
07/10/25 10:48:59
ほんとによく設計されたソフトウェアなら、モジュールがAssertErrorなんか投げてきても
catchして「このモジュールはバグってんな」って切り離て、
さらにそのモジュールに依存する別のモジュールにも通知したりして、
本当にコアなモジュールが生きてる限りは動きつづける、とか作りこむんだろーな。
apacheとかそんな感じになってるのか。Dじゃないけど。

気楽なDの個人アプリじゃそこまでやらんで、
void main(){
 try{
  myMain();
 }catch(Exception e){
  outputErrorMessage("ごめんちゃいバグで強制終了します。以下をコピペして送ってくれるとお互い幸せに。", e);
 }
}
とかでいいよね? 後は明らかに発生しそうなException(new File(stdin.readLine())とか)くらいは
その場でcatchすんの忘れないように気を付けなきゃ、で。

「catchすんの忘れてねぇか? いいのか?」とコンパイラに言ってもらえればなぁ、とも思うけど、
そうなるとErrorとExceptionの違いが問題になってくる感じ。

415:デフォルトの名無しさん
07/10/25 10:55:20
もしかして関数呼び出すたびにtry-catch書くのが普通なのか

416:デフォルトの名無しさん
07/10/25 12:12:43
default: を書き忘れて例外出されたときはかなりビビッた。
何でswitchが例外投げるの!?って。

417:デフォルトの名無しさん
07/10/25 12:14:23
>>415
俺は!の話だけどさ、基本的に例外投げないな。だから、ほとんどtry構文使わない。

418:デフォルトの名無しさん
07/10/25 12:54:01
D言語で作られたアプリで参考になるのねーの?

419:デフォルトの名無しさん
07/10/25 13:10:04
>>415
それは普通、ではなく理想

420:デフォルトの名無しさん
07/10/25 13:45:58
回復可能なもので例外投げるのは速度が・・・

421:デフォルトの名無しさん
07/10/25 13:52:39
通常の実行ロジック部分のパフォーマンスが重要
例外時に速度重視?


422:デフォルトの名無しさん
07/10/25 14:13:54
ああ、なるほど。勘違いしてた

423:デフォルトの名無しさん
07/10/25 15:10:24
>>419
Cで関数呼び出しごとにエラーコードをチェックしてエラーコード返して・・・ってやるよりも
遥かにぐちゃぐちゃなコードが出来上がるだけな気がするのだけど。
それを無くして「正常な実行パス」だけを簡潔に書くための構造化例外やん?

424:デフォルトの名無しさん
07/10/25 16:07:23
>>423
分かっててもときどき変なことやっちゃうんだよね
特にC++とかJavaでね

try~catchはmainだけで充分なのかも知れない


425:デフォルトの名無しさん
07/10/25 16:35:20
>>423
すべての例外はどこかの階層で拾って、プログラムが適切に復旧するようにするのが理想。
別に、一関数ごとにtryで囲む必要はない。

426:デフォルトの名無しさん
07/10/25 18:13:59
in, body, outをはじめて使ってみたお^^
しかしenum/invariant structのような型で制限してしたほうが書くのは面倒だけど使えるお-_-;

427:デフォルトの名無しさん
07/10/25 20:35:06
>>426
でもoutとかで「戻り値にnullは絶対返さないよ!」とかassertしてあると使うのもコード読むのも安心するお^^
でも型だけで事足りるならちゃんと型設計してるってことだし偉いお^^

428:デフォルトの名無しさん
07/10/25 20:59:06
in/out/bodyってコード読むとき邪魔っぽくない?

429:デフォルトの名無しさん
07/10/25 21:05:16
ちょっとインデントに悩んだことはあった

430:デフォルトの名無しさん
07/10/25 21:23:49
void hoge() in { assert(文); } body
{
// 処理
}
みたいに書いたり・・・?
in と out を関数内部に書きたかったりする・・・

void hoge()
{
in{ assert(文); }
out{ assert(文); }
}

あ、でもこれなら普通の scope 文でいいのか・・・?

431:デフォルトの名無しさん
07/10/25 21:34:33
公式の書き方は
URLリンク(www.digitalmars.com)
中括弧を改行しないでくっつける派の俺としてはちょっと冗長に見える。
けどまあこれくらい改行するのもぱっと見わかりやすいのかな。

432:デフォルトの名無しさん
07/10/25 22:58:35
中かっこを開業しないでくっつける派の俺としても悩んだけど
void func()
in{
  assert(...);
}
out{
  assert(...)
}
body{
  ...
}
って感じにして妥協してみてる…
この辺もコーディング規則で一応の指標があるといいのだけど…(宗教戦争勃発しそうな気もするけど)

433:431
07/10/25 23:12:09
>>432
偉いなw
俺なんか

void func() in {
} out {
} body {
}

さえ正直捨てきれない。

434:デフォルトの名無しさん
07/10/25 23:18:23
自分はオールマンスタイルが気に入ってる

435:430
07/10/25 23:41:01
自分もオールマンスタイル派なんだけど、公式の書き方は見難いと
感じてしまう。慣れの問題なのかもだけど。

436:デフォルトの名無しさん
07/10/26 01:14:24
if (test) {
...
}
else {
...
}
これってやめたほうがいいのかな

437:デフォルトの名無しさん
07/10/26 01:33:44
begin
rescue
ensure
end


438:デフォルトの名無しさん
07/10/26 01:42:40
オライリーのPL/SQL本だかどっかで
void func(){
  hoge();
}
こうあるべきだと力説されて妙に同意してしまって以来、
どうしてもfunc()と"{"が同じ行にいられないと落ち着かなくて困る。
>>430は俺にとっても抗えぬ誘惑だ・・・

太古より語り継がれる伝説の「IDE」がいつか完成して普及すれば、
inとoutは普段は折り畳まれて「contractあるよー」的マークに収まり、
そこにマウスオーバーするとin/outのコードがポップアップで表示され・・・とか実装されるに違いない。
時を待つのじゃ・・・さすれば泣く日は来ぬ・・・

439:デフォルトの名無しさん
07/10/26 02:13:15
イデ・・・オン・・・

440:デフォルトの名無しさん
07/10/26 09:13:09
定数を引数とする三角関数のコンパイル時計算をオフにしたいときがあるわけだが、どうしたもんかな
ちょいと考えてみる

441:デフォルトの名無しさん
07/10/26 10:12:13
>440
なにゆえ?

442:デフォルトの名無しさん
07/10/26 12:07:22
>>436
俺もそのスタイルで書いてるよ。
ifブロックとelseブロックがきれいに分離してるのが気持ちいいよね。

443:デフォルトの名無しさん
07/10/26 15:26:54
>>441
コンパイル時に決定できるループでsinが山ほどあったときにコンパイルが遅くなっていたんですが、今見たら大丈夫になっていました。
勘違いかもしれませんが、再発して条件が再現できそうならまた報告します。

444:デフォルトの名無しさん
07/10/26 17:38:52
>>372
camelがどうのという話題で俺はこれを思い出す。
URLリンク(images.google.co.jp)

445:デフォルトの名無しさん
07/10/26 17:44:36
グロ注意

446:デフォルトの名無しさん
07/10/26 19:33:15
>>442
IDEでコメントつける場合にずれるのが困りもの

   // ほげほげが見付からなかった場合はエラー
else {
   put_error_log("hogehoge not found.");
}

447:デフォルトの名無しさん
07/10/26 23:04:44
>>442
ですよね!
つーかこの書き方どこで覚えたか忘れたんだけど。

あと、コメント書くとき
if (test) { // ほげほげなら
...
}
ってなってるけどこれもやめたほうがいいかなwww
関数書くときは
/// ほげほげする
void func() {
...
}
こうなるからびみょうに統一されてなくね??とか思ってしまう

448:デフォルトの名無しさん
07/10/26 23:29:12
キミの好きにしたらええ

449:デフォルトの名無しさん
07/10/26 23:31:14
そこらへんのコーディング規則とか字下げスタイルなんかをk.inabaタンに定義してほしいw

450:442
07/10/26 23:42:52
ifのコメントは
//ほげほげ
if (test) {
...
}
//はげはげ
else if(test2){
...
}
//その他
else{
...
}
ってしてる。

関数は
///ほげほげする
void func() {
...
}

451:デフォルトの名無しさん
07/10/26 23:59:19
コメントは書かない

452:デフォルトの名無しさん
07/10/27 00:18:16
>>451
ちょwww

453:デフォルトの名無しさん
07/10/27 00:18:53
ソースがドキュメント

454:デフォルトの名無しさん
07/10/27 00:23:05
俺は、関数の説明は書くけど、if文にはコメントつけないな。
大抵は条件式見れば何してるか分かるし、
ぱっとみて何を比較してるかわからないほど複雑になったら関数化する。

仕事なら仕方ないから規則通りにどんな馬鹿らしいコメントでも書くけど。

455:デフォルトの名無しさん
07/10/27 00:25:00
極力コメントつけない方向で行ってみようと思う

456:デフォルトの名無しさん
07/10/27 00:28:41
D2.006
フィールドのプロパティ.offsetofが
class Foo
{
int x;
}
...
void test(Foo foo)
{
size_t o;

o = Foo.x.offsetof; //error
o = foo.x.offsetof; //ok
}
になってるけど、これって仕様が変わったの?

457:デフォルトの名無しさん
07/10/27 00:30:50
>>456
>>176-177

458:デフォルトの名無しさん
07/10/27 00:33:26
>>457
バグっぽいのか。さんくす。

459:デフォルトの名無しさん
07/10/27 00:34:20
いつものことだが誰か報告したのか?

460:デフォルトの名無しさん
07/10/27 01:00:53
最近D言語ってのを知ったんだが
今のとこ、これ!っていうIDEはないのかな?
Poseidon?C::B?Descent?

461:デフォルトの名無しさん
07/10/27 01:22:29
伝説のIDEはDが完成されたときに現れます

462:デフォルトの名無しさん
07/10/27 01:51:47
今度からその台詞使おう・・・

463:デフォルトの名無しさん
07/10/27 01:56:25
Dの言語仕様は永遠にβ版です!

464:デフォルトの名無しさん
07/10/27 02:02:54
ウォルタンが開発やめるまでは永遠に進化し続けるよ!

んでウォルタンが開発やめた後D言語の亜系が乱立することに…
そして時代はbsDとreDhat系の戦いへ…

465:デフォルトの名無しさん
07/10/27 02:40:12
D2.006 でコンパイルして
URLリンク(cmeerw.org)
↑のwlinkでリンクすると以下のコードが
Error: Access Violation
で止まっちゃうんだけど、どして?

void main()
{
for(int i=0 ; i<5000 ; i++)
{
int[] x = new int[100];
}
}

ちなみに、変数 x を毎回deleteしてやるといける。

466:デフォルトの名無しさん
07/10/27 02:40:17
ソースファイルごとにDのバージョンの印つけといて、そのバージョンから任意のバージョンへの変換を行うものってあったらよさそうだな!
バージョンの印付いてるの前提だけど!

467:176
07/10/27 10:10:33
>>459
バグジラで検索したら2007年1月だったか2月に既にあがってたバグでした。
もう直す気無いと思われるw

468:デフォルトの名無しさん
07/10/27 12:54:43
>>467
そこのバグの修正は半年から一年後に
行われることがざらだそうです

469:デフォルトの名無しさん
07/10/27 16:07:33
>>465
それも前スレか前々スレかで見たな

470:デフォルトの名無しさん
07/10/27 19:09:31
>>461
IDEが発動するとき第6言語(D)は滅びるということか

471:デフォルトの名無しさん
07/10/27 21:35:16
C++0xスレでperlのQuantum::Superpositionsみたいなのの実装を見つけて
Dでも作ってみようかと思ったんだが、!= と == の区別ができない…

472:465
07/10/28 00:30:36
>>469
まじすか?
その時は、だいたいどんな結論に落ちついたんすか?
や、Viewerないもんで。。。ごめんねーいろんな人。

473:デフォルトの名無しさん
07/10/28 01:04:06
>>471
テラ量子力学wwwwwwwww

と思ったらマジでそういうライブラリなのか・・・
量子コンピュータの広がりの影響なのかな・・・

474:デフォルトの名無しさん
07/10/29 13:24:46
バージョンうpまだー?

475:デフォルトの名無しさん
07/10/29 21:46:53
Eclipse3.2.1ダウソしてDescentパッケ入れても全然反映されねーや…
なんでだろ

476:デフォルトの名無しさん
07/10/29 21:49:53
dsssを使ってflectionedをインストールしてimportしたら、
コンパイルエラーが発生して、以下のようなメッセージが出力されました。

flectioned.d(104): module Vararg cannot read file 'tango\core\Vararg.d'

環境は、Windows / Cygwin / dmd.exe 1.022 + phobos で、
tangoはインストールしてないのに、
tango以下のファイルをimportしようとしてるみたいです。
static ifがtrueでもfalseでも両方のブロックの文法解析が行われてるのかな?

とりあえず、flectioned.dの104~131行と247行を
コメントアウトしたらコンパイルできました。
あんまりうまい解決方法だと思えないので、
何か他にいい方法がないでしょうか?


477:デフォルトの名無しさん
07/10/29 22:09:13
Cygwin は使ってないけど、Windows + dmd1.022 + phobos で普通に動いてるけどねぇ。
Cygwin か dsss が何か悪さしてんじゃない?


478:デフォルトの名無しさん
07/10/29 22:30:45
>>477
あ。たぶんdsssのような気がしてきました。

おそらくdsssは、
import文を見てコンパイルするファイルを特定していってるんだけど、
そのときにstatic ifをうまく解析できてないのかもしれません。

[わなD]に
「DSSSは、static ifで条件importしている依存関係の解析が
 甘くて時々不便だったりするので…」
という記述があったので、これのことなのかも。


479:デフォルトの名無しさん
07/10/29 22:41:27
Derelict は dmd 2.0 だとビルドできないのか?

480:デフォルトの名無しさん
07/10/29 22:52:37
>>479
dsss net install derelictsdl

コンパイラをdmd 2.006にして上記のコマンドを実行したら、
たしかにコンパイルエラーが出ました。

include\d\derelict\util\loader.di(223):
Error: cannot implicitly convert expression ("") of type invariant char[0u] to char[]

たぶん文字列をキャストすりゃいいんだろうけど、
全部キャストするのはヤだなー。

URLリンク(www.dsource.org)

検索してみたら上記のリンク先でそれっぽい話題が交わされているようですが、
私は英語が読めないのでよくわからんかったです。


481:デフォルトの名無しさん
07/10/29 23:04:18
k.inabaさんがdsssはstatic if内でのimportの解析が甘い的なこと書いてた気がする
わなDかな

482:デフォルトの名無しさん
07/10/30 00:45:01
dmd 2.0系での derelict のコンパイルとインストール、うまくいきました。

[わなD]D 2.x と D 1.x
URLリンク(www.kmonos.net)

上記のページを参考にして、char[]をstringに、
dupをidupに修正してコンパイルしたらうまいくいきました。


483:デフォルトの名無しさん
07/10/30 01:43:53
おお
わなD更新されてるじゃまいか
どっかで更新されたかどうか告知あったりしないのかな
RSS配信とか

484:デフォルトの名無しさん
07/10/30 02:19:27
class Foo{}

class Bar
{
 private const( Foo ) mFoo;

 const( Foo ) getFoo()
 {
  return mFoo;
 }

 void setFoo( const( Foo ) iFoo )
 {
  mFoo = iFoo;
 }
}

みたいなことをD言語2.xでしたいのですが、
Bar.setFoo()の中でコンパイルエラーが発生してしまいます。

たぶんメンバ変数Bar.mFooの定義方法がよくないと思うのですが、
どうするとよいでしょうか?


485:デフォルトの名無しさん
07/10/30 03:05:51
どうするんだろ
うまくいかないや
こんなんになりました

class Foo{}

class Bar
{
 private const(Foo)* mFoo;
 const(Foo) getFoo()
 {
  return *mFoo;
 }
 void setFoo(const(Foo) iFoo)
 {
  mFoo = &iFoo;
 }
}

void main()
{
 auto bar = new Bar;
 bar.setFoo(new Foo);
 const(Foo) foo = bar.getFoo();
}


486:デフォルトの名無しさん
07/10/30 03:42:21
const Foo mFoo; なら変数mFoo自体がconstだけど、
const(Foo) mFoo; なら変数mFoo自体は書き換え可能なはずだよね。
メンバ変数のときだけ動作が違う、ってんだからバグじゃね?

487:デフォルトの名無しさん
07/10/30 04:30:53
俺もバグなんじゃないかと思う。
とりあえずaliasでごまかしてみるとうまくいくようです。

class Foo{}
class Bar
{
 alias const( Foo ) Foo_const;
 private Foo_const mFoo;
 Foo_const getFoo()
 {
  return mFoo;
 }
 void setFoo( Foo_const iFoo )
 {
  mFoo = iFoo;
 }
}
// 意味のないエイリアス
// この手のものは…どうなんですか、ウォルターたん…

488:デフォルトの名無しさん
07/10/30 05:49:36
aliasした場合、今度はconst消えちゃってね?

489:デフォルトの名無しさん
07/10/30 11:03:50
>>482
> 2007/10/30 :: RSSはじめました
ました

490:デフォルトの名無しさん
07/10/30 11:04:56
間違えた>>483

491:デフォルトの名無しさん
07/10/30 11:57:38
助かります

492:デフォルトの名無しさん
07/10/30 14:25:54
わなDの"../表紙に戻る"って戻れないよね

493:デフォルトの名無しさん
07/10/30 14:59:37
>>488
ほんとだ。constがきえてるっぽい。これもバグなのかな。
まぁconst/invariant周りのバグは多すぎて報告する気にもならんけど。

494:デフォルトの名無しさん
07/10/30 16:06:32
v1からv2に乗り換えたら連想配列でキー引けないんだけど、なんか変わった?

495:デフォルトの名無しさん
07/10/30 17:11:50
>>494
エスパーしてみると、文字列リテラルの型がinvariant(char)[]になった。

496:デフォルトの名無しさん
07/10/30 17:58:36
int[char[]] foo = [ "hoge" : 1, "hage" : 2 ];
if(auto p = ("hoge" in foo))
writefln(*p);
else
writefln("ねーよ");
try {
writefln(foo["hage"]);
}
catch(ArrayBoundsError) {
writefln("ねーよ");
}
v2でどー書くの?

497:デフォルトの名無しさん
07/10/30 18:13:36
// dmd 2.006
void main(){
int[string] foo = [ "hoge" : 1, "hage" : 2 ];
foreach(k; foo.keys)
writeln(k, foo[k]); // Error: ArrayBoundsError
}

おそらくバグだな

498:デフォルトの名無しさん
07/10/30 18:16:44
void main(){
int[string] foo;
foo["hoge"] = 1; foo["hage"] = 2;
foreach(k; foo.keys)
writeln(k, foo[k]);
}

こうすればいけるな。

499:デフォルトの名無しさん
07/10/30 21:23:48
>>484
>>486

クラスのメンバ変数にconstオブジェクトを持たせると挙動がおかしいのは、
下記のページにあるバグ報告と同じっぽいですね。
URLリンク(d.puremagic.com)


500:デフォルトの名無しさん
07/10/30 23:06:21
分かっちゃいるけど直ってない、という話なのね

501:デフォルトの名無しさん
07/10/31 03:07:11
D2不安すぎる

502:デフォルトの名無しさん
07/10/31 10:19:11
D2.0で作成したソフトウェア納品してしまった件wwww
ソースじゃなく、バイナリだけだけど

503:デフォルトの名無しさん
07/10/31 10:34:24
>>502
おぉおおぉおおそろしいことを…!
でもよくやった!

504:デフォルトの名無しさん
07/10/31 11:22:19
Makefileで依存関係しらべてビルドするより、
dmd.exeでどかっとコンパイルしたほうが速いんだね・・

>>502
ちょwww

505:デフォルトの名無しさん
07/10/31 13:49:37
>>501
Doctor2年でつか

>>502
どこの会社だよそれwwwww
せめて1.0にしろよwwwww
後で致命的なバグ見つかってもしらねーぞwwww

506:デフォルトの名無しさん
07/10/31 14:05:32
>>502
国内初の実用事例キタコレwwwww

507:デフォルトの名無しさん
07/10/31 14:22:55
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::。:::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::。::::::...... ...   --─-  :::::::::::::::::::: ..::::: . ..::::::::
:::::::::::::::::...... ....:::::::゜::::::::::..   (___ )(___ ) ::::。::::::::::::::::: ゜.::::::::::::
:. .:::::。:::........ . .::::::::::::::::: _ i/ = =ヽi :::::::::::::。::::::::::: . . . ..::::
:::: :::::::::.....:☆彡::::   //[||    」  ||]  ::::::::::゜:::::::::: ...:: :::::
 :::::::::::::::::: . . . ..: :::: / ヘ | |  ____,ヽ | | :::::::::::.... .... .. .::::::::::::::
::::::...゜ . .:::::::::  /ヽ ノ    ヽ__/  ....... . .::::::::::::........ ..::::
:.... .... .. .     く  /    _三502三∠⌒>:.... .... .. .:.... .... ..
:.... .... ..:.... .... ..... .... .. .:.... .... .. ..... .... .. ..... ............. .. . ........ ......
:.... . ∧∧   ∧∧  ∧∧   ∧∧ .... .... .. .:.... .... ..... .... .. .
... ..:(   )ゝ (   )ゝ(   )ゝ(   )ゝ無茶しやがって… ..........
....  i⌒ /   i⌒ /  i⌒ /   i⌒ / .. ..... ................... .. . ...
..   三  |   三  |   三  |   三 |  ... ............. ........... . .....
...  ∪ ∪   ∪ ∪   ∪ ∪  ∪ ∪ ............. ............. .. ........ ...
  三三  三三  三三   三三
 三三  三三  三三   三三

508:502
07/10/31 17:40:02
反応が結構あったのにびびったw
リアルタイム映像系で、DとDirectX10と絡めた。
やっぱりネックはGCだけど、評判が悪いがscopeとかつかうとわりと回避できるよ。
それでもメモリ使用のグラフををみると
/|/|/|/|/|
こんな感じでノコギリみたいになる。
そこ以外はサクサク開発できた。
まぁなんだ、D言語最高

509:デフォルトの名無しさん
07/10/31 18:05:54
>>502
ところで
URLリンク(hp.vector.co.jp)
が古くなってるからDirectX10周りを公開してくれたら助かる人がいるんじゃないかな
仕事で書いたコードだから無理かなと思うのであんまり期待せずに言っておくw

納品して利益が発生するものに使う機会はまだないが
社内向けのなら俺もD使ってる

510:デフォルトの名無しさん
07/10/31 18:51:09
D2とVistaって・・・
どんだけばk・・・いや、いい意味でなw乙w

511:デフォルトの名無しさん
07/10/31 19:00:32
>>508
確かに集合型とか一時オブジェクトを扱うとC++よりDが圧倒的に楽なんだよなあ。
DX10を絡めたのは尊敬する。俺はやろうとして挫折してます。

512:デフォルトの名無しさん
07/10/31 20:23:41
>>502
ノウハウうpしてくれると俺が鼻水100ccほど垂らしながらよろこびます

513:デフォルトの名無しさん
07/10/31 20:26:52
俺も0xD2ccくらい垂らしながらよろこびます

514:デフォルトの名無しさん
07/10/31 21:01:36
>>508
本当に勇者だなお前は
お前みたいな勇者のおかげで俺たち一般PGが最新技術に触れる日が早まる

515:デフォルトの名無しさん
07/10/31 21:03:15
DirectX 捨てて OpenGL にいった自分も少しよろこびます。

516:デフォルトの名無しさん
07/10/31 21:44:52
>>502==508の人気に嫉妬

517:デフォルトの名無しさん
07/10/31 22:14:53
映像系で思い出したが、dSFMTをクラス化してインスタンスごとに独立した系列がいけるようにチョコチョコいじってるのだが、
SIMD部分をどうするかでかなり悩む

518:デフォルトの名無しさん
07/10/31 22:19:27
finallyよりもscope(exit)のがつかいやすい

519:デフォルトの名無しさん
07/10/31 23:12:07
しかしふとだいぶ前ーのスレで
「C++よりいい感じだぜー」って研究室でデータ計算だかに
使ってるって言う人も見たなぁ、という記憶が。
まぁ「納品」という言葉が出てくると俺ビビらずにはいられんけどw

ところで興味本位でメインマシンを64bitなubuntuにしてみたら
いろんな32bitライブラリがネーヨとリンカに言われ俺涙目。
dmdもamd64吐けるようにぷっりーずぅぅぅー。

520:デフォルトの名無しさん
07/10/31 23:32:21
>>519
sudo apt-get install lib32gcc1
してリンカフラグ弄ればいいとおも

521:502
07/11/01 07:05:47
DirectX10ヘッダーファイルをDにポーティングしていれば、一番みんなが使いやすいんだろうと思うんだけど
C++でまずDirectX10をラップしてそれをDで使用するようにしました。
DirectX10.1とかでるし、dxgi.h、d3d10.h、d3dx10.hがころころ変わると思ったので。
以下スレチにならない程度にさわりを・・・
/* C++ */
class Device {
public:
 _cptr<ID3D10Device> _cp; // _cpt<T>rはCOMをあつかうスマートポインタ
};
class Swapchain {
public:
 uint32 _width, _height;
 _cptr<IDXGISwapChain> _cp;
 int init( Device &dev, const DXGI_SWAP_CHAIN_DESC &ds);
};
class Buffer {
public:
 _cptr<ID3D10Buffer> _cp;
};
とこんな風にまんま包み込んで、
Dに以下の様な関数をエキスポート
Device * dx10g0_Device_new();
void dx10_Device_delete(Device *pthis);
int dx10_Device_init(Device *pthis, void *pdevicesettings);
int dx10_Device_DrawPrimitive(Device *pthis, uint type, uint n);
int dx10_Device_DrawIndexedPrimitive(Device *pthis, uint type, uint indexcount);
中の関数はDirectX10APIより少々便利めにつくるようにしてます。
こうすることのメリットは、上でいったヘッダーファイルがかわっても(少しは)大丈夫なこと、
DirectX9に同様のものをつくることで、D側からはDirectX10、DirectX9が同じように扱えること。
Shader4.0をつかってしまったら、意味がないかもだけど・・・

522:デフォルトの名無しさん
07/11/01 13:14:21
>>520
情報有難う御座いまするー。
そうかー32bit系はそういうパッケージ名を与えられているのですね。
lib32gcc1は入ってました。中身の.soから、Winでいうインポートライブラリが生成できればいいんでしょか。
ともあれこれ以上は自力でごにょごにょとやってみます。

523:デフォルトの名無しさん
07/11/01 19:10:15
>>521
なるほど。
俺は、汚いヘッダファイルからではなく、比較的綺麗なIDLからDにポーティングしようとして挫折。
.diを吐くIDLコンパイラ欲しい、、、

524:デフォルトの名無しさん
07/11/01 19:26:30
「無いならば 作ってしまおう プログラマ」 詠み人知らず

525:デフォルトの名無しさん
07/11/01 19:46:12
>>521
ありがとうございます。参考になります。
まあDから読みやすいようにするのがいい解ということですかねえ。

526:デフォルトの名無しさん
07/11/02 01:22:34
win32のBitBltがどこにあるかわかりませんか?v1.015@Phobosです。
リンカのLibにはあるっぽいんですけど、
export BOOL BitBlt(HDC,int,int,int,int,HDC,int,int,DWORD);
しても認識しません。。。

527:デフォルトの名無しさん
07/11/02 01:33:18
extern(Windows)

528:デフォルトの名無しさん
07/11/02 01:35:31
すいません!出来ました。しょーもない質問で申し訳ない。
ありがと~。

529:デフォルトの名無しさん
07/11/02 02:36:37
win32.windows 使わないの?

530:デフォルトの名無しさん
07/11/02 02:44:05
なるべく標準で済ませたかったんです。
はやく標準でとりこんでくれないかなぁ。。。

531:デフォルトの名無しさん
07/11/02 03:58:22
意味無いけどあるある

532:デフォルトの名無しさん
07/11/02 07:48:20
チラ裏!

今丁度はまってた事。
クラスを宣言してC++と同じ要領で使おうとしたら、宣言自体は参照のためにアクセス違反の例外が飛んだ。ってか飛びまくった。
つまり、newしてなかった。あ~、何事かとおもったわ。(TT

533:デフォルトの名無しさん
07/11/02 08:11:20
構造体・クラスをみわけるために
なんかプレフィックスつけてる?

534:デフォルトの名無しさん
07/11/02 08:14:08
いや、そういう習慣は持ってないね。
それがさ、うっかりスタックに確保されるもんだと勘違いしてたんだ。
C++だと基本的に自分でメモリ確保しないようにやってたから。。。

535:デフォルトの名無しさん
07/11/02 08:23:28
//C++
Class hoge;
//D
scope hoge = new Class;

536:533
07/11/02 08:26:58
いや、べつに532にきいたわけじゃないんだ。
みんなはどうしてるかなと思って。

俺は構造体にはSをつけて、クラスにはなんもなし。

537:デフォルトの名無しさん
07/11/02 08:30:01
ああ、結局newしないといけないんだなぁ。
なるほど、なるほど。

new恐怖症なもんでね。
だから、GC万歳ってかんじなんだけどね。

538:デフォルトの名無しさん
07/11/02 08:36:49
乳は決して怖くない。勇気を持ってください。

539:532
07/11/02 08:41:34
>>536
俺は特にプレフィックスはつけない。何にでも。
でも、命名規則は割りと変数の使用イメージにそってつけてるかなぁ。
まぁ、しばらくすると、わすれちゃうんだけどね。。。XP

>>538
勇者はD言語を手に入れた。LvUP!!new恐怖症が多少和らいだ。deleteを忘れた。




徹夜しちゃったからそろそろ寝るかなぁ。
今作ってるの、もうちょっとで完成するんだけどねぇ。あえて寝る!
そんじゃまた~。

540:デフォルトの名無しさん
07/11/02 08:44:07
そういえば`「わすれる」を覚える`って不思議な響きだよな・・・

541:デフォルトの名無しさん
07/11/02 08:48:51
(a, b) = (c, d);みたいなのが
a = c;
b = d;
に変換されるようなやつってD言語にある?

542:デフォルトの名無しさん
07/11/02 10:36:20
>>541
無くは無い。tuple。

543:デフォルトの名無しさん
07/11/02 16:22:56
関数からタプル返せるようになるのまだー?

544:デフォルトの名無しさん
07/11/02 16:34:29
それよりもタプルリテラル欲しい。

545:デフォルトの名無しさん
07/11/02 18:09:21
質問です。
v1.015なんですけど、以下のコードが変なエラー吐いて止まっちゃうんです。
Error: non-constant expression new stack_t(true)

これって、グローバル変数に直にnewすることってできないんですか?

private import Stack;//自作のstack_t(T)。引数はboolのみ。

struct dummy{
    int x,y;
}
alias stack_t!(dummy) stack;
auto st =new stack; 
int main(char[][]){
    static dummy d={10,20};
    
    st.push(d);
    
    return 0;
}

546:デフォルトの名無しさん
07/11/02 18:41:50
そういう場合は static this() を使う。

private import Stack;//自作のstack_t(T)。引数はboolのみ。

struct dummy{
int x,y;
}
alias stack_t!(dummy) stack;

stack st;

static this(){
st=new stack
}

int main(char[][]){
static dummy d={10,20};

st.push(d);

return 0;
}


547:デフォルトの名無しさん
07/11/02 19:03:56
あぁ、なるほど。
わかりました~。レスありがとう。

548:デフォルトの名無しさん
07/11/02 19:51:37
static thisってクラス外でも使えたのか……知ってればもっときれいに書けたのあったなあ……

クラス内enumの仕様が悩ましい。

class Foo {
enum FooEnum {}
}
enum GlobalEnum {}

class BarA(T : FooEnum){} // NG
class BarB(T : GlobalEnum){} // OK
class BarC { // OK
FooEnum t;
}

BarAが宣言したいのだがなんとしたものか。

549:デフォルトの名無しさん
07/11/02 19:56:02
>>548
class BarA(T : Foo.FooEnum){}

550:デフォルトの名無しさん
07/11/02 20:09:31
Foo.FooEnum t;

551:デフォルトの名無しさん
07/11/02 20:28:04
digitalmars.com 繋がる?

552:デフォルトの名無しさん
07/11/02 20:46:56
>>549-550
すんません間違えました……でも両方とも
class Foo is forward referenced when looking for 'FooEnum'
でコンパイルエラーとなるという。

シンボルの意味が定義される順番が

A群
Foo, GlobalEnum, BarX(とテンプレート引数)

B群
Fooの内部、BarCの内部……

というふうになっているからかな、とは思うのですが。

553:デフォルトの名無しさん
07/11/02 22:11:25
>>551
つながらない。

554:デフォルトの名無しさん
07/11/03 00:20:56
>>552
そこら辺、実装が微妙だよな。
内部関数も前方参照できないと使えないし。

555:デフォルトの名無しさん
07/11/03 09:15:56
What's New for D 2.007
Oct 31, 2007
New/Changed Features

    * Functors now supported by std.traits.ReturnType().
    * Transitive const now leaves invariants intact in the tail.
    * Added overloadable unary * operation as opStar().
    * Full closure support added.
    * Data items in static data segment >= 16 bytes in size are now paragraph aligned.

556:デフォルトの名無しさん
07/11/03 09:17:01
貼ってから気づいたけれどフルクロージャーサポートかっ!

557:デフォルトの名無しさん
07/11/03 09:26:28
2行目の意味誰かkwsk!

558:デフォルトの名無しさん
07/11/03 09:54:04
opStar・・・・・・これでboost::spiritが移植可能かも!

いやあんまり要らん気がするが

559:デフォルトの名無しさん
07/11/03 09:59:50
writefに("日本語")としたらinvalid UTF-8 sequenceとでてコンパイルできないんですが
どうしたらコンパイルできるんでしょうか。

560:デフォルトの名無しさん
07/11/03 10:08:29
ソース自体をUTF-8かUTF-16で保存してください。

561:559
07/11/03 10:23:38
>>560
UTF-16は選べなかったので、UTF-8で保存したらできました。ありがとうございます。
ただUTF-8なので??となりました。

562:デフォルトの名無しさん
07/11/03 10:27:12
今更だがSharpDevelopいいな

563:デフォルトの名無しさん
07/11/03 11:15:20
>>561
今のところ、Windows上で出力内容を化けさせずに見たい場合は

1、テキストファイルに出力して確認
2、printfでUTF-16を使う

のどちらかじゃないですかね。コンソールでCHCP 65001とかやる手もありますが、
これだとなんか表示がおかしくなる上にコンソールのサイズが強制的に変更されるので使いづらいです。

2の方法の場合、下のようにするとうまくいきます。

//↓こんな感じ
import std.c.locale;

void main() {
setlocale(0,"jp.932");
printf("%.*ls\n","日本語"w);
}

ただこれ日本語版のWindows環境以外について全く考慮してないプログラムになるんで、
もう一工夫した方が良いと思います。単なるテストプログラムと割り切ってるなら
そんなん考えないでも良いと思いますけど。

564:デフォルトの名無しさん
07/11/03 11:28:43
Internal error: ../ztc/cgcod.c 1031

565:デフォルトの名無しさん
07/11/03 12:14:15
* Full closure support added.

とうとうきたのか!?

566:デフォルトの名無しさん
07/11/03 13:47:29
ヘルプのtemplateのサンプルの Curry をこんな感じで書き換えたらアブノーマルエラーで落ちるんだけれど、これ何処か間違ってます?
windows2kでdmd 2.007なのだけれど・・・

R delegate(U) Curry(R, A, U...)(R delegate(A, U) dg, A arg) {
    return (U u) { return dg(arg, u); };
}

567:デフォルトの名無しさん
07/11/03 13:49:57
>>565
D\(^o^)/ハジマタ

import std.stdio;

uint delegate() counter() {
uint i = 0;
return {return ++i;};
}

void main() {
auto c = counter();
writeln(c()); // 1
writeln(c()); // 2
writeln(c()); // 3
}

568:デフォルトの名無しさん
07/11/03 13:53:57
>>566
構文的には間違ってないと思うから、
まだバグ餅と考えたほうがいいかもね。

569:デフォルトの名無しさん
07/11/03 13:56:50
>>565
URLリンク(www.digitalmars.com)


570:デフォルトの名無しさん
07/11/03 14:02:32
これのGCってstop the world?
それともなにがしかのコンカレントGC?


571:デフォルトの名無しさん
07/11/03 15:27:05
おークロージャキタ━(゚∀゚)━!!

572:デフォルトの名無しさん
07/11/03 16:24:31
これはハジマッテルなwwwwwwww
やべえwwww

573:デフォルトの名無しさん
07/11/03 16:25:47
クロージャってどういうときつかうの?
ネストした関数なら使うことあるけど。

574:デフォルトの名無しさん
07/11/03 16:25:56
いよいよ2.0に挑戦するときが来たか……。
といいつつもクロージャがサポートされるとなにが嬉しいのかよくわからない俺。

575:デフォルトの名無しさん
07/11/03 16:27:31
ごめん被ったw

576:デフォルトの名無しさん
07/11/03 16:32:50
wktk

577:デフォルトの名無しさん
07/11/03 16:35:25
DってなんかSchemeっぽくね?

578:デフォルトの名無しさん
07/11/03 16:38:52
>>577
pure関数の導入も予定してるし、関数型的に行く気まんまんという感じ。

579:デフォルトの名無しさん
07/11/03 16:43:24
クローじゃきたのかー D2はじまったな

580:デフォルトの名無しさん
07/11/03 16:59:14
クロージャの実装ご苦労じゃ。

581:デフォルトの名無しさん
07/11/03 17:04:34
1.0 に組み込む気は無いのかなぁ。
発展途上というかバグだらけなうえに仕様が迷走してるだけに
2.0はまだ使う気にならんのだよな。

582:デフォルトの名無しさん
07/11/03 17:15:52
>548の問題が、自分の用途に関して一時的解決策ができた。

enum FooEnum {}
class Foo {
alias .FooEnum FooEnum;
}

class BarA(T : FooEnum){} // NG


これで目的は果たせるけど、きっちりしておきたいところではある。

583:デフォルトの名無しさん
07/11/03 17:19:01
1.0にくみこまれたら組み込まれたらで
仕様が迷走してるっていうんじゃね?

584:デフォルトの名無しさん
07/11/03 17:21:02
1.0はもう変わっちゃだめだろ

585:デフォルトの名無しさん
07/11/03 17:27:31
>>557
このあたりと関係してるかも
URLリンク(www.digitalmars.com)

586:デフォルトの名無しさん
07/11/03 17:28:08
>>578
pure関数入れるとどうなるんだろう

>>581
ちょっと待てw
0.xのときは早く安定させてって言われてたから1.x系作って安定させたんだろうに
ちゃんと進んでるぜよ

587:デフォルトの名無しさん
07/11/03 17:53:53
1.x系は無難な過去の寄せ集め。
2.x系は未来への布石。

俺ってかっこいい!?

588:デフォルトの名無しさん
07/11/03 17:54:41
むしろ世紀末への布石

589:デフォルトの名無しさん
07/11/03 17:56:45
え?おわっちゃうの!?

590:デフォルトの名無しさん
07/11/03 18:32:00
Dが完成するときは、世界の終わりの日だということか。

591:デフォルトの名無しさん
07/11/03 18:33:06
>>589
90年先を見据えた言語ってことさ

592:デフォルトの名無しさん
07/11/03 18:35:53
じゃあ・・・配列演算と並列処理まだー?

593:デフォルトの名無しさん
07/11/03 18:57:13
pure関数が実装されると、コンパイル時に自動的に実行とかやってくれるのかな?
それか、結果のキャッシュかな。

とりあえずたらい回しが速くなる?

594:デフォルトの名無しさん
07/11/03 19:03:06
>>591
おぉ!かっこいいね!!

595:デフォルトの名無しさん
07/11/03 19:11:53
>>580
>>580
>>580

596:デフォルトの名無しさん
07/11/03 19:54:14
あえてスルーしてたのに、、、

597:デフォルトの名無しさん
07/11/03 20:26:16
すでにコンパイル時関数実行ってあるよね

598:デフォルトの名無しさん
07/11/03 20:56:56
sin,cosがそうなってると、このスレだったかで見たような記憶がある。

599:デフォルトの名無しさん
07/11/03 21:13:05
sin,cosは組み込み関数でコンパイラがコンパイル時に定数に置換するだけ。
CTFEの一種であることに変わりはないが。

600:デフォルトの名無しさん
07/11/03 21:29:50
D言語SUGEEEEEEE

601:デフォルトの名無しさん
07/11/03 21:57:31
むきー!!
modfをfmodの代わりだと思って使ってた間抜けがきましたよ。っと。
なんて紛らわしいんだ。

602:デフォルトの名無しさん
07/11/03 22:01:04
(^Д^)m9

603:デフォルトの名無しさん
07/11/03 22:07:24
>>602
右手が右側にwwww

604:デフォルトの名無しさん
07/11/03 22:12:54
これはきっと「カマーン」って言ってるんだな

605:デフォルトの名無しさん
07/11/03 22:21:52
左側だろ

606:デフォルトの名無しさん
07/11/03 22:23:56
腕の力こぶを見せ付けてるんだろう

ぶよぶよ贅肉にも見えるが

607:デフォルトの名無しさん
07/11/03 22:24:56
>>605
本人から見ればそうだな。

608:デフォルトの名無しさん
07/11/03 22:27:12
小指立ててるだけだろ。

609:デフォルトの名無しさん
07/11/03 22:33:02
循環import(AがBをimport、BがAをimport)って許されてない?

普通にコンパイルするときは問題ないんだけど、
コードカバレッジ解析(-cov)を有効にするとエラー出る。

Error: circular initialization dependency with module A

610:デフォルトの名無しさん
07/11/03 22:45:15
URLリンク(www.kmonos.net)
静的コンストラクタの順序
import宣言の循環(モジュールがお互いをimportしあう、循環依存)は、 どちらか一方が静的構築の不要なモジュールであれば、問題ありません。 双方とも静的構築が必要であった場合は、 実行時例外が発生します。

611:デフォルトの名無しさん
07/11/03 22:52:37
-covつけると静的構築されるの?

612:566
07/11/03 22:54:28
>>568
thx!
無視して先に進みます

613:デフォルトの名無しさん
07/11/03 22:55:50
静的構築が行われていないモジュール同士なんだけどなぁ~
問題なく実行はできるし・・・

614:デフォルトの名無しさん
07/11/03 22:58:24
おそらく、カバレッジ解析用のコードが追加されてエラーになるんだろうな。
バグだろバグ

615:610,613
07/11/03 23:03:15
>>614

そう思う。バグだよねぇ~。
それならそれでいいんだ・・・
D言語の思想に合ってないコーディングをしているのかと少々疑ってしまった。

616:デフォルトの名無しさん
07/11/03 23:03:48
-cov つけるとコンパイラがそれぞれのモジュール内に静的コンストラクタを挿入するって事?

617:デフォルトの名無しさん
07/11/03 23:04:56
かぶった、すまぬ

618:デフォルトの名無しさん
07/11/03 23:08:54
もし>>616ならそうそう解決されないんじゃね?
それに元々循環importは推奨されてないんじゃなかったっけ?
どっかで見た気がしてて>>610見るまで循環importやったらダメだと思ってたけど・・・
記憶違いならスマソ
どっちにしても循環しないようにしたらいいとおもた

619:609,613,615
07/11/03 23:19:02
>>615
610,613→609,613 間違えた。すまぬ。

>>618
>どっちにしても循環しないようにしたらいいとおもた
えぇ。循環したいよぉー

620:デフォルトの名無しさん
07/11/03 23:27:37
循環するほど密接してるんならもしかしたら一つのファイルにまとめるべきなのかもねえ

621:609
07/11/03 23:40:38
>>620
その通りですね。

622:デフォルトの名無しさん
07/11/03 23:48:57
>>618
モジュールコンストラクタがある場合に循環依存できないって制約は、
初期化順序を一意に定めるためのものであって、
循環依存自体に何か問題があるわけじゃないと思う。

コンパイラが挿入するカバレッジ解析コードに
モジュールごとの初期化順序が何らかの影響を及ぼすとは考えづらいから、
やはりバグだと思う。

623:デフォルトの名無しさん
07/11/04 00:09:52
class Hoge {
int opProperty(string key, int val) {
return 0;
}
}
auto hoge = new Hoge;
hoge.test = 22; // どうにかして => hoge.opProperty(test, 22);

こんなキモいことできないかなー

624:デフォルトの名無しさん
07/11/04 00:11:58
妄想乙

625:デフォルトの名無しさん
07/11/04 00:16:28
>>623
それってさ、opPropertyの中で、keyとvalに応じて分岐とかするの?
それなら普通にメンバ関数の方がいいでしょ。

単にメンバ変数に値を設定するだけならテンプレートで増殖させるとかできるし。


626:デフォルトの名無しさん
07/11/04 00:18:40
>>623
opIndex(string key, int val)ってしてhoge["test"]=22で良くね?

627:デフォルトの名無しさん
07/11/04 00:19:38
ミスった。opIndexAssignね。

628:デフォルトの名無しさん
07/11/04 00:22:46
ーにかした

ソースの外見をきにしてしまったアホだった/(^o^)\

629:デフォルトの名無しさん
07/11/04 00:24:03
雪駄下駄を書くのが面倒くさいだけなら、わなDのサンプル

template attr_reader(T, string name)
{
mixin( "private T _" ~ name ~ ";" );
mixin( " public T " ~ name ~ "(){ return _" ~ name ~ ";}" );
}

class Point
{
mixin attr_reader!(int, "x");
mixin attr_reader!(int, "y");

this(int ix, int iy) { _x=ix; _y=iy; }
}

で十分。
でも、普通に書いた方がいいと思うぞ。

630:デフォルトの名無しさん
07/11/04 00:27:39
ドキュメント生成用のコメントつけられなくなるしなー。

631:デフォルトの名無しさん
07/11/04 00:39:49
きもさを追求するなら、opAutoload導入して欲しい。

632:デフォルトの名無しさん
07/11/04 01:48:16
本からパクッた!あ。いや、参考にして、タートルグラフィック実装してみた。
アーカイブの中に結果画像入ってる。
これぞ、コンピュータグラフィックってかんじで面白いね。

windows専用です。
URLリンク(www9.uploader.jp)

633:デフォルトの名無しさん
07/11/04 01:58:08
ゲッタとか雪駄とかって他のC系列では自分で生成できないからすげーあこがれてたんだぞ。
それをこんなむげに扱いよって。ぷんぷん。






え?ビーム??でないよそんなの。

634:デフォルトの名無しさん
07/11/04 02:10:27
ですよねー

635:デフォルトの名無しさん
07/11/04 04:02:59
プロパティの += とか -= とかなんで許可してないんかね。

array.length += 2;

ってやったら

array.length = array.length + 2;

って変換してくれりゃ良いだけなのに。
演算子オーバーロードとの競合を防ぐため?


636:デフォルトの名無しさん
07/11/04 04:14:42
将来的にはできるようになる予定とかどっか書いてなかったっけ。

637:デフォルトの名無しさん
07/11/04 04:31:27
D言語は糞だから期待しちゃだめ

638:デフォルトの名無しさん
07/11/04 04:52:39
ruby式だー

639:デフォルトの名無しさん
07/11/04 05:01:50
>>635-636
もう忘れてるんじゃないのw

640:デフォルトの名無しさん
07/11/04 06:49:24
をるたんももしかしたら
各自array.length = array.length + 2;ってかけばいいのに
とかおもってたりは・・・ないか

641:デフォルトの名無しさん
07/11/04 11:09:39
をるたんも実はarray.length += 2;って書けたらいいなあ、とか思ってる。

642:デフォルトの名無しさん
07/11/04 11:27:39
でも現実的に割に合わない面倒なことだなあ、とも思ってる

643:デフォルトの名無しさん
07/11/04 12:39:51
そんなしょうもないもの実装してる暇があったらマクロ実装してやんよ!
と思ってるに違いない。

644:デフォルトの名無しさん
07/11/04 12:44:59
ほんとだな?

645:デフォルトの名無しさん
07/11/04 16:16:42
くろーじゃー!

646:デフォルトの名無しさん
07/11/04 17:35:53
でも対称性の点から見てもあってもいい機能だよな常識的に考えててててて

647:デフォルトの名無しさん
07/11/04 19:14:06
D2 の構造体/クラスの配列で sort しても opCmp 呼ばれなくなってね?

648:デフォルトの名無しさん
07/11/04 22:12:35
どうも吐くアセンブラがバギーな感じ

649:デフォルトの名無しさん
07/11/04 22:31:11
D2おもしろんだけど、コンパイラがバグだらけで使い物にならんな…

650:デフォルトの名無しさん
07/11/04 22:41:14
URLリンク(www.sun-inet.or.jp)
このVSつかうデバッグできてる人いますか?
VS2005でやってみたけど、どうもうまくいかないです


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