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

D言語 Part24

■ このスレッドは過去ログ倉庫に格納されています
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へ続く
0685デフォルトの名無しさん2010/06/16(水) 08:10:34
>>684
Tango……。
あんまりTangoを使うことオススメ出来ないな。

D2 + phobos はGood
0686デフォルトの名無しさん2010/06/16(水) 08:37:39
>>684
bugzillaによるとそのバグ修正されてるからTangoの環境によるのかなぁ
xfBuildのissue見てるとobjとlibで被っているとかあったけど,どれが原因かは分からんね
06876852010/06/16(水) 08:41:40
結論、Tangoは使うな!

と思うのは俺だけじゃないはず。
06886782010/06/16(水) 10:46:55
>>680,682,683
新しいverを入れると既存のコードのコンパイルが通らなくなって、修正するのが面倒くさくて、つい先送りに・・・。

今回も2.047にするとstd.rangeのTakeやらRetroでコンパイルエラーが発生して直し方がわかりません。
2.046なら、今作ってるプログラムは1箇所簡単な修正で済んだので、とりあえずはこれで・・・。
0689デフォルトの名無しさん2010/06/16(水) 20:16:16
D1のtangoのコードをphobosに置き換えてみたら簡潔になりすぎて吹いた
特にファイルパス周りがヤバい
std.pathは合理的だわ、std.fileへの関数の振り分け方の基準が謎だけど

でもtraitsとか使ってるとD2が欲しくなるなぁ
0690デフォルトの名無しさん2010/06/16(水) 20:45:43
そんな楽しげなD2組を指咥えてみてるD1な俺がここに
0691デフォルトの名無しさん2010/06/17(木) 04:02:50
ようやく alexandrescu の本が出たわけだが、どうよ?
ttp://www.amazon.co.jp/D-Programming-Language-Andrei-Alexandrescu/dp/0321635361
0692デフォルトの名無しさん2010/06/17(木) 04:38:19
いつのバージョン準拠なんやろ(笑)
0693デフォルトの名無しさん2010/06/17(木) 21:04:53
英語読めないんだぜ俺
0694デフォルトの名無しさん2010/06/17(木) 21:33:16
英語ちゃんと勉強しておけばよかった
0695デフォルトの名無しさん2010/06/17(木) 23:12:06
>>692
確かにな、いつのバージョンだろ(笑
この2ヶ月でけっこー大きくphobosが変わったからな。
買うの危険?
0696デフォルトの名無しさん2010/06/17(木) 23:26:26
少なくともstd.containerの使い方はわからないだろうな
0697デフォルトの名無しさん2010/06/18(金) 01:31:24
C:\dmd\dmd\bin\..\..\src\phobos\std\functional.d(176): Error: static assert "Bad binary function q{a == b}. You need to use a valid D expression using symbols a of type dchar and b of type string."
C:\dmd\dmd\bin\..\..\src\phobos\std\functional.d(179): instantiated from here: Body!(dchar,string)
C:\dmd\dmd\bin\..\..\src\phobos\std\algorithm.d(1984): instantiated from here: result!(dchar,string)

これってPhobosとdmdのバージョンがあってないんですかね?
0698デフォルトの名無しさん2010/06/18(金) 07:08:37
テンプレートに渡すパラメタを間違えただけという気も
最近のdmdは一番大元の呼び出し元も教えてくれるんだっけ?
06996952010/06/18(金) 10:49:52
>>696
std.containerが出たのは、つい最近だかな・・・。
dcollectionをphobosに入れたくないからって、
事前予告もなしに急に出てきたし。

それにミカン・・・。

>>643
同意。
0700デフォルトの名無しさん2010/06/18(金) 19:19:47
C++をガリガリ書いてる人ですらAlexandrescu博士のコードは難解すぎると嘆いているというのに
誰ぞインタフェース部分を乗っ取って博士のコードを内側に追いやってくれないかのう
0701デフォルトの名無しさん2010/06/18(金) 19:22:54
例外ってどこで発生したかって情報もってないんですかね?
0702デフォルトの名無しさん2010/06/18(金) 19:33:21
new Exception("", __FILE__, __LINE__);
とかやらない限り無いねぇ
そして大抵は__FILE__も__LINE__も抜きに例外が投げられてる

アプリがどこで落ちたのか知りたい場合は-gオプション付きでコンパイルして
ddbg辺りで実行するなりすればいいと思う
0703デフォルトの名無しさん2010/06/18(金) 23:53:29
>>701
スタックトレースが最近入ったからそれで頑張ってくれ
0704デフォルトの名無しさん2010/06/19(土) 02:41:41
>>703
あれってなんなの?
どうすればスタックトレースを見られる?
0705デフォルトの名無しさん2010/06/19(土) 11:03:36
今のところ見たことがない
Windowsで見る方法あるの?
0706デフォルトの名無しさん2010/06/19(土) 19:27:31
パッチ見る限りLinuxだけみたいだが
0707デフォルトの名無しさん2010/06/19(土) 23:56:50
import std.stdio;
import std.date;
d_time now = getUTCtime();
d_time old = now - ticksPerSecond * 60 * 60 * 24 * 365;
writeln(toString(old), toString(now));

Wed Jun 02 14:05:44 GMT+0000 2010Sat Jun 19 14:46:13 GMT+0000 2010

1年前の日付が表示されるつもりが、17日前の日付が表示されます。
どこが間違っているのでしょうか?それともphobosのバグ?
0708デフォルトの名無しさん2010/06/20(日) 00:10:15
ticksPerSecondの型がenumデフォルトでintになってるせいで
>ticksPerSecond * 60 * 60 * 24 * 365
これがオーバーフローしてるみたいね
0709デフォルトの名無しさん2010/06/20(日) 00:22:26
>>708
なるほど。thxでした。
07107012010/06/20(日) 21:17:07
>>703
Linuxだけっすか・・・・
0711デフォルトの名無しさん2010/06/23(水) 00:46:22
D1で改行コードCR設定のcygtermでreadlnすると
Enter入力してもreadlnから抜けない気がする
↓をコマンドプロンプトで実行するとEnter毎に!が出るけど
 cygtermだと何もでない。readlnが入力全部食ってる気がする


import std.stdio;
import std.cstream;
void main()
{
char s[];
while((s = readln()) !is null){
dout.writefln("!");
}
}


※cygterm=cygwinにteratermで接続するやつ
0712デフォルトの名無しさん2010/06/23(水) 00:50:55
↑ちなみに生のcygwinだとEnter毎に!が出る(たぶん改行コードCRLFで行ってる)
readlnは改行コードCRLF、CR、LFに関わらず一行として認識すると
書いてあった気がするのだけどCRだけだとだめなんかね
0713デフォルトの名無しさん2010/06/23(水) 13:24:38
CR+LF, LF は LF だけ判定すれば間違いないが、
CR のみ判定しようとすると、LFが来るか来ないか待たないとダメだからな。
0714デフォルトの名無しさん2010/06/23(水) 13:36:09
いや、CR のみと CR+LF 併用の場合は、
CR 見た瞬間改行扱いにして、次のLFを無視するようにすればいいか。
ただ、CR 改行って Mac でしか見たことないんだよなぁ。
0715デフォルトの名無しさん2010/06/24(木) 05:45:57
Access Violationってどんな時にでるんでしょうかね?
dwtのドラッグする時にラベルのテキスト取りにいったら落ちるんですが
char[]を返してるだけなんですよね。
多分。



0716デフォルトの名無しさん2010/06/24(木) 05:53:57
dmd1でクロージャしちゃったのが原因でした。失敬。
0717デフォルトの名無しさん2010/06/24(木) 07:21:15
dwtはTable上からドラッグしたら本当にバグで落ちたりする
0718デフォルトの名無しさん2010/06/24(木) 09:41:13
自分もdwt使ってるんですが、Treeのノードのドラッグって実装途中なんでしょうかね?
サンプルもないし、SWTのソース流用してもdragStartすら呼ばれんのですが・・・
0719デフォルトの名無しさん2010/06/24(木) 20:27:22
DWT+tango 0.99.9でやってるけど出来るなぁ
TableのはバグってるけどTreeのドラッグは修正した記憶がない
0720デフォルトの名無しさん2010/06/24(木) 21:13:26
>>719
なんかおかしな点ありますか?
Listでやるとこのままでもうまくいくんですが・・・。
int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK;
// Create the drag source on the tree
DragSource ds = new DragSource(tree, operations);
TextTransfer[] t ;
t ~= TextTransfer.getInstance();
ds.setTransfer(t);
ds.addDragListener(new class(tree) DragSourceAdapter {
Tree tree;
this(Tree _tree) {
this.tree = _tree;
}
void dragStart(DragSourceEvent event) {
Stdout("drag").newline;
event.doit = (this.tree.getSelection().length != 0);
}
public void dragSetData(DragSourceEvent event) {
Stdout("dragSetData").newline;
// Set the data to be the first selected item's text
auto txt = new ArrayWrapperT!(char)(this.tree.getSelection()[0].getText());
event.data = txt;
}
});
0721デフォルトの名無しさん2010/06/24(木) 21:55:13
本当だ動かない…
でも手元のプログラムのツリーではちゃんとドラッグできる
えええ何でやねん

TreeItemに画像を設定したり
DropTargetもつけてみたり
TextEditorをくっつけてみたり
してみたけどやっぱりできないな
何が違うんだ?
0722デフォルトの名無しさん2010/06/24(木) 21:59:10
-L"/su:console:5"をつけてコンパイルしたら動いた!

…何でやねん
0723デフォルトの名無しさん2010/06/24(木) 22:05:47
ほんとだ・・・
ありがとうございます!
0724デフォルトの名無しさん2010/06/25(金) 10:47:53
質問を連投してすいません。
コンストラクタでドラッグリスナーの処理を行うと落ちます。エラーメッセージは
dwt.DWTError.DWTError: Cannot initialize Drag

ですが全く同じ処理を、コンストラクタから抜けた直後に書く(関数を呼ぶ)と普通に実行出来ます。
auto tree = new CTree(shell);
tree.init(); <-ドラッグ処理
コンストラクタって何か気をつけてないといけない事があるんでしょうか?
0725デフォルトの名無しさん2010/06/25(金) 19:24:06
エラーメッセージでgrepかけたらこんなコードに行き当たった

>public this(Control control, int style) {
> super(control, checkStyle(style));
> this.control = control;
> if (control.getData(DND.DRAG_SOURCE_KEY) !is null) {
> DND.error(DND.ERROR_CANNOT_INIT_DRAG);
> }
> control.setData(DND.DRAG_SOURCE_KEY, this);

DND.DRAG_SOURCE_KEYをキーにしてデータを登録する処理が
うっかりどこかで走ってるんじゃないかなあ
0726デフォルトの名無しさん2010/06/25(金) 21:37:44
>>725
mixinで2度同じ関数が呼ばれてました・・・。
おかげでバグが取れました。ありがとうございます。
連投を重ねてすいませんが、恥をしのんであと一つお願いします><

ドラッグしたTreeItemが黒いのは、これもやはり自分のバグなんでしょうか?
画像をつけるとそこだけはちゃんとアイコンが表示されてるんですが。
0727デフォルトの名無しさん2010/06/25(金) 22:13:05
その現象にはぶつかった事がないからわからないやごめん

画像を作ってるのはTreeDragSourceEffect.getDragSourceImage()だから
その辺を調べるといいのかも
0728デフォルトの名無しさん2010/06/26(土) 05:38:57
>>727
そうなんですか・・・
>>720
で試して頂いた奴でもならなかったって事でしょうか?
となると自分の環境の問題なのかなぁ・・・

とりあえず頂いたヒントを調べてみます。ありがとうございました。
0729デフォルトの名無しさん2010/06/26(土) 16:11:16
dwtはVistaでビルドするとXPで動かなくなるような事が余裕で起こるから
環境次第で何が起きても驚かん
0730デフォルトの名無しさん2010/06/27(日) 21:46:59
int i = 0;
writeln("abcd"[i..i + 4]);// "abcd"
writeln("abcd"[i..i += 4]);// ""
これってバグですか?
0731デフォルトの名無しさん2010/06/27(日) 21:50:36
iに副作用あるけどどうなの
0732デフォルトの名無しさん2010/06/28(月) 21:49:10
structのデフォルトコンストラクタが定義できない仕様になってる理由は何ですか?
0733デフォルトの名無しさん2010/06/28(月) 21:58:18
俺、>>730 みたいなことする人と仕事したくない。
0734デフォルトの名無しさん2010/06/28(月) 22:19:22
>>730
cdecllってことでしゅ
0735デフォルトの名無しさん2010/06/28(月) 22:25:43
>>733
完全趣味で完全クローズドで未成年なのでそんなのどうでもいいです

>>734
なるほど
ありがとうございました
0736デフォルトの名無しさん2010/06/29(火) 08:08:42
>>732
構造体の配列を確保するときにデフォルトコンストラクタがあると
0で埋めるんじゃなくて要素数分コンストラクタを呼ばないといけなくなって
パフォーマンスに問題が出るから、だと思う。
0737デフォルトの名無しさん2010/06/29(火) 10:52:20
足跡
0738デフォルトの名無しさん2010/06/29(火) 18:19:01
>>736
thx
0739デフォルトの名無しさん2010/06/29(火) 19:42:43
struct A(T...) {
union {T field;}
}

A!(int, real, string) a;
a.field[0] = 0;
a.field[1] = real.nan;
a.field[2] = "aho";
foreach (f; a.field) writeln(f);

みたいなことができると今日知った
仕様書に書いてあればいいのに
0740デフォルトの名無しさん2010/06/29(火) 21:51:59
なんでunion?
0741デフォルトの名無しさん2010/06/29(火) 22:12:30
タプールとヤプールとカプールって似てるよな
0742デフォルトの名無しさん2010/06/29(火) 22:47:12
>>739, >>741
いいこと聞いた!
0743デフォルトの名無しさん2010/06/29(火) 23:03:39
>>740
最初
T field;
とやったらできなくて、だったらどうやってstd.typecons.Tuple実現できるねん
と思ってソース見たらunionがいた
0744デフォルトの名無しさん2010/06/29(火) 23:12:36
ん、できないけ?
0745デフォルトの名無しさん2010/06/29(火) 23:26:37
あれ?できた…
0746デフォルトの名無しさん2010/06/30(水) 01:00:10
できるよね?
0747デフォルトの名無しさん2010/06/30(水) 07:21:40
D1でもD2でも間違いなくできる
じゃああの時出たエラーは別の要因だったのか…

union意味ねぇ!
0748デフォルトの名無しさん2010/06/30(水) 22:45:58
ttp://dusers.dip.jp/modules/forum/index.php?topic_id=73
std.socketの改造の話が!
0749デフォルトの名無しさん2010/06/30(水) 23:07:03
std.processのショボさは何とかならないかなぁ
標準ライブラリだけでfork-execやりたいです
0750デフォルトの名無しさん2010/07/01(木) 02:48:35
streamもね
0751デフォルトの名無しさん2010/07/01(木) 10:06:17
>>749
std.processって別ブランチで新しいの開発されてるけどいつマージされるのやら
0752デフォルトの名無しさん2010/07/01(木) 21:38:19
おお本当だ
すばらしいね
未来はバラ色だな
0753デフォルトの名無しさん2010/07/02(金) 05:28:29
実際にバラ色だったらキモいけどな
0754デフォルトの名無しさん2010/07/02(金) 19:24:43
ttp://bitprox.com/en/products_bde_index.html
Dの有償IDEとか人類史上希に見る大胆なプロダクト
0755デフォルトの名無しさん2010/07/02(金) 21:13:26
>>754
ばかな・・・
0756デフォルトの名無しさん2010/07/02(金) 21:36:40
見える、見えるぞ……苦労してカラーリングや折りたたみや補完を実装した挙句
本体のバージョンアップで全て台無しにされる未来が……
0757デフォルトの名無しさん2010/07/02(金) 21:49:35
Dの仕様変更
↓
IDEのバージョンアップ
↓
アップデートは有償
↓
ウマー
0758デフォルトの名無しさん2010/07/02(金) 22:07:47
D とか Delphi とか D で始まる言語は縁起が悪いのかもなぁ
0759デフォルトの名無しさん2010/07/02(金) 22:11:57
Dylanって言語があるぞ
まだ大丈夫だ
0760デフォルトの名無しさん2010/07/02(金) 22:29:56
デバッグがまともに出来るようになるなら金出してもいい。
0761デフォルトの名無しさん2010/07/02(金) 22:44:21
DHTML
0762デフォルトの名無しさん2010/07/02(金) 22:56:11
Disk-BASIC
DOS-BASIC
は許してあげて下さい…
0763デフォルトの名無しさん2010/07/02(金) 23:02:53
ファイルパスの扱いはどうすればいいんでしょうかね?
toString16(tango)で変換した文字列渡すと指定されたモジュールが見つかりませんとかでるんですが・・・
0764デフォルトの名無しさん2010/07/02(金) 23:04:28
途中で投稿しちゃいました。

でもリテラルで直接渡すとちゃんと通るんですよね・・・。何か間違ってるんでしょうか?
0765デフォルトの名無しさん2010/07/02(金) 23:39:14
わざわざUTF-16にするってことはWindows関数に渡そうとしてるの?
0766デフォルトの名無しさん2010/07/03(土) 00:13:41
>>765
はい。自分の環境だと自動的にLPCWSTR(wchar*)になってしまうんですが、tangoの方はそっちはくれないんですよね。
0767デフォルトの名無しさん2010/07/03(土) 00:22:38
あ、すいません。処理の流れを書くのを忘れてました。
main関数からもらったパス(args[][])のargs[0]をtango.io.FilePathに渡すと
tango.core.Exception.IOException: unexpected '\' character in path: D:\declipse\workspace\xdwt\main.exe・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
というエラーが出るんで、\を/に変えて使ってるんですが、
すると上記のエラーが出てしまうんです。
0768デフォルトの名無しさん2010/07/03(土) 00:32:24
Tangoは使うな… とだけ言いたいところだけど、一応回答。
auto fp = new FilePath(standard(args[0]));
auto lpcwstr = toString16z(toString16(fp.native().toString()));
多分こんな感じじゃないか?
0769デフォルトの名無しさん2010/07/03(土) 08:33:56
>>768
うまくいきました。
ありがとうございました。
0770デフォルトの名無しさん2010/07/03(土) 15:14:02
本当だ!火星風になってる!
0771デフォルトの名無しさん2010/07/03(土) 16:39:57
!?
0772デフォルトの名無しさん2010/07/03(土) 21:04:09
・・・!?
0773デフォルトの名無しさん2010/07/03(土) 21:19:07
vm(ノーマルxp)で64BitXPでコンパイルしたExeファイルが普通に実行できてるんですが
これって正常なんですかね?

0774デフォルトの名無しさん2010/07/03(土) 21:53:08
だって32bitコンパイラしか無いし
0775デフォルトの名無しさん2010/07/03(土) 22:45:12
そうだったのか><
0776デフォルトの名無しさん2010/07/03(土) 23:38:08
今凄い勢いで64bit対応のコードが追加されてるみたいだけどね
0777デフォルトの名無しさん2010/07/04(日) 10:22:19
777ならD言語が大フィーバー
0778デフォルトの名無しさん2010/07/05(月) 22:03:05
<俺専用メモ>
dmdからFFTWを呼ぶ場合、
implibでlibfftw3-3.dllを処理したlibをリンクし、
リンケージはextern(Windows)ではなくextern(C)を使う
</俺専用メモ>
0779デフォルトの名無しさん2010/07/06(火) 07:50:28
何につかってるの?
0780デフォルトの名無しさん2010/07/07(水) 11:58:52
>>778
xml手書きするおとこの人って、、、
0781デフォルトの名無しさん2010/07/07(水) 16:42:21
enum Hoge : Fuga* {
HAGE = cast(Fuga*) 0b1,
...
}

てな感じで列挙体定義すると
Hoge.HAGE
で
Error: no property 'HAGE' for type 'Fuga'
って怒られてしまう。

これってDMDのバグ?
0782デフォルトの名無しさん2010/07/07(水) 18:14:31
実行時にしか決まらないポインタをコンパイル時に決まるenumで扱うこと自体間違ってるような
0783デフォルトの名無しさん2010/07/08(木) 04:43:16
>>782
ポインタの下位3ビットが0になることを利用して、
1つの値で31ビット整数とポインタ値を表現できるってやつをやろうとしてるのです。
スクリプト言語の値表現でよく使われるやつ。

で、処理系の実装上で使う特殊な定数値をenumで定義しようとして>>781のエラーにぶちあたった。

けどDにはGCがあるからポインタ直接触るのはよくないっぽいね
0784デフォルトの名無しさん2010/07/08(木) 14:20:29
>>783
ポインタで持たなければいいんじゃない?
■ このスレッドは過去ログ倉庫に格納されています