[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 08/05 11:17 / Filesize : 219 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

D言語 Part15



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/

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の定義方法がよくないと思うのですが、
どうするとよいでしょうか?


485 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 03:42:21 ]
const Foo mFoo; なら変数mFoo自体がconstだけど、
const(Foo) mFoo; なら変数mFoo自体は書き換え可能なはずだよね。
メンバ変数のときだけ動作が違う、ってんだからバグじゃね?

487 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 05:49:36 ]
aliasした場合、今度はconst消えちゃってね?

489 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 11:03:50 ]
>>482
> 2007/10/30 :: RSSはじめました
ました



490 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 11:04:56 ]
間違えた>>483

491 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 11:57:38 ]
助かります

492 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 14:25:54 ]
わなDの"../表紙に戻る"って戻れないよね

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

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

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

496 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん [2007/10/30(火) 21:23:48 ]
>>484
>>486

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




500 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 23:06:21 ]
分かっちゃいるけど直ってない、という話なのね






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<219KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef