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でやってみたけど、どうもうまくいかないです
651:デフォルトの名無しさん
07/11/04 22:52:32
>>648
delegateまわりがとくに
closure関係だろうな
652:デフォルトの名無しさん
07/11/04 23:21:18
void main(){
A!(int) a;
a.f();
}
struct A(T){
T t;
A!(A!(int)) f(){
A!(A!(int)) a;
return a;
}
}
これってやっちゃいけないことなのかな。
エラーになる。
Aをコンテナとして、リストのリストと言う具合に、
入れ子にするのは良くあることだと思うのだけど。
653:デフォルトの名無しさん
07/11/04 23:46:58
>>652
A!(A!(int)) をtypedefしたりなんやらしてたらDMDが無限ループに入っちまった。
怖い怖い
654:デフォルトの名無しさん
07/11/05 00:05:24
>>652
普通に無限ループしないか?
テンプレートをインスタンス化すると、その内部のテンプレートがインスタンス化され、
さらにその内部のテンプレートがインスタンス化され、、、
655:デフォルトの名無しさん
07/11/05 00:09:45
>>647
2.003と2.007の動作は同じよう。変化なかったよ。
1.023と2.007の動作はぜんぜん違った・・・
要素3つの配列をソートするだけの処理で・・・
1.023は、配列初期化時にopCmpを20回、ソート時に3回呼び出してる。
2.007は、配列初期化時にopCmpを3回、ソート時には呼び出しなし。
2.007は降順で1.023は昇順という大きな違いが←既知事象?
656:デフォルトの名無しさん
07/11/05 01:11:38
gdcって1.020までしかないの?
だめじゃん
657:デフォルトの名無しさん
07/11/05 01:35:23
あった・・・
なんで最新のやつをでかでかと表示したりしないんだろ
658:デフォルトの名無しさん
07/11/05 01:39:02
>>654
最終的にはintで止まるはずだから、無限ループはしなさそうだけど
C++でやってみたら大丈夫だったし
659:デフォルトの名無しさん
07/11/05 02:06:12
え、Dって末尾再帰最適化してんの
660:デフォルトの名無しさん
07/11/05 02:46:11
なぜ突然「末尾再帰最適化」?
関係ないだろ
661:デフォルトの名無しさん
07/11/05 03:53:51
そういえばDって無限リスト書けんのかな
662:デフォルトの名無しさん
07/11/05 04:03:57
それっぽいものなら何とでもかけると思うが。
663:デフォルトの名無しさん
07/11/05 12:07:40
クロージャが来た記念ってことで、遅延リストを作って遊んでた俺。
でも、lines :: [char] -> [[char]]が書けなくてショボーン。
getContentsとか、zipWith使ってフィボナッチとかはできたお。
664:デフォルトの名無しさん
07/11/05 12:39:25
>>658
考えてみてもintで止まるということがよく分からんかった。
A!(int)はA!(A!(int))型戻り値の関数を持ち、
そのA!(A!(int))型はA!(A!(A!(int))))型戻り値の関数を持ち、…
となるように思える。(intから始まって、止まらない)
A!(int)の実体化中にA!(A!(int))を実体化しようとすると、
無限リストよろしく永遠に型の実体化が終了しないんじゃなかろうか。
で、A!(A!(int))の実体化のタイミングをA!(int)の定義後にしようと思って
struct A(T){
T t;
A!(TA) f(TA=A!(T))(){
A!(TA) a;
return a;
}
}
としてみたけど、それでもコンパイラ様は再帰展開だとおっしゃる。
で、小手先の変更として f(TA=A!(T))() を f(TA=typeof(this)) と変えてみたら
dmdがsemantic3でオチタ\(^o^)/
665:デフォルトの名無しさん
07/11/05 13:19:30
くそー2.007おもしろそうなんだが、前のプログラムが動かん・・・
今まで追い続けたんだけど、今回は2.006にもどすよ。。。
>>663
面白そうな雰囲気
まったくわからんおいらに説明おねがいします
666:デフォルトの名無しさん
07/11/05 13:41:58
>>664
よく見ようよ。
A!(A!(T))だと確かにとまらないけど、上のコードはA!(A!(int))。
どう見ても有限の展開しかしない。
単に動かないのはdmdのバグでしょ。
667:デフォルトの名無しさん
07/11/05 13:46:10
class List(T) {
static List!(List!(T)) listOfList() {
return null;
}
}
alias List!(int) t;
668:デフォルトの名無しさん
07/11/05 13:59:06
>>666
なるほど、A!(A!(int)).fの戻り値型はA!(A!(int))そのものになるのね。
669:デフォルトの名無しさん
07/11/05 15:35:01
単純にA!(A!(int))を展開しようとしたらまたA!(A!(int))が展開されて・・・という話ではないの?
670:デフォルトの名無しさん
07/11/05 15:55:09
同じテンプレート引数では一回しか実体化されないはず。
671:デフォルトの名無しさん
07/11/05 16:11:39
あーそうだった
俺ショボスwww
672:デフォルトの名無しさん
07/11/05 16:47:13
実装しだいでは、A!(A!(T))でも大丈夫だと思う。
なんせ、C++ではこれが正常に動くのだから。
C++でできることはDでもできてほしい。
using namespace std;
template<class T> struct A{
T t;
A<A<T>> f(){
A<A<T>> a;
a.t.t = 2;
return a;
}
};
int main(){
A<int> a;
A<A<int>> b = a.f();
cout << b.t.t << endl;
return 0;
}
673:デフォルトの名無しさん
07/11/05 18:04:20
久々にスレの勢いを見てみたら、
この板ではC/C++, Javaについで3番手だということに気づいた。
PerlやJavaScriptやPHPはここではない場所でやってそうだが、
それでもずいぶん上に来たものだ。
674:663
07/11/05 18:24:56
>>665
Haskellに標準搭載されてる遅延リストを、Dでどれだけ実現できるか、という試み。
実行コストが高いから実用性は無くて、お遊びでしかないけど。
URLリンク(www9.uploader.jp)
ここに上げたから、詳しくはこれを見てみて。
linesとgetContentsとzipWithは、Haskellにある関数。
linesが書けないのは>>652がエラーになるせい。
675:デフォルトの名無しさん
07/11/05 18:31:51
>>673
ウォルたんから新ネタがどんどん届くからな
間違いなく勢いはある
676:デフォルトの名無しさん
07/11/05 18:47:32
クロージャが入ってからの勢いがものすごいだけで、普段はそんなにすごくないんじゃないかな。
677:デフォルトの名無しさん
07/11/05 19:01:11
C++インターフェースのときもすごかったよね。
>>773
をををっありがとうございます
拝見します
678:デフォルトの名無しさん
07/11/05 19:04:44
replace( D言語Part15[677], `>>773`, `>>674`);
//ごめんなさい
679:デフォルトの名無しさん
07/11/05 19:21:49
ぬるぽ
680:デフォルトの名無しさん
07/11/05 20:04:12
俺はマクロくるまで冬眠
681:デフォルトの名無しさん
07/11/05 21:04:15
そう言って冬眠したのはもう三人くらいいるようなw
682:デフォルトの名無しさん
07/11/05 21:10:47
俺の理解度は置いといて!他の人のコード読むと楽しいな!!
なんかね、久しぶりに心から「へぇ~」っていっちゃった。
やっぱ、ネットはこうでないと。
そうそう、俺タートルとかやってた奴ね。
683:682
07/11/05 21:13:27
混乱避けるつもりが紛らわしく。。。
俺-> >>682だけね。
684:デフォルトの名無しさん
07/11/05 21:22:04
>>682はもうちょっと落ち着いてもいいと思う
やけに楽しそうだw
685:デフォルトの名無しさん
07/11/05 21:44:05
getenv("CONTENT-LENGTH").toInt()
とかはちょっとニヤリとしてしまう
686:デフォルトの名無しさん
07/11/05 21:51:41
俺は予想外にもクロージャ来たから冬眠からさめちまった
687:デフォルトの名無しさん
07/11/05 22:23:48
CGIっつーかAjaxっつーかweb開発用のフレームワークってありますか?
688:デフォルトの名無しさん
07/11/05 22:32:07
なんか、あったような気もするけど、古いかもなあ。
689:デフォルトの名無しさん
07/11/05 23:01:15
自己を動的に派生クラスに書き換えるモデルを考えて、
以下のようなコードを組んでみたのですが、失敗しました。
そもそも自己を動的に派生クラスに書き直せるのかちょっと疑問になったのですが、
こういうことは可能なのでしょうか。
class Hoge {
this() {}
void rewrite() {
this = new Huga;
}
}
class Huga : Hoge {}
void main(){
auto a = new Hoge;
a.rewrite;
writefln(a); // -> Hoge
}
690:デフォルトの名無しさん
07/11/05 23:02:37
>>687
sakuraiさんがずっと前に作ってなかったっけ
691:デフォルトの名無しさん
07/11/05 23:12:28
>>689
変数aのアドレスなり参照なりがわからないと無理でしょ。
メモリのインスタンスが存在する部分を書き換えるわけにはいかないから、
変数aが指しているものを書き換えるしかない。
692:デフォルトの名無しさん
07/11/05 23:17:57
仮想メソッドを直接書きかえ・・・いやなんでもないです
693:デフォルトの名無しさん
07/11/05 23:18:58
できてしまった
import std.stdio;
class A{
void change(ref A a){
a = new B;
}
}
class B : A {}
void main(){
auto x = new A;
writefln(x); // a.A
x.change(x); // a.B
writefln(x);
}
694:デフォルトの名無しさん
07/11/05 23:21:26
コメント書くところ間違えた
あとインデント見やすく
import std.stdio;
class A{
void change(ref A a){
a = new B;
}
}
class B : A {}
void main(){
auto x = new A;
writefln(x); // a.A
x.change(x);
writefln(x); // a.B
}
695:デフォルトの名無しさん
07/11/05 23:26:15
this ってメソッド呼ばれる時にインスタンスのポインタを値渡しされたただの隠しパラメータだからな。
だから、this をいくら書き換えても呼び出し元の変数(ポインタの値)は変わらないまま。
this が元から lvalue にならなきゃ混乱しないのに。
696:デフォルトの名無しさん
07/11/05 23:31:15
>>692
求めているものは仮想メソッドの動的書き換えで、
かつオーバーロードできればいいなあという感じ(なのでデリゲート不可)で、
それが理想なんですが、さてどうしたものかと。
>>691 >695
なるほど。。少し分かってきました。
この辺を突破できるトリックをぼちぼち探してみます。
697:デフォルトの名無しさん
07/11/06 00:10:16
>>694
ひとまずこれベースで行ってみます。
ありがとうございました。
698:デフォルトの名無しさん
07/11/06 01:03:34
っステートパターン
って言ってみる
699:デフォルトの名無しさん
07/11/06 01:37:40
D言語を使うからにはもっとトリッキーな手法をとるべきではなかろうか。
700:デフォルトの名無しさん
07/11/06 01:57:34
D言語は糞
701:デフォルトの名無しさん
07/11/06 02:31:15
>>697
Has-a使ってやってみるのは?
URLリンク(www9.uploader.jp)
なんでこの線路 .d がアップロードできんのん?
702:デフォルトの名無しさん
07/11/06 03:39:17
なんか8スレ目ぶりくらいにアンチを見た。
703:デフォルトの名無しさん
07/11/06 04:43:04
dupと[]って書き方以外になんか違うところあるの?
704:デフォルトの名無しさん
07/11/06 08:01:51
>>703
dupは複製される。[]はされない。
int[] x = [1,2,3];
int[] y = x[];
y[0]=999;
writefln(x); // 999 2 3 (y=x.dupなら1 2 3)
705:デフォルトの名無しさん
07/11/06 08:35:14
クロージャがくると、coroutineがもうすぐできる
という夢をみた
706:デフォルトの名無しさん
07/11/06 13:49:41
>>703
[]は配列全体のスライス。
dupはミュータブルな複製。
したがって、型が違う場合がある。
static assert(is(typeof("foo") == invariant(char)[3]));
static assert(is(typeof("foo"[]) == invariant(char)[]));
static assert(is(typeof("foo".dup) == char[]));
707:デフォルトの名無しさん
07/11/06 14:57:39
ここまで試してみた結果のまとめ
・自己インスタンス書き換え
外部の自身を指すポインタのアドレスを渡す必要がある=複数あった場合は厄介
newでコンストラクタを呼び出すと厄介
・delegateスイッチング+可変データアダプタ
オーバーロードできない
プロパティ風呼び出しができない
・Has-a
オーバーヘッドはあるが、無視できることが多いかも
ExchangerとInterfaceで2回定義を書くのがやや冗長
・分岐
オーバーヘッドが大きい
・Factory
動的な変更が内部的には行えない
自身を指すポインタが複数あると厄介
自分の目的だとHas-aかデリゲートスイッチングの2択になりそうですが、
もう少し煮詰めてみて面白そうなら報告いたします。
708:デフォルトの名無しさん
07/11/06 15:37:02
アップローダのアップ形式は自分ではいじれないっぽい~。
レンタルなんですけど、ちょっと不便だなぁ。
>>684
お察しのとおり、たのしくて!
えぇーっと、多少自重します~。
709:デフォルトの名無しさん
07/11/06 15:39:36
d monooki とかいうDのソースコードアップロードできる場所が
あったけど、いま使えるっけ?
710:デフォルトの名無しさん
07/11/06 18:12:19
>>707
別のインスタンスにすり替えるんじゃなくて、インスタンス自体を書き換えてみた
import std.gc, std.stdio;
class A{
void change(){ // A to B
if(B.sizeof > capacity(cast(void*)this)){
if(extend(cast(void*)this, B.sizeof-A.sizeof, B.sizeof-A.sizeof)){
throw new Exception("std.gc.extend failed");
}
}
size_t ptrsize = (void*).sizeof;
with(B.classinfo){
(cast(byte*)this)[0..init.length]
= init[0..init.length];
}
}
}
class B:A{
void change(){ // B to A
...省略...
}
}
void main(){
A a = new A;
a.change();
writefln(a); //B
a.change();
writefln(a); //A
}
711:デフォルトの名無しさん
07/11/06 19:31:30
きんもー☆
712:デフォルトの名無しさん
07/11/06 19:43:00
強烈過ぎて吹いたw
ちょっと使える場面が限定されそうなので、しっかりメモしてそれにとどめておきます
しかしgcがありながらこれができてしまうDの変態さには感心する
713:デフォルトの名無しさん
07/11/06 19:44:55
gcがあるからこそできるんじゃね?
714:デフォルトの名無しさん
07/11/06 23:46:58
version条件で、#ifndefとか#if !defined()とか#if defined() && defined() #elseに相当することってできましたっけ?
なんとなくstatic ifに書き換えてますが、無駄を感じるもので。
715:デフォルトの名無しさん
07/11/06 23:51:29
どのへんが無駄?
716:デフォルトの名無しさん
07/11/06 23:56:53
static if以外にはversionとdebugくらいしかないと思う
他にあったっけ?
717:デフォルトの名無しさん
07/11/07 00:06:16
version(...){...}else{...}はできたような希ガス
718:デフォルトの名無しさん
07/11/07 00:47:35
#if defined(FOO) && !defined(BAR)
...
#else
...
#endif
これが書きづらい。
static ifは定義済みでないと扱えないので、これをすっきり表現するには、
versionで定義されてるかどうかを真偽値とする定数を作って、……とやってるんだが、
このへんがどうにかならんもんかなあと。
719:デフォルトの名無しさん
07/11/07 00:59:10
#define FOO
に変わるものがなあああいい
720:デフォルトの名無しさん
07/11/07 01:07:02
コマンドラインで指定するのをあきらめて、const使う案しか思い浮かばない
const FOO = true;
static if(FOO){
const HOGE = true;
}
else{
const HOGE = false;
}
721:デフォルトの名無しさん
07/11/07 01:07:08
>>719
version=FOO;
722:デフォルトの名無しさん
07/11/07 01:44:30
>>548について本家で聞いてみたら、
「バグだとは認識されてるけど、『直す手間の割に実がない』とウォルターが言ってた」
とのこと。
まあ回避できるし特にいいかなと。
723:デフォルトの名無しさん
07/11/07 02:07:56
>>718
mixin宣言で「hoge1&&!hoge2ならversion=hoge3」とかやろうとしてみたけど
mixin宣言で生成したversion文より先に素のversion文が解決されてしまうっぽくて、
mixin("version = hoge3;");
version(hoge3){
int x = 5;
}
と書いても
version hoge3 defined after use
と言われてしまう。
mixinがversionの評価の前に通れば、もうちょっとましにはなりそう。
(そうなるよりは、version文が進化する方がありえそうな話だけど)
version(foo)version(bar){ // foo && bar
}else{ // foo && !bar
}else version(bar){ // !foo && bar
}else{ // !foo && !bar
}
これは書きづらい上に読みづらいな。
現状では、718の言う通りversion+static ifというのが一番マシなやりかただろね。
724:デフォルトの名無しさん
07/11/07 11:52:12
>>722 乙っす
なるほど
>『直す手間の割に実がない』
これがすべてだなw
725:デフォルトの名無しさん
07/11/07 12:46:29
しかしそんなんじゃいつまで経っても普及しない希ガス
726:デフォルトの名無しさん
07/11/07 12:51:30
そもそもウォルターには普及させる気がない気がしてる…
727:デフォルトの名無しさん
07/11/07 15:55:55
でもさりげなく次の更新に修正されてるという・・・
728:デフォルトの名無しさん
07/11/07 16:06:18
>>727
それはウォルターには普及させる気がないっていう不具合ですか
729:デフォルトの名無しさん
07/11/07 16:34:37
それは仕様です
730:デフォルトの名無しさん
07/11/07 20:15:04
ウォルタンのバグはいつ直るの?
731:デフォルトの名無しさん
07/11/07 20:24:46
>>494
void rebuild(E,T)(ref T[E] array) {
T[E] result;
foreach(i, k; array.keys)
result[k] = array.values[i];
array = result;
}
テレビと同じで叩けば動くらしい。
732:デフォルトの名無しさん
07/11/07 20:24:56
をるたんはをるたんの唯一の実装にして仕様そのものなので、直すべきバグは存在しません。
733:デフォルトの名無しさん
07/11/07 21:08:44
flectioned の v2.007 対応のってない?
734:デフォルトの名無しさん
07/11/07 21:58:03
private 定義したクラスってどういう意味になるの?普通にC++でいうstaticかと思ったら違うみたいだし。
逆にC++でいうstatic(ファイル内スコープ)なクラスはどうやったらできる?
---- b.d ----
module b;
private class B {}
private void hoge() {}
---- a.d ----
module a;
import b;
void main()
{
B b = new B; // OK
hoge(); // Error: function b.hoge is not accessible from a
}
735:デフォルトの名無しさん
07/11/07 22:05:43
仕様によればモジュールスコープのprivateは、
Cのstaticと同じ意味になるはず。
B b = new B; もエラーにならないといけないはず。
736:デフォルトの名無しさん
07/11/07 22:30:14
てことはバグかぁ。
サンクス。
まぁ、それほど困らないバグだしほっとくか・・・
737:デフォルトの名無しさん
07/11/07 22:32:53
>>733
flectionedをD2.007でコンパイルを通して使ってみたけど、
ちゃんと動いてないっぽい。
main関数直下でArrayBoundsError例外を発生させたら、
スタック表示はされたけど、関数名がでない。
(std.array.ArrayBoundsError) ArrayBoundsError main(80)
0x0012FD34 0x004046B3 <?>
0x0012FD4C 0x00404651 <?>
0x0012FDC4 0x004236E2 <?>
0x0012FF30 0x004023BC int main(char[][])
自前のクラスのメンバ関数でArrayBoundsError例外を発生させたら、
main関数が表示されてないし。
(std.asserterror.AssertError) AssertError Failure dbuffer.d(158)
0x0012FCDC 0x0040341F <?>
0x0012FCF4 0x004033BD <?>
0x00000043 0x0042244E <?>
ていうか、さっき初めて使ったので、なんか使い方を間違ってるのかも。
とりあえず[わなD]を見ながら使ってみたよ。
URLリンク(www.kmonos.net)
flectionedがちゃんと使えるようになると便利いいんだけどな。
それにしても[わなD]はいつも助かるぜー。ありがたい。
738:デフォルトの名無しさん
07/11/08 00:55:02
>>737
うp
739:デフォルトの名無しさん
07/11/08 02:04:41
DDocについて、dittoの挙動が
///Params:x=aaa
void func(int x){}
///ditto
void func(double x){}
↓
void func (int x);
void func (double x);
Params:
int x aaa
ってかんじに、xの型がintってあたりが納得いかないんだが…と地味に思った。
この場合どうしたらいい感じに出力できるのかな?
CandyDocとか使うと結構きれいに出てくれて素敵なんだけど…こういう細かいところがなぁ…
740:733
07/11/08 02:34:43
自分でポートしてみた。
(std.array.ArrayBoundsError) ArrayBoundsError bug(25)
0xBFB35C74 0x08052158 extern(C) void _d_array_bounds(char[], uint)
0xBFB35C88 0x0804B389 void bug.__array
0xBFB35CA0 0x0804B2F6 void bug.foo()
0xBFB35CB8 0x0804B31E int main(char[][])
なんかちがうね?なんでだろ?>>737
当方 linux
741:デフォルトの名無しさん
07/11/08 13:08:56
>>739
それもきっと>>722ってことなんだろうなぁ。
もう>>722の金言は「D言語の哲学」として>>1に張っとくといいんじゃね?
742:デフォルトの名無しさん
07/11/08 13:42:07
そんあこといわれたら全部>>722って言われちゃいます><
743:デフォルトの名無しさん
07/11/08 14:11:54
size_t l;
stream.read(l);
array.length = l;
これ地味に面倒じゃねwwww
array.length = stream.read!(size_t);
とかで簡単にかけたら便利そうだなあああああああ
744:デフォルトの名無しさん
07/11/08 15:40:26
動的配列なのにわざわざ先にサイズ指定しなくてもと思うけど・・・。
745:デフォルトの名無しさん
07/11/08 16:40:24
動的配列だから先にサイズを読み込むんじゃ…?
746:デフォルトの名無しさん
07/11/08 16:59:45
別に配列関係ないだろ。
747:デフォルトの名無しさん
07/11/08 17:08:31
ラムダ式まだー
748:デフォルトの名無しさん
07/11/08 17:09:28
>>743
をるたんにその便利さを説けば入れてくれるんじゃね?
749:デフォルトの名無しさん
07/11/08 17:24:18
>>743 自分で関数書いたらよくね?
750:デフォルトの名無しさん
07/11/08 17:29:47
配列以外にも拡張メソッド構文が採用されれば、できるな。
751:デフォルトの名無しさん
07/11/08 17:32:25
ブライト艦長としては、既にDの開発に使える人生のリソースを100%使っていて、
どこをイジるかってのは完全にリソースの振り分け、優先順位の問題なのだろうし、
もうしばらくは優先順位の極めて高いwktkなアイディアが常に溢れた状態だろうから、
よっぽどの相対的価値をアピールしない限り、振り向いてはくれないだろうね。
752:デフォルトの名無しさん
07/11/08 21:31:57
>>738
コンパイルが通るだけで動作確認ができてないですけど、
もしどこかに簡単にアップできる先があればアップしますよ。
>>740
おー、ご自分でポートされたんですね。
ちゃんと動いてるっぽくていいなー。
[わなD]を見ると、私のほうでちゃんとでてないのは、
-gオプションで再コンパイルしたphobos使ってないからかも。
ちなみにうちは、WindowsXP / dmd2.0007 / phobos / dsss で稼動させてます。
753:デフォルトの名無しさん
07/11/08 21:54:20
2.0007
ご、ごめん
754:デフォルトの名無しさん
07/11/08 22:57:23
ちなみに同じ問題で悩んだけど 1.x 系だと phobos コンパイル通らなかった・・・!
phobos のコンパイル通すのですら、をるたんにとって優先順位低そうでイヤン
755:デフォルトの名無しさん
07/11/09 00:14:05
D言語製のブラウザとかないわけ
756:デフォルトの名無しさん
07/11/09 00:15:40
ないわけ
>>753
気持ちわかるw
757:デフォルトの名無しさん
07/11/09 03:30:53
D言語製のブラウザとか必要もないよな・・・
758:デフォルトの名無しさん
07/11/09 03:44:52
参考になるサンプルはある程度必要だろ
759:デフォルトの名無しさん
07/11/09 06:32:26
アプリのサンプルというよりゲームとかなら作られてるみたいだな。
760:デフォルトの名無しさん
07/11/09 07:26:59
C/C++の遺産の再利用がまだしづらいのかな?
761:デフォルトの名無しさん
07/11/09 07:43:00
サンプルを作ってもちょっと経ったらコンパイルできなくなりそうな言語
762:デフォルトの名無しさん
07/11/09 09:33:56
そして、いつぞやの納品したやつ脂肪。。。w
763:デフォルトの名無しさん
07/11/09 18:19:13
CTFEや文字列mixinに対応したIDEまだ?
764:デフォルトの名無しさん
07/11/09 21:13:59
>>763
>>461
765:デフォルトの名無しさん
07/11/09 22:23:07
CTFEって何ぞ?
766:デフォルトの名無しさん
07/11/09 22:27:22
URLリンク(www.kmonos.net)
767:デフォルトの名無しさん
07/11/09 22:31:11
どんも。mixinならまだしも CTFE に対応はかなり厳しくない?
768:デフォルトの名無しさん
07/11/10 00:21:44
もうコンパイラがIDEになっちまえばいいのではないだろうか。
769:デフォルトの名無しさん
07/11/10 01:00:31
tango の tango.text.String と
tango.text.Text が機能的に一緒に見えるんだが、何なんだ、これ?
URLリンク(www.dsource.org)
URLリンク(www.dsource.org)
名前変わったけどそのまんま残してあるとかそんなの?
770:デフォルトの名無しさん
07/11/10 01:03:54
String は非推奨になってるよ。
何でStringからTextにしたんだろ…
StringはStringで別のものを提供するつもりなんだろうか…
あとText.toUtf8()がおかしい。バグっぽい。Object.toUtf8()の「オーバーロード」関数になっちゃってるみたい…
771:デフォルトの名無しさん
07/11/10 06:25:53
そういや配列のプロパティ形式って配列でしかダメな理由あるのかな?
772:デフォルトの名無しさん
07/11/10 08:49:49
配列にはメンバがないからルックアップが簡単になるためじゃなかろうか。
たしか、カンファレンスのスライドだったかで、配列以外にも拡張するようなことが書いてあったと思う。
773:デフォルトの名無しさん
07/11/10 09:04:59
そのうちメソッドが
void func(Class c) {
}
auto c = new Class;
c.func();
なんてことになるのかな
774:デフォルトの名無しさん
07/11/10 09:43:15
さすがにそれはどうかと思う
775:デフォルトの名無しさん
07/11/10 09:53:36
>>772
URLリンク(s3.amazonaws.com)
9ページだな
まさに>>773のことが書いてある。
776:デフォルトの名無しさん
07/11/10 10:39:56
>>773ので書いたらクラスに後からメソッドを追加出来るな
777:デフォルトの名無しさん
07/11/10 10:42:11
それじゃクラスいらないね
全部構造体でいいじゃん
778:デフォルトの名無しさん
07/11/10 10:44:04
拡張メソッドはprivateメンバに触れないからカプセル化ができないじゃん
779:デフォルトの名無しさん
07/11/10 10:48:25
>>770
非推奨になってたのか。サンクス。
機能的にテキストエディタを意識しているように見えるから Text に名前変えたんかな。
780:デフォルトの名無しさん
07/11/10 11:25:42
お、Dにも来るのかそれ。
……関数・メソッド・プロパティじゃそれぞれ相応しい名前が違ってくるから、
あんまり安直にごっちゃに出来て欲しくはないなぁ、というのは神経質というか今更かしらん。
781:デフォルトの名無しさん
07/11/10 12:20:32
自分としてはモジュールのstatic import や別名つけてる時も大丈夫なようにして欲しいな。
import Conv = std.conv;
"12345".Conv.to!(int);
とか。使ってる関数がどのモジュールに属するのか簡単に分からないのは嫌いだし
呼び出してるのがメソッドなのか関数なのか区別つかないのは精神衛生上よろしくない。
782:デフォルトの名無しさん
07/11/10 12:27:45
それはまた気持ちが悪いな…
783:デフォルトの名無しさん
07/11/10 13:13:39
うへぇ、きめぇwwwwが褒め言葉のD言語ですが
>>781
自分的にもそれはほしいけど、なんかわかりにくくなるね…
…ここでスコープ解決演算子::の登場。
import Conv = std.conv;
"12345".Conv::to!(int);
とか。何でも.でアクセスするのはC++使ってた身としてはコード的に見にくくなる気がしている。
784:デフォルトの名無しさん
07/11/10 13:19:09
"12345".Conv :: to!(int);
↑ここで意味の切れ目がある感じがして好きじゃないなあ
"12345".(Conv.to!(int)); とか。
785:デフォルトの名無しさん
07/11/10 13:22:09
"12345".[Conv.to!(int)];
角括弧のほうが見やすそう。
786:デフォルトの名無しさん
07/11/10 13:40:50
"12345".to!(int)で良いよ。無駄な冗長性はいらん。
安全に書きたいときは普通の形式で書けば良いんだし。
787:デフォルトの名無しさん
07/11/10 15:14:34
某スクリプト言語風にすると
"12345".to#Conv!(int)
または
"12345".to!(int)#Conv
こんな感じかな
788:デフォルトの名無しさん
07/11/10 16:55:10
Poseidonで
ERROR >>> Wrong DMD Path!!
とか出てコンパイルできないんだがどうすればいいんだ?
DMDのパスを指定してるのにできない
789:デフォルトの名無しさん
07/11/10 17:00:58
>>786
無駄じゃないよ。
さっきも言ったように関数なのかメソッドなのか、関数ならどのモジュールの関数なのか
ぱっと見て分かるのは非常に保守しやすい。
自分の作ったものを自分で見る分には効果は薄いかもしれんが他人のソースコードを
見る時は非常に助かる。
Hoge hoge = new Hoge;
hoge.foo();
という記述があって、fooで何してるか見たい時に Hoge の定義見て、「あれ foo が無い」
となり、次は関数探すのにインポートしているモジュール見てそこから探し出すか、grep
かけた結果から探す羽目になる。
hoge.Bar.foo();
って記述してありゃ、Bar モジュールの foo()関数を読んでいるってのがすぐ分かる。
790:デフォルトの名無しさん
07/11/10 17:04:56
>>788
dmd の1個上のフォルダ指すんじゃなかったっけ。
c:\dmd なら c:\ を指定する。
791:デフォルトの名無しさん
07/11/10 17:06:54
>>789
ヒント: class Hoge{class Bar{void foo(){}}}
792:791
07/11/10 17:07:34
ミスった。class Hoge{static class Bar{static void foo(){}}}ね。
793:789
07/11/10 17:10:30
>>791-792
Bar モジュールインポートしてなければすぐ分かる話だよね。
794:デフォルトの名無しさん
07/11/10 17:13:55
>>790
bin の1個上のフォルダ指すんじゃなかったっけ。
c:\dmd\bin なら c:\dmd を指定する。
795:デフォルトの名無しさん
07/11/10 17:26:33
>>790,794
ありがとう。おかげでIDE環境で初コンパイル出来たよ(つД`;)
796:デフォルトの名無しさん
07/11/10 17:27:13
>>793
まぁ、基本的にはそうだけど。
でも根本を無くすにはdmdがcallgraphを生成できるようになるのが一番だと思う。
797:デフォルトの名無しさん
07/11/10 17:34:26
伝説のIDEが登場すればチップヘルプで教えてくれるよ。
798:デフォルトの名無しさん
07/11/10 17:56:28
>>796-797
そりゃ、理想なんだけどさ。そのときは無駄な冗長になっちゃうね。
799:デフォルトの名無しさん
07/11/10 18:09:46
hoge.Bar.foo();
このBarの部分が省略可能だったらいいのではないかと。
明示したいときは明示すればいいし。
800:デフォルトの名無しさん
07/11/10 21:20:07
Barがmoduleなのかaliasなのかclassなのかstructなのか関数なのかメソッドなのか
プロパティなのかメンバ変数なのかが区別つかなくなって読みにくいコードになりそうだな。
…っておもったけどいざとなったらtypeofとかis式とか__traitsとかpragma(msg, ...)とか
stringofとかですぐに見つけられそうだな。
801:デフォルトの名無しさん
07/11/11 05:52:35
>799のhoge.bar.foo()形式は、演算子の結合順序的にありえないだろうな。
>783のhoge.bar::foo()形式だと、mylib.barとかいうモジュール名とか考えると破綻する気が。
ありえるとしたら>784とか>785あたりのhoge.(bar.foo)()系じゃね?
>799の任意省略方式だと、static importとかで完全修飾を強制することによる
bar.foo(hoge)って記法に対して存在意義がないから、>800の言うような
混乱要素を無用に増やすだけになると思う。
>786で言われてることかな。
802:デフォルトの名無しさん
07/11/11 09:13:28
>>801
関数呼び出し式は今も
IdentifierList '(' ParameterList ')'
IdentifierList:
identifier
IdentifierList '.' identifier
だから、結合順序的には問題ないよ。意味論のフェイズで正しく処理できるようにしてやるだけ。
803:デフォルトの名無しさん
07/11/11 09:17:07
memo
URLリンク(python.matrix.jp)
804:デフォルトの名無しさん
07/11/11 15:46:41
>>802
いやいや、お前が間違ってるよ。よく考え身。
805:デフォルトの名無しさん
07/11/11 16:05:22
>>804
間違ってるとかいうなら根拠しめそうぜ
モジュール名は識別子じゃないとか間抜けなこと言う?
806:デフォルトの名無しさん
07/11/11 16:12:14
>>805
結合順を考えろ。間抜け。
807:デフォルトの名無しさん
07/11/11 16:14:03
ああ、マヌケにはもっと説明を加えないと分からないか。
abc.efg.hij()
これを結合順に括弧でくくってみろ。
それが既存の文法と矛盾しないか考えろ。
808:デフォルトの名無しさん
07/11/11 16:31:40
'.'って、いつから演算子になったんだろう
809:デフォルトの名無しさん
07/11/11 16:34:12
最初から
810:デフォルトの名無しさん
07/11/11 16:42:14
演算子の結合順は実装依存。
結合順に依存するコードは誤り。
811:デフォルトの名無しさん
07/11/11 17:05:44
>>810
お前頭大丈夫か?
そんなわけないだろ。
仕様で結合順は決まってるよ。
812:デフォルトの名無しさん
07/11/11 17:12:04
釣り師おおすぎ
813:デフォルトの名無しさん
07/11/11 17:38:22
土日だからな
はぁ…月曜日が待ち遠しい…
814:デフォルトの名無しさん
07/11/11 17:41:22
月曜はニートだらけ
815:デフォルトの名無しさん
07/11/11 17:41:24
とりあえず、「演算子の優先順位」でググって最初に出たサイト。
URLリンク(c-production.com)
これは、Cのものだけど、Dも基本的なものは同じだよ。