トップページ⇒tech
962コメント242KB

D言語 Part24

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん2010/01/26(火) 00:06:57
プログラミング言語 D (D Programming Language) について語るスレッドです。

■前スレ
http://pc12.2ch.net/test/read.cgi/tech/1253443684/

■本家
ttp://www.digitalmars.com/d/
ttp://www.kmonos.net/alang/d/ (和訳)

■コンパイラ
http://www.digitalmars.com/d/dcompiler.html (DMD, 本家)
http://dgcc.sourceforge.net/ (GDC, gccフロントエンド)
http://www.dsource.org/projects/ldc (LDC, バックエンドにLLVM)

■参考URL
ttp://f17.aaa.livedoor.jp/~labamba/ (D言語研究)
ttp://f17.aaa.livedoor.jp/~labamba/?D%B8%C0%B8%ECBOF (D言語BOF)
ttp://dsource.org/ (dsource)
ttp://tinyurl.com/candcpp2d2 (C/C++に疲れた人のD言語2.0)
ttp://www.kmonos.net/alang/wnd/ (わかったつもりになるD言語)
ttp://shinh.skr.jp/d/ (SDL, SDL_*, OpenGL, GLU, glutのポーティングとか)
ttp://shoo.s20.xrea.com/shoo/programing (D言語とTangoの入門講座)
ttp://www.nicovideo.jp/mylist/4453698 (D言語で作られた芝ゲー niconico動画)
ttp://www.asahi-net.or.jp/~cs8k-cyu/ (ABA Games)
ttp://dusers.dip.jp (D言語友の会)
ttp://www.wish.sakura.ne.jp/desuno/game/Drawing (PrincessDrawing! D言語で作られた横スクロールSTG)

>>2へ続く
09129112010/07/31(土) 14:32:52
Shift+Enterで投稿とか狂ってるだろJaneStyle

・・・途中投稿してごめんなさい吊ってきます
0913デフォルトの名無しさん2010/07/31(土) 14:38:27
>>910
ああそうか初歩的ミススマソ……
まどろっこしいな……
0914デフォルトの名無しさん2010/07/31(土) 15:11:54
>>912
お前が死んだら誰がD言語を支えるんだ!
もっと熱くなれよ!
0915デフォルトの名無しさん2010/07/31(土) 18:37:44
なんか、クラスの同期関数から、
外部の関数を呼び出したら、重くなったんだけど…
なぜだ。(D1.063)
0916デフォルトの名無しさん2010/07/31(土) 18:55:42
最小コードにしてバグ報告してみたら?
0917デフォルトの名無しさん2010/07/31(土) 19:00:52
じゃあ、最小コードにして重かったら、報告してみるか。
重くなかったら…
0918デフォルトの名無しさん2010/07/31(土) 20:43:07
日本語フォルダ・ファイル名の扱い方が分からない。
0919デフォルトの名無しさん2010/08/01(日) 01:03:00
しらねーよ
0920デフォルトの名無しさん2010/08/01(日) 07:24:59
Error: Access Violation
うわぁぁぁぁぁぁぁぁぁぁぁぁぁぁ!!!!
なんでみつかんねぇんだぁぁぁぁあああああ!!!
0921デフォルトの名無しさん2010/08/01(日) 08:22:49
>>920
そのエラーは確保してない領域(null含む)にアクセスした時に出るエラーだから、
>>920が考えてる原因、とは別の所に原因がある可能性も。
09229172010/08/01(日) 11:24:33
最小コードにしたら、関数呼び出しが4倍くらい重いことがわかった。
・・・これどうするかねえ。
0923デフォルトの名無しさん2010/08/01(日) 12:38:13
dmdを窓から投げ捨てろ!
09249172010/08/01(日) 12:45:19
検証用コード。
http://www.dotup.org/uploda/www.dotup.org1066114.zip.html

test1⇒ 手動でインライン展開したバージョン。
test2⇒ 関数呼び出しをしているバージョン。
test3⇒ もしやと思いforをgotoに変えたバージョン、だが特に何もなかったぜ!

関数呼び出し重すぎ。
0925デフォルトの名無しさん2010/08/01(日) 12:49:43
コー・・・ド・・・?
09269172010/08/01(日) 12:55:01
>>925
上げるzipを間違えた・・・
http://www.dotup.org/uploda/www.dotup.org1066137.zip.html
0927デフォルトの名無しさん2010/08/01(日) 13:11:11
見たところ重い理由が無い気がするなぁ
ウォルたんに言ったら直してくれるんじゃね
0928デフォルトの名無しさん2010/08/01(日) 14:13:17
常識的に関数は重いものであると思う俺はダメ?
まあテンプレートミックスインとかにして強制的にインライン化すればいいよ
09299172010/08/01(日) 15:04:12
>>927
英語わかんないの・・・
0930デフォルトの名無しさん2010/08/01(日) 15:19:37
ワシもじゃ、ワシもじゃみんな!
0931デフォルトの名無しさん2010/08/01(日) 16:14:19
>>920です
まじ別の場所にいた・・
ぬるぽ!
0932デフォルトの名無しさん2010/08/01(日) 16:19:01
>>931
ガッ!
バグの原因見つかって何より。 ・・・見つかったんだよね?
0933デフォルトの名無しさん2010/08/01(日) 17:01:48
そもそも1億回も関数を呼び出しておいて遅いもへったくれもないだろう…
もっと呼び出し回数を減らせるような関数を作ればいいんじゃないかなと思う。
0934デフォルトの名無しさん2010/08/01(日) 18:08:39
>>933
ライブラリリファレンスをちゃんと見たら、
四角形塗りつぶしする関数があったのは内緒だ。
0935デフォルトの名無しさん2010/08/01(日) 21:10:42
>>932
一部要素がnullになってるリストがあって
nullな要素のインデックスを覚えといて
後でそこを埋める処理書いてたんだけど
(↑効率悪いってのは気にしないでくれ・・)

覚えてたインデックスが間違ってて、
リストの要素が全てnull以外になってることを
想定してた処理で死んでた。

全く関係ない関数からretするだけでエラー落ちしてたから
意味わからず3日間悩んでたよ・・・

やっと見つかったは良かったけど今ソース中がprintfだらけなんだぜ!!
0936デフォルトの名無しさん2010/08/01(日) 21:13:28
ファイル先頭で
debug = HOGE_PRINT;
とやって
debug(HOGE_PRINT) writeln(〜〜
ってやったりするよね
0937デフォルトの名無しさん2010/08/01(日) 21:18:02
そして誕生する全行の半分がdebug(FUGA) { ... }なコード
0938デフォルトの名無しさん2010/08/01(日) 21:27:19
printfがあると大丈夫なんだけど、printf消すとなぜか落ちるとか、たまにあるよね
0939デフォルトの名無しさん2010/08/01(日) 21:48:18
それなんてC言語?
0940デフォルトの名無しさん2010/08/01(日) 21:51:01
c = a + b; /* 合計を代入 */
c = a + b; /* 念のため */
0941デフォルトの名無しさん2010/08/01(日) 22:16:52
>>935
printf()だらけあるあるwww
そして、いざデバックの為にコンパイルしようとしたら、
printf()の構文でエラーを吐くのはもっとある。

ちなみにバグを見つけるだけなら、契約の仕組みが非常に役にたつ。
俺がちょっと前に書いたプログラムは、この仕組みが無かったら、どうなっていたか分からんね。
0942デフォルトの名無しさん2010/08/01(日) 22:19:28
>>938
ねーよ。
昔の時代のことはしらねーけど。

>>940
もっと信用してあげて下さい…
0943デフォルトの名無しさん2010/08/02(月) 05:59:05
immutableなクラスのopEqualsとかtoStringってどう書けばいいの?
普通に定義すると not covariant with object.Object.opEeuals とか言われる
0944デフォルトの名無しさん2010/08/02(月) 06:44:35
>>953
immutable関係なくシグネチャ間違ってると予想。
0945デフォルトの名無しさん2010/08/02(月) 07:21:16
>>944
ソースはこんな感じ。

immutable class Hoge
{
string toString() { return "Hoge"; }
bool opEquals(Object other) { return false; }
}

コンパイル結果は
opequals.d(3): Error: function opequals.Hoge.toString of type immutable string() overrides but is not covariant with object.Object.toString of type string()
opequals.d(4): Error: function opequals.Hoge.opEquals of type immutable bool(Object other) overrides but is not covariant with object.Object.opEquals of type bool(Object o)

エラーメッセージから察するに Object に immutable bool opEquals(Object) が宣言されてないと駄目っぽい?
0946デフォルトの名無しさん2010/08/02(月) 08:12:30
うわあ……修飾によってオーバーライドできない関数ができてしまってるとか……

抜け道だけなら、immutableではない継承階層を作って、
そこでimmutable_toStringでも定義して、元のtoStringからimmutable_toStringを呼んでおいて、
Hogeではimmutable_toStringをオーバーライドするとか……試してないけど。

単にObject.toStringにimmutableを付ければいいってもんでもないよな……const他の修飾子もあるし
さあWalterタンに報告だ!w
0947デフォルトの名無しさん2010/08/02(月) 10:56:25
D2.048とD3.0マダー?
0948デフォルトの名無しさん2010/08/03(火) 05:46:33
import std.stdio;
struct A {
int value;
alias value this;
}
void main()
{
A a = {123};
if ( a==123 && a!=123 )
writeln( "???" );
}

==と!=が同時にtrueって一体どういうことなんだ?
0949デフォルトの名無しさんNGNG?2BP(1201)
初心者にお勧めのサイトってありますか
0950デフォルトの名無しさん2010/08/03(火) 20:21:21
やめとけこんな糞言語
C#の方が食い扶持があるぞ
0951デフォルトの名無しさん2010/08/03(火) 20:28:06
>>949
どれくらいの初心者?
とりあえずわなD
0952デフォルトの名無しさん2010/08/03(火) 20:30:43
食い扶持考えてD言語やる人とかいなくない?
0953デフォルトの名無しさんNGNG?2BP(1201)
>>950
Dはhellowroldをを実行したぐらい
0954デフォルトの名無しさん2010/08/03(火) 21:41:42
C系統の言語の経験があるならやっぱりわなDかねぇ
0955デフォルトの名無しさん2010/08/03(火) 21:49:33
C言語の知識と易しい英語が読めるなら本家見たほうが早い
0956デフォルトの名無しさん2010/08/03(火) 22:04:05
仕様書がリファレンス兼自慢になってるからな
0957デフォルトの名無しさん2010/08/04(水) 00:38:56
でもBNFは雑なので信用しないこと
0958デフォルトの名無しさん2010/08/04(水) 12:02:21
struct STest{
  char[128] mChar;
}
int main(){
  for(int Count = 0; Count < 1000; ++ Count){
    writefln("Count = %d",Count);
    STest[] mTests;
    for(int i = 0 ; i < 1000; ++ i){
      STest Test;
      mTests ~= Test;
    }
    mTests.clear;
  }
  return 0;
}
WindowsのDMD2.046で上記のコードでmTests.clear;のタイミングでメモリが解放されてないっぽいのですがこれはそういうものなのでしょうか。
0959デフォルトの名無しさん2010/08/04(水) 16:14:44
「解放されていない」が何を指してるのか知らないけどそういうものです
0960デフォルトの名無しさん2010/08/04(水) 16:22:22
タスクマネージャ等を見てるんだったら、D上でメモリを開放してもOSにすぐメモリを返すとは限らないからね
大抵はよほど空きが貯まらない限りは再利用のために取っとく。独自メモリマネージャを実装してる言語はみんなそう
0961デフォルトの名無しさん2010/08/04(水) 19:04:06
>>958 のような質問ってMLでもちょくちょく出るからドキュメントに書いといた方がいいんじゃなかろうか?
もう書いてあるっけ?
0962デフォルトの名無しさん2010/08/04(水) 19:49:05
CのmallocだってfreeしてもOSへは返さない方が多いので……
レス数が950を超えています。1000を超えると書き込みができなくなります。