トップページ⇒tech
1001コメント222KB

D言語 Part30

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2012/07/31(火) 00:05:43.45
プログラミング言語 D (D Programming Language) について語るスレッドです。

■本家
http://dlang.org/ - 公式(英語)
http://www.kmonos.net/alang/d/ - 公式の和訳
http://d.puremagic.com/issues/ - D言語バグ報告
https://github.com/D-Programming-Language - D言語開発リポジトリ

■Wiki
http://dusers.dip.jp/ - D言語友の会(日本語フォーラムあり)
http://prowiki.org/wiki4d/ - Wiki4D(公認Wiki)

■前スレ
D言語 Part29
http://toro.2ch.net/test/read.cgi/tech/1329714331/

■過去スレ、関連スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=D%8C%BE%8C%EA&sf=2&all=on&view=table&shw=5000
0153デフォルトの名無しさん2012/08/16(木) 22:21:10.27
>>152
Perl?っていうかマジで?
0154デフォルトの名無しさん2012/08/16(木) 22:30:18.95
>>152
だったら普通に変数使えよw
0155デフォルトの名無しさん2012/08/16(木) 23:08:28.66
大してご利益もないのに複雑になるだけの構文イラネ
01561492012/08/16(木) 23:45:58.67
>>150-151
こいつぁとんだ間抜けだぜ!
笑ってやれ笑ってやれHAHAHA
0157デフォルトの名無しさん2012/08/16(木) 23:48:31.39
src\druntime\import\core\stdc\*
のファイルって2.059だと.diなのに2.060では.dになってるのはなぜですか?
0158デフォルトの名無しさん2012/08/17(金) 00:31:17.53
>>145 おっとこいつは失礼。
-> mqo ファイル内でテクスチャファイル名が絶対パスなの考慮してなかった。直しました。
ttps://dl.dropbox.com/u/1630843/hp/d/mqo_loader.zip
ご指摘ありがとうございました。m(_ _)m

>>143
github のがいいんだ。じゃ次のからそうします。

>>146
2.059の時も文字化け?みたいなのしてたけど2.060でさらに読みにくくなったよね。>スタックトレース
0159デフォルトの名無しさん2012/08/17(金) 01:44:08.70
>>158
スタックトレース吐かなくなりました。GJ!
0160デフォルトの名無しさん2012/08/17(金) 01:54:36.07
foreach (_; 0..10)で我慢
0161デフォルトの名無しさん2012/08/17(金) 11:17:18.65
Error 42: Symbol Undefined _D6object29__T16AssociativeArrayTAxaTxkZ16Associativ
eArray6valuesMFNdZAxk
Error 42: Symbol Undefined _D6object29__T16AssociativeArrayTAxaTxkZ16Associativ
eArray6valuesMFNdZAxk

リンク時にこういうエラーが出ます。
おそらくisAssociativeArrayを使っているからだと思いますが、どうすればいいですか?
0162デフォルトの名無しさん2012/08/17(金) 13:14:26.86
対象の xxxx.lib をコンパイル時に参照するように指定してあげないといけないんじゃないの
0163デフォルトの名無しさん2012/08/17(金) 13:19:36.44
連想配列周りのバグが直ってないのがいくつかあった気がする
http://d.puremagic.com/issues/show_bug.cgi?id=5950

コマンドラインでソースファイル名を渡す順序を入れ替えると
出なくなったりとか変なバグがある
0164デフォルトの名無しさん2012/08/17(金) 17:21:47.56
>>162
isAssociativeArrayはD言語標準なので困ったところなのです。

>>163
コンパイラのバグだったか・・・。
ソースファイルを渡す順序の入れ替え・・・地味な作業になりそうです。
0165デフォルトの名無しさん2012/08/17(金) 17:33:45.50
まさかisAssociativeArrayを関数呼び出ししてない?
0166デフォルトの名無しさん2012/08/17(金) 18:02:24.16
>>165
static if (isAssociativeArray!(Hoge))
こんな感じで使ってます。
0167デフォルトの名無しさん2012/08/17(金) 18:19:15.01
>>161
デマングリングだけしてみた。これに見覚えは?

@property const(uint)[] object.AssociativeArray!(const(char)[], const(uint)).AssociativeArray.values()
0168デフォルトの名無しさん2012/08/17(金) 18:56:17.52
演算子オーバーロードみたいにコンパイラが内部で書き換えるやつじゃね
0169デフォルトの名無しさん2012/08/17(金) 19:48:23.16
それD組み込みの連想配列の実装コードな気がする・・
0170デフォルトの名無しさん2012/08/17(金) 19:53:45.79
なんかkeys使うとリンクに失敗することがあったような
0171デフォルトの名無しさん2012/08/17(金) 20:42:53.43
>>167
直接、そういったテンプレートを呼び出した覚えはないです。

>>168-170
やはりコンパイラのバグか・・・。
0172デフォルトの名無しさん2012/08/17(金) 21:26:10.67
コンパイラはいつも夢を与えてくれますが
同時にバグも残していくのです
0173デフォルトの名無しさん2012/08/17(金) 21:59:34.29
つまり夢いっぱいってことさ。
0174デフォルトの名無しさん2012/08/17(金) 22:04:15.27
Open your Passion!!
0175デフォルトの名無しさん2012/08/17(金) 22:29:42.05
dmdのバグ
price less
0176デフォルトの名無しさん2012/08/17(金) 23:21:32.66
夢だけじゃ腹は膨れないんだよッ
0177デフォルトの名無しさん2012/08/17(金) 23:35:06.98
だったらケーキを食べればいいじゃない
01781612012/08/18(土) 09:46:56.35
一応報告ですけど、コンパイラをdmd2.059からdmd2.054にしたらビルドできました(他のverは試してない)。
0179デフォルトの名無しさん2012/08/18(土) 09:57:37.82
最新版を試してない・・・だと・・・
0180デフォルトの名無しさん2012/08/18(土) 10:23:58.60
HEADじゃない…だと…?
0181デフォルトの名無しさん2012/08/18(土) 10:42:08.53
dmd -libのときって.libファイル指定できないんですか?

ライブラリソースのlib.dの中ではsc.iniで指定したパスにあるxxx.libの関数を使用しています。
dmd -lib lib.d xxx.lib
⇒Error: Error reading file 'xxx.lib'


もしかしてexeソースのsrc.dで直接xxx.libを使っていなくて
exeを作る場合は依存関係のあるすべての.libをdmdに並べないといけないのでしょうか

dmd src.d lib.lib xxx.lib
01821612012/08/18(土) 23:32:43.12
dmd2.060が出てたの気づいてなかった・・・。
0183デフォルトの名無しさん2012/08/21(火) 21:40:24.95
ttp://dusers.dip.jp/modules/forum/index.php?topic_id=119#post_id442
薄い本がでるのか
0184デフォルトの名無しさん2012/08/21(火) 22:31:12.36
完売したらしいね
0185デフォルトの名無しさん2012/08/22(水) 08:36:23.64
おっくれてるぅー
0186デフォルトの名無しさん2012/08/22(水) 17:23:50.31
あれだけ扱い難いC/C++の処理系のバグの少なさには恐れ入ったもんだが
Dはどうしてだめなんだ。
0187デフォルトの名無しさん2012/08/22(水) 17:25:52.37
仕様が決まってないから
0188デフォルトの名無しさん2012/08/22(水) 17:37:57.10
こればかは
どうしようもない
0189デフォルトの名無しさん2012/08/22(水) 19:47:24.59
http://dlang.org/bugstats.php
ずいぶん改善されてる実感はあるんだけど
せめて、Criticalが1桁になればなあ・・
0190デフォルトの名無しさん2012/08/22(水) 19:49:25.17
ウォルターの存在自体がバグ
0191デフォルトの名無しさん2012/08/22(水) 21:30:22.40
>>189
改善されてないでしょ…
バグ曲線の見方は、newが少なくならないと安定してきたとはみなされないし。
0192デフォルトの名無しさん2012/08/22(水) 22:56:54.33
class C{...}
class D : C{...}

C d = new D;

dからDを得る方法ありますか?
typeof(d)だとCになってしまう。
0193デフォルトの名無しさん2012/08/22(水) 23:23:48.46
d.typeof
0194デフォルトの名無しさん2012/08/23(木) 12:09:18.20
d.toString
0195片山博文MZボット ◆0lBZNi.Q7evd 2012/08/23(木) 16:15:36.24
>>82 できました。
0196片山博文MZボット ◆0lBZNi.Q7evd 2012/08/23(木) 16:52:33.59
遅くなってごめんなさ
0197デフォルトの名無しさん2012/08/23(木) 16:59:14.16
あんなマンパワーの居る作業を一人でやったのか…
お疲れさん。
0198デフォルトの名無しさん2012/08/23(木) 19:40:34.48
>>196
Makefile
46 : ## DEBUG OR RELEASE?
逆じゃね?
0199デフォルトの名無しさん2012/08/23(木) 21:10:34.89
## DEBUG OR RELEASE?
DFLAGS=-inline -O -release -w $(DEFS) # for Debug (default)
#DFLAGS=-debug -gc -unittest -w $(DEFS) # for Release

これは逆やね
0200デフォルトの名無しさん2012/08/24(金) 22:15:41.39
C言語のライブラリから
char* hoge();
を文字列として引っ張ってきたいのですが、そのままだと文字のポインタのような感じになってるみたいです。
文字列のように持ってくる何かいい方法は無いでしょうか
0201デフォルトの名無しさん2012/08/24(金) 22:53:42.86
D言語だって文字の配列だよ
0202デフォルトの名無しさん2012/08/24(金) 22:56:05.46
hoge().to!string();
0203デフォルトの名無しさん2012/08/24(金) 22:56:06.23
ポインタから勉強しなおしてto!stringしろ
0204デフォルトの名無しさん2012/08/24(金) 22:57:25.06
メモリリークの予感しかしない
0205デフォルトの名無しさん2012/08/24(金) 23:00:16.96
>>200
char* p = hoge();
string s = p[0 .. strlen(p)].idup;
というのが一番簡単かな

Cライブラリで確保されたメモリは
GC管理下に無いからコピーした方が扱いやすいと思う
自分で管理出来るならidupしないでキャストしてもいいのかな
02062052012/08/24(金) 23:01:55.61
あ、toで行けるのかスマン知らなかった
to賢いな
0207デフォルトの名無しさん2012/08/24(金) 23:08:16.61
>>200はポインタに対しての理解度があやしいので
その関数がmallocしてくるのかstaticな領域を返すのか確認した方がいいです
0208デフォルトの名無しさん2012/08/24(金) 23:09:35.25
>>206
isたんもかわいいお
0209デフォルトの名無しさん2012/08/24(金) 23:22:48.60
>>208
http://toro.2ch.net/test/read.cgi/tech/1320314325/
02102002012/08/24(金) 23:40:17.15
hoge().to!string();
ですね。

関数内で作成した文字列は危険だから返すな!
予めメモリを確保した所から文字列としてchar*を返す分には問題ない。

とかそういう感じですかね?
ご指摘ありがとうございます。ちゃんと手直ししました。

色々とありがとうございます。
0211デフォルトの名無しさん2012/08/24(金) 23:43:42.83
要するにmallocしたらfreeしろってことだよ
0212デフォルトの名無しさん2012/08/24(金) 23:47:41.56
ぼくのアナルも排便した後は女の子に舐め取ってもらいたい!
0213デフォルトの名無しさん2012/08/24(金) 23:49:28.53
その後はすかさずベロチューか?
お前とはうまい酒が飲めそうだ
0214デフォルトの名無しさん2012/08/24(金) 23:53:40.52
ハードコアだな
0215デフォルトの名無しさん2012/08/24(金) 23:56:57.30
マゾしかいないのかと思ったらスカトロマニアも多いとは……。
趣味がが増えたよ! やったねたえちゃん!
0216デフォルトの名無しさん2012/08/25(土) 01:04:46.58
D言語のマスコットでエロゲ作ろう
0217デフォルトの名無しさん2012/08/25(土) 01:06:23.59
そこはマスコットと言わず高クオリティーで頼む
0218デフォルトの名無しさん2012/08/25(土) 01:53:04.54
ボコォ
0219デフォルトの名無しさん2012/08/25(土) 13:24:47.03
classインスタンスのアドレスを取るときって↓で良い?
あとこういうのってどこに仕様書いてありますか

C c = new C;
cast(void*)c
0220デフォルトの名無しさん2012/08/25(土) 17:24:59.46
ttp://www.kmonos.net/alang/d/class.html
> クラスオブジェクトは参照によってのみインスタンス化されます。
0221デフォルトの名無しさん2012/08/25(土) 19:33:51.34
ありがとうございます。
そこは見たのですが、その「参照」は何もラップされていないアドレスと考えて良いんですか?
0222デフォルトの名無しさん2012/08/25(土) 20:11:51.25
TypeInfo_Classがあるだろう。
0223デフォルトの名無しさん2012/08/25(土) 20:33:19.69
>>219それで合ってるよ
0224デフォルトの名無しさん2012/08/26(日) 02:18:07.74
&thisとかはスコープ外れた時に使えなくなるみたいなんだけど
どっかでポインタ用の変数を自動生成してるってこと?
0225デフォルトの名無しさん2012/08/26(日) 02:27:41.88
thisは変数だし、&thisは変数へのポインタなんだから当たり前だろ。
0226デフォルトの名無しさん2012/08/26(日) 02:38:20.51
ん?じゃあ外部で生成されたクラスのアドレスを
クラスの内部から取得する場合にはどうすればいいの?

クラスが生成されてる間に、アドレスの形で保持しておいて
スコープが外れても色々な所で使い回したいとかそういうケースなんだけど
0227デフォルトの名無しさん2012/08/26(日) 03:03:57.14
クラス内のthisも参照だけどそのへんわかってる?
0228デフォルトの名無しさん2012/08/26(日) 04:01:17.55
多分よく分かってません
thisは、Classへのアドレス?
&thisは、Classへのアドレスを記憶するために変数が用意される感じ?
とか、そんな感じで混乱してます
0229デフォルトの名無しさん2012/08/26(日) 10:10:20.29
thisはクラスのインスタンスを指す参照変数で、&thisはその参照を指すポインタを得る。
参照変数の内容にはポインタを含むから、&thisはポインタのポインタになるってわけ。
0230デフォルトの名無しさん2012/08/26(日) 10:12:39.89
s/ポインタ/アドレス/g
0231デフォルトの名無しさん2012/08/26(日) 12:10:55.47
>>226
そういう場合に>>219を使う。
thisからアドレスを得たいなら cast(void*)this でいい。
0232デフォルトの名無しさん2012/08/26(日) 14:04:30.06
基本的には>>219でいいけど、CがopCastを定義していると動かない
もうちょっとよいやり方はこちら

C c = new C;
void* p = *cast(void**)&c;
0233デフォルトの名無しさん2012/08/26(日) 15:43:06.33
Dのマスコット作ってる暇があるなら
ウォルタくんはこういうややこしい部分を図解してやればいいのになw
0234デフォルトの名無しさん2012/08/26(日) 16:20:28.86
ややこしいのか・・・?
0235デフォルトの名無しさん2012/08/26(日) 16:53:50.45
クラスのアドレスって何に使えるんだろう?
0236デフォルトの名無しさん2012/08/26(日) 17:11:05.96
memsetとかか。ガクブル。
0237デフォルトの名無しさん2012/08/26(日) 17:50:18.80
SetWindowLongしたりemplaceしたインスタンスをfreeするのに使ったり
0238デフォルトの名無しさん2012/08/27(月) 00:00:18.60
リンカが出す「Error 32: Data Outside Segment Bounds : _DATA」ってエラーはどんな意味なんだい
何をすれば解決するのかさっぱりで
0239デフォルトの名無しさん2012/08/27(月) 03:18:43.15
みんなのおかげで次のステップに移ることができたよ
ありがとう
0240デフォルトの名無しさん2012/08/27(月) 07:03:55.03
>>238
align絡みだと思う
こっちでは
align(1) struct S {...}
みたいなのがあると出た

struct S {align(1): ... }
なら問題無しみたい
0241片山博文MZボット ◆0lBZNi.Q7evd 2012/08/27(月) 20:08:06.06
Warning 178: .LIB pagesize exceeds 512

助けて! -L/PAGESIZE:1024を付けてもダメだった。
0242片山博文MZボット ◆0lBZNi.Q7evd 2012/08/27(月) 20:37:29.03
ライブラリが大きすぎるということか? でも二つに分けたくないな。
0243デフォルトの名無しさん2012/08/27(月) 20:43:50.09
単純な数値定数はconstではなくenumにすると、シンボルが出力されないからライブラリサイズが減るかも。
0244デフォルトの名無しさん2012/08/27(月) 21:38:26.40
OPTLINKを甘く見るな
吐いてるエラーメッセージが真実とは限らない
0245デフォルトの名無しさん2012/08/27(月) 23:03:47.65
2.060でalign属性がいかれちまってるんですが、
これはD言語erにとって大したことない感じなの?
0246デフォルトの名無しさん2012/08/27(月) 23:18:38.10
なに、ちょっとした崩壊的変更だ
一日ちょっと楽しめたぜ
0247デフォルトの名無しさん2012/08/27(月) 23:53:42.34
align(1)が変更つうかぶっ壊れてる気がするんですが、変更なの?
0248デフォルトの名無しさん2012/08/27(月) 23:56:21.38
struct S {align(1): ...}
でサイズが計算と合わない
0249デフォルトの名無しさん2012/08/28(火) 01:21:00.19
http://d.puremagic.com/issues/show_bug.cgi?id=8377
うぉるたんが disastrous bug って言ってるヤツかな
緊急リリースが出るかと思ってたけど出ない
0250デフォルトの名無しさん2012/08/28(火) 06:30:28.64
こういう話を見るたびに思うんだけど
Dがつく単語をわざと選んでんのかな
0251デフォルトの名無しさん2012/08/28(火) 10:10:20.94
選んでるかまでは知らんが
破壊とか崩壊とか解体とか災厄とか絶望とか、
その手の単語はラテン語源のことが多いけど、
そっちで接頭辞 de- とか dis- とかがつく単語で表現されてるもんだからもともとDで始まる単語が多い
0252デフォルトの名無しさん2012/08/28(火) 10:23:28.24
destroy
■ このスレッドは過去ログ倉庫に格納されています