- 1 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 20:16:30 ]
- プログラミング言語 D (D Programming Language) について語るスレッドです。
過去スレは >>2 ■本家 ttp://www.digitalmars.com/d/ ttp://www.kmonos.net/alang/d/ (和訳) ■コンパイラ ttp://www.digitalmars.com/d/dcompiler.html (DMD, 本家) ttp://dgcc.sourceforge.net/ (GDC, gccフロントエンド) ttp://gdcmac.sourceforge.net/ (GDCのmac用バイナリ) ■参考URL ttp://f17.aaa.livedoor.jp/~labamba/ (D言語研究) ttp://dsource.org/ (dsource) ttp://www.sun-inet.or.jp/~yaneurao/dlang/ ttp://wisdom.sakura.ne.jp/programming/d/
- 384 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 16:31:01 ]
- にゃる そういう意味なのか
システムがぬっ壊れたりするのかとおもた
- 385 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 18:59:27 ]
- 俺が分類したケース
回復不能 ・root/admin権限が必要なのになかった 回復可能 ・ファイルが見つからなかったが、指定しなおせばよい >>384 最終的にはシステムがぬっ壊れない限りは回復の手段を用意することはできるかと思う
- 386 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 19:01:42 ]
- 処理続行できるような想定範囲内のエラーで例外投げるな。例外は例外的な事態に使用すべき。
……みたいなの(やや極端な言い方だけども)を信じてたんで微妙に慣れない。 多分戻り値でエラー処理みたいな文化が嫌なんだろうけど、効率なんかも考えると回復可能なエラーまで例外ってどうなの? って気がしてしまう。 上みたいな(勝手な)文化を持ってたせいかExceptionに回復可能な、みたいなニュアンスも感じないし。 実際のところDでなんか書いてるときにみんなErrorとException使い分けてるの?
- 387 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 19:10:19 ]
- 俺の考えでは、プログラムの動作自体が危うい場合がError。
それ以外は全部Exception。 たとえば、ファイルをコピーするプログラム、copyを作るときに、 パラメータで指定されたファイルが見つからない場合は、Exception。
- 388 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 19:14:12 ]
- 基本的にException。
拾いたければ拾えばいいじゃん(たいていは回復可能だから) というスタンス。 行列演算で要素数が不適切なときもException(動的に要素数を決められる場合)。 ただし契約違反は実装者が間違ってるからassertするときはErrorが多い。
- 389 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 19:18:20 ]
- >>386
引数、返り値が適切なほうがいいというのはあるかもしれない。 計画の中にpureという仕様が入ってるが、 ああいうのをまじめにやるならエラー処理のために引数や返り値がつぶされるのは好ましくない。
- 390 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 19:21:41 ]
- >>386
> 処理続行できるような想定範囲内のエラーで例外投げるな。例外は例外的な事態に使用すべき。 これは誰の教えなのかkwsk
- 391 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 20:44:55 ]
- 人生のExceptionが発生しました
- 392 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 20:58:52 ]
- >>391
回復可能なのか、よかったな
- 393 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 21:06:09 ]
- 回復には神権限が必要です
- 394 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 21:15:29 ]
- 引きこもりでごめんなさい→Exception
生まれてきてごめんなさい→Error ってことか
- 395 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 21:33:52 ]
- お願い届いて!!私のException!!!
引きこもりでごめんなさい。
- 396 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 21:49:23 ]
- そろそろ人生のErrorが発生しそうで不安になってきた。
- 397 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 22:31:15 ]
- Javaみたく「こいつはこーいう例外投げるかもしれんからちゃんと対処しろよ!」ってコンパイラに言われないしなぁ。
意識してErrorを自前で投げたことはないや。 assert違反とか、デバッグモードで埋め込まれる配列境界チェックなんかはErrorか? そんくらい。 あれ? ErrorてExceptionの派生クラスだったのか? つまり「Error is a Exception」「回復不可能は回復可能の一種」 ・・あれ? おかしくないですかカテジナさん!
- 398 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 22:31:22 ]
- ファイル読み込みルーチンで、開くべきファイルがロックされてたり
ファイルがなかったりしたら、再試行とか考えてException、 そもそもファイルシステムや開くファイルの種類が非対応だったりして なにをどうしようがファイル読み込みは無理、ってなのはError、とか。 ただ、それらを受け取るルーチンでは、たとえば別の読み込みルーチンを 使うとかで、(より大きな枠組みから考えると)復帰可能だったりするかもしれない。 という感じで、回復可能か否かが処理の段階によって変わることに注意して組むと Errorの使い出もあるんじゃなかろうか。
- 399 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 22:53:29 ]
- Errorがでたのに何事もなくプログラムが動作し続けるってのは、ちょっとおかしいと思う。
それだと正常系に復帰してるじゃん、と。 OutOfMemoryぐらい致命的でないとErrorというのとはちょっと違うと思う。
- 400 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 23:08:48 ]
- >>399
回復不可能は回復可能がグレードアップ! という考えで
- 401 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 23:11:16 ]
- つまり、ErrorをExceptionで捕えることができるのはおかしい、と。
Exceptionを派生したErrorってのがおかしいんだよな。 Errorを派生したExceptionとか、ErrorとExceptionはそれぞれ何からも派生してないってのがいいような気がするね。 Tangoみたいに安易に消しちゃうのはどうかとも思うが。
- 402 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 23:38:26 ]
- >>399
頑張ってメモリ解放して状況解消する頑健なプログラムだってありうるべ メモリ食いつぶしかねないプログラムなら特に。 どんなエラーも何らかの処理がなされる、というのがDの例外機構なわけで、 399的な「絶対に正常系に復帰しない」発想だと、例外もクソもなく強制終了 するしかない状況じゃないとErrorを出さない、という意味のない話になるべ 何が正常動作かは処理の段階によって変わるんじゃね
- 403 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 23:40:29 ]
- その処理の段階ってちゃんと定義されてるのかな?
今のままだとExceptionとErrorがごっちゃになりそうな悪寒
- 404 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 00:23:53 ]
- むしろError使ったことないし
必要な場面に出くわしたことがないし これからも使わない気がしている
- 405 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 00:27:56 ]
- そういうのを定義するのが設計だべ
まあそんなまじめなプログラム俺も書いたことないけど
- 406 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 07:11:32 ]
- 2.006にしてみたらinvariant string関係の変更がtonほど出てきた
- 407 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 07:59:27 ]
- invariantのおかげでWin32API使うとき今まで以上にキャスト式書く機会が増えた。それ以外で特に気になるところはなし。
今は2.006でphobosが強化されたという話を聞いてわくわくしてるところ。
- 408 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 08:55:20 ]
- めぐりめぐって
invariantがなくなって、Cと同じになったりしてな・・・
- 410 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 09:41:42 ]
- 散々こねくり回して出た結論がそれならば、それもまたよし。
- 411 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 09:58:43 ]
- idupの個人的まとめ
・idupは本当にコピーを生成する ・idupしたコピーはGCに回収される idupされた文字列を参照するようなstring(std.string中の関数の返り値など)をいつまでも受け渡し続けると、 いつまでたっても回収されずに残り続けることになるかもしれない。 巨大な文字列から1行だけ取り出すとかした場合はidupして、 巨大なやつをGCに回収してもらいやすくするのは考えられる。 idupは比較的気軽に使えるかなと思う。 長期的に生存する可能性があるプログラムについては知らね
- 412 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 10:25:51 ]
- ArrayBoundsErrorは回復不可能なんですか?
- 413 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 10:30:57 ]
- 配列の範囲外に対する不正なアクセスだからエラーなんでは?
そもそもDは配列のサイズがあらかじめ調べられるので、範囲外に対するアクセスは事前に防げるはず。
- 414 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 10:55:20 ]
- もしかして関数呼び出すたびにtry-catch書くのが普通なのか
- 416 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 12:12:43 ]
- default: を書き忘れて例外出されたときはかなりビビッた。
何でswitchが例外投げるの!?って。
- 417 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 12:14:23 ]
- >>415
俺は!の話だけどさ、基本的に例外投げないな。だから、ほとんどtry構文使わない。
- 418 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 12:54:01 ]
- D言語で作られたアプリで参考になるのねーの?
- 419 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 13:10:04 ]
- >>415
それは普通、ではなく理想
- 420 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 13:45:58 ]
- 回復可能なもので例外投げるのは速度が・・・
- 421 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 13:52:39 ]
- 通常の実行ロジック部分のパフォーマンスが重要
例外時に速度重視?
- 422 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 14:13:54 ]
- ああ、なるほど。勘違いしてた
- 423 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 15:10:24 ]
- >>419
Cで関数呼び出しごとにエラーコードをチェックしてエラーコード返して・・・ってやるよりも 遥かにぐちゃぐちゃなコードが出来上がるだけな気がするのだけど。 それを無くして「正常な実行パス」だけを簡潔に書くための構造化例外やん?
- 424 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 16:07:23 ]
- >>423
分かっててもときどき変なことやっちゃうんだよね 特にC++とかJavaでね try〜catchはmainだけで充分なのかも知れない
- 425 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 16:35:20 ]
- >>423
すべての例外はどこかの階層で拾って、プログラムが適切に復旧するようにするのが理想。 別に、一関数ごとにtryで囲む必要はない。
- 426 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 18:13:59 ]
- in, body, outをはじめて使ってみたお^^
しかしenum/invariant structのような型で制限してしたほうが書くのは面倒だけど使えるお-_-;
- 427 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 20:35:06 ]
- >>426
でもoutとかで「戻り値にnullは絶対返さないよ!」とかassertしてあると使うのもコード読むのも安心するお^^ でも型だけで事足りるならちゃんと型設計してるってことだし偉いお^^
- 428 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 20:59:06 ]
- in/out/bodyってコード読むとき邪魔っぽくない?
- 429 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 21:05:16 ]
- ちょっとインデントに悩んだことはあった
- 430 名前:デフォルトの名無しさん [2007/10/25(木) 21:23:49 ]
- void hoge() in { assert(文); } body
{ // 処理 } みたいに書いたり・・・? in と out を関数内部に書きたかったりする・・・ void hoge() { in{ assert(文); } out{ assert(文); } } あ、でもこれなら普通の scope 文でいいのか・・・?
- 431 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 21:34:33 ]
- 公式の書き方は
ttp://www.digitalmars.com/d/dbc.html 中括弧を改行しないでくっつける派の俺としてはちょっと冗長に見える。 けどまあこれくらい改行するのもぱっと見わかりやすいのかな。
- 432 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 22:58:35 ]
- 中かっこを開業しないでくっつける派の俺としても悩んだけど
void func() in{ assert(...); } out{ assert(...) } body{ ... } って感じにして妥協してみてる… この辺もコーディング規則で一応の指標があるといいのだけど…(宗教戦争勃発しそうな気もするけど)
- 433 名前:431 mailto:sage [2007/10/25(木) 23:12:09 ]
- >>432
偉いなw 俺なんか void func() in { } out { } body { } さえ正直捨てきれない。
- 434 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 23:18:23 ]
- 自分はオールマンスタイルが気に入ってる
- 435 名前:430 [2007/10/25(木) 23:41:01 ]
- 自分もオールマンスタイル派なんだけど、公式の書き方は見難いと
感じてしまう。慣れの問題なのかもだけど。
- 436 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 01:14:24 ]
- if (test) {
... } else { ... } これってやめたほうがいいのかな
- 437 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 01:33:44 ]
- begin
rescue ensure end
- 438 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 01:42:40 ]
- オライリーのPL/SQL本だかどっかで
void func(){ hoge(); } こうあるべきだと力説されて妙に同意してしまって以来、 どうしてもfunc()と"{"が同じ行にいられないと落ち着かなくて困る。 >>430は俺にとっても抗えぬ誘惑だ・・・ 太古より語り継がれる伝説の「IDE」がいつか完成して普及すれば、 inとoutは普段は折り畳まれて「contractあるよー」的マークに収まり、 そこにマウスオーバーするとin/outのコードがポップアップで表示され・・・とか実装されるに違いない。 時を待つのじゃ・・・さすれば泣く日は来ぬ・・・
- 439 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 02:13:15 ]
- イデ・・・オン・・・
- 440 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 09:13:09 ]
- 定数を引数とする三角関数のコンパイル時計算をオフにしたいときがあるわけだが、どうしたもんかな
ちょいと考えてみる
- 441 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 10:12:13 ]
- >440
なにゆえ?
- 442 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 12:07:22 ]
- >>436
俺もそのスタイルで書いてるよ。 ifブロックとelseブロックがきれいに分離してるのが気持ちいいよね。
- 443 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 15:26:54 ]
- >>441
コンパイル時に決定できるループでsinが山ほどあったときにコンパイルが遅くなっていたんですが、今見たら大丈夫になっていました。 勘違いかもしれませんが、再発して条件が再現できそうならまた報告します。
- 444 名前:デフォルトの名無しさん mailto:sage 是非職場で開くように [2007/10/26(金) 17:38:52 ]
- >>372
camelがどうのという話題で俺はこれを思い出す。 images.google.co.jp/images?hl=ja&lr=&oe=UTF-8&um=1&q=camel%20toe&ie=UTF-8&sa=N
- 445 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 17:44:36 ]
- グロ注意
- 446 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 19:33:15 ]
- >>442
IDEでコメントつける場合にずれるのが困りもの // ほげほげが見付からなかった場合はエラー else { put_error_log("hogehoge not found."); }
- 447 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 23:04:44 ]
- >>442
ですよね! つーかこの書き方どこで覚えたか忘れたんだけど。 あと、コメント書くとき if (test) { // ほげほげなら ... } ってなってるけどこれもやめたほうがいいかなwww 関数書くときは /// ほげほげする void func() { ... } こうなるからびみょうに統一されてなくね??とか思ってしまう
- 448 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 23:29:12 ]
- キミの好きにしたらええ
- 449 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 23:31:14 ]
- そこらへんのコーディング規則とか字下げスタイルなんかをk.inabaタンに定義してほしいw
- 450 名前:442 mailto:sage [2007/10/26(金) 23:42:52 ]
- ifのコメントは
//ほげほげ if (test) { ... } //はげはげ else if(test2){ ... } //その他 else{ ... } ってしてる。 関数は ///ほげほげする void func() { ... }
- 451 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 23:59:19 ]
- コメントは書かない
- 452 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:18:16 ]
- >>451
ちょwww
- 453 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:18:53 ]
- ソースがドキュメント
- 454 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:23:05 ]
- 俺は、関数の説明は書くけど、if文にはコメントつけないな。
大抵は条件式見れば何してるか分かるし、 ぱっとみて何を比較してるかわからないほど複雑になったら関数化する。 仕事なら仕方ないから規則通りにどんな馬鹿らしいコメントでも書くけど。
- 455 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:25:00 ]
- 極力コメントつけない方向で行ってみようと思う
- 456 名前:デフォルトの名無しさん [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:30:50 ]
- >>456
>>176-177
- 458 名前:デフォルトの名無しさん [2007/10/27(土) 00:33:26 ]
- >>457
バグっぽいのか。さんくす。
- 459 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:34:20 ]
- いつものことだが誰か報告したのか?
- 460 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:00:53 ]
- 最近D言語ってのを知ったんだが
今のとこ、これ!っていうIDEはないのかな? Poseidon?C::B?Descent?
- 461 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:22:29 ]
- 伝説のIDEはDが完成されたときに現れます
- 462 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:51:47 ]
- 今度からその台詞使おう・・・
- 463 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:56:25 ]
- Dの言語仕様は永遠にβ版です!
- 464 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:02:54 ]
- ウォルタンが開発やめるまでは永遠に進化し続けるよ!
んでウォルタンが開発やめた後D言語の亜系が乱立することに… そして時代はbsDとreDhat系の戦いへ…
- 465 名前:デフォルトの名無しさん [2007/10/27(土) 02:40:12 ]
- D2.006 でコンパイルして
cmeerw.org/prog/owtools/ ↑のwlinkでリンクすると以下のコードが Error: Access Violation で止まっちゃうんだけど、どして? void main() { for(int i=0 ; i<5000 ; i++) { int[] x = new int[100]; } } ちなみに、変数 x を毎回deleteしてやるといける。
- 466 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:40:17 ]
- ソースファイルごとにDのバージョンの印つけといて、そのバージョンから任意のバージョンへの変換を行うものってあったらよさそうだな!
バージョンの印付いてるの前提だけど!
- 467 名前:176 mailto:sage [2007/10/27(土) 10:10:33 ]
- >>459
バグジラで検索したら2007年1月だったか2月に既にあがってたバグでした。 もう直す気無いと思われるw
- 468 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 12:54:43 ]
- >>467
そこのバグの修正は半年から一年後に 行われることがざらだそうです
- 469 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 16:07:33 ]
- >>465
それも前スレか前々スレかで見たな
- 470 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 19:09:31 ]
- >>461
IDEが発動するとき第6言語(D)は滅びるということか
- 471 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 21:35:16 ]
- C++0xスレでperlのQuantum::Superpositionsみたいなのの実装を見つけて
Dでも作ってみようかと思ったんだが、!= と == の区別ができない…
- 472 名前:465 [2007/10/28(日) 00:30:36 ]
- >>469
まじすか? その時は、だいたいどんな結論に落ちついたんすか? や、Viewerないもんで。。。ごめんねーいろんな人。
- 473 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 01:04:06 ]
- >>471
テラ量子力学wwwwwwwww と思ったらマジでそういうライブラリなのか・・・ 量子コンピュータの広がりの影響なのかな・・・
- 474 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 13:24:46 ]
- バージョンうpまだー?
- 475 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 21:46:53 ]
- Eclipse3.2.1ダウソしてDescentパッケ入れても全然反映されねーや…
なんでだろ
- 476 名前:デフォルトの名無しさん [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 22:09:13 ]
- Cygwin は使ってないけど、Windows + dmd1.022 + phobos で普通に動いてるけどねぇ。
Cygwin か dsss が何か悪さしてんじゃない?
- 478 名前:デフォルトの名無しさん [2007/10/29(月) 22:30:45 ]
- >>477
あ。たぶんdsssのような気がしてきました。 おそらくdsssは、 import文を見てコンパイルするファイルを特定していってるんだけど、 そのときにstatic ifをうまく解析できてないのかもしれません。 [わなD]に 「DSSSは、static ifで条件importしている依存関係の解析が 甘くて時々不便だったりするので…」 という記述があったので、これのことなのかも。
- 479 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 22:41:27 ]
- Derelict は dmd 2.0 だとビルドできないのか?
- 480 名前:デフォルトの名無しさん [2007/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[] たぶん文字列をキャストすりゃいいんだろうけど、 全部キャストするのはヤだなー。 www.dsource.org/forums/viewtopic.php?t=2903&sid=c9657f55c4f87d635f986ebfc3bb79bf 検索してみたら上記のリンク先でそれっぽい話題が交わされているようですが、 私は英語が読めないのでよくわからんかったです。
- 481 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 23:04:18 ]
- k.inabaさんがdsssはstatic if内でのimportの解析が甘い的なこと書いてた気がする
わなDかな
- 482 名前:デフォルトの名無しさん [2007/10/30(火) 00:45:01 ]
- dmd 2.0系での derelict のコンパイルとインストール、うまくいきました。
[わなD]D 2.x と D 1.x www.kmonos.net/alang/wnd/topics/d2-d1.ja.html 上記のページを参考にして、char[]をstringに、 dupをidupに修正してコンパイルしたらうまいくいきました。
- 483 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 01:43:53 ]
- おお
わなD更新されてるじゃまいか どっかで更新されたかどうか告知あったりしないのかな RSS配信とか
- 484 名前:デフォルトの名無しさん [2007/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の定義方法がよくないと思うのですが、 どうするとよいでしょうか?
|

|