1 名前:デフォルトの名無しさん [2008/02/10(日) 15:06:12 ] プログラミング言語 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://tinyurl.com/3da5oa (C/C++に疲れた人のD言語) 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動画) ■ IDE ttp://dronten.googlepages.com/dscite (DSciTE) ttp://forums.codeblocks.org/index.php?board=20.0 (Code::Blocks) ttp://www.dprogramming.com/entice.php (Entice Designer) ttp://www.dsource.org/projects/descent (Descent) ttp://www.dsource.org/projects/poseidon (Poseidon)
49 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 16:29:09 ] 今のphobosはSVNで管理されてるわけだが たまにウォルターとアンドレイ以外の名前でコミットされてるよね あれのメンテナになるには直接掛け合わないといかんのかね
50 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 16:50:07 ] synchronized {}とsynchronized (o) {}って何が違うの?
51 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 16:50:18 ] >>49 48のページの Login → Register で登録して、ログインするのかな?
52 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 17:10:12 ] >>50 www.kmonos.net/alang/d/2.0/statement.html#SynchronizedStatement oが同じもの同士は同時実行されないんじゃないの?
53 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 17:18:01 ] >>50 synchronized {} == synchronized(this){}
54 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 17:37:26 ] >>53 それは間違いだろう synchronizedだけだとそのスコープ内のみ保護される
55 名前:53 mailto:sage [2008/02/12(火) 17:58:33 ] あーそうか。その通りだ。スマソ
56 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 18:31:46 ] >>50 ・全国で同時に一人だけ、貯金を引き出せる。 ・全国で同時に一人だけ、同じ口座番号から貯金を引き出せる。 この2つ、待ち時間がどう違うかを考える。
57 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 22:16:25 ] 文字列にコードを埋め込みたいんだけど、なにかいい方法ないかな? たとえば、下の1)を2)にしたい。 1) "a == ${a}, a/2 == ${a/2}" 2) format("a == %s, a/2 == %s", a, a/2)
58 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 22:37:13 ] CTFEで文字列を処理してmixinすればいいだけじゃないの?
59 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 23:28:58 ] >>57 これで良くね? 未テスト注意。 string myprint(string code){ return "format(\"" ~ code.replace("${", "\",").replace("}", ",\"") ~ "\")"; } void main(){ mixin(myprint("a == ${a}, a/2 == ${a/2}")); }
60 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 23:32:40 ] scopeの効能ってアクセス保護だけ?
61 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 23:37:12 ] いくらGCが働くと言っても80MBもメモリを使ってるのを見ると精神衛生上良くないな。 なんとかならんもんか。
62 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 23:48:18 ] >>60 どのscopeのことだい? 変数に指定するscopeストレージクラスなら、変数の書き換えを抑制し、 変数がスコープアウトするときに、変数の指すオブジェクトをdeleteする。 仕様上は。
63 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 23:53:02 ] >>61 定期的にGC走らせてやればいいんじゃないか? GUIアプリケーションならユーザの入力がないときとか。
64 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 00:04:53 ] >>63 fullCollect(); これを使えば良いのかな? これを処理する関数が終わったところに書いてみたけどタスクマネージャーから見てわかるような開放はしてくれなかった。
65 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 00:20:10 ] std.gcのなかで >>void minimize(); >>物理メモリの使用量を最小にします。 って言うの見つけた。試してないけど。
66 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 00:23:33 ] >>64 fullCollectの後minimizeかな。phobosのGCはこれ実装してないけど。 tangoのほうはつい数日前に実装されたっぽい。
67 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 00:23:53 ] >>62 回答どうもです。 scope の書きかたって scope クラス インスタンス = new クラス; で良いんですよね。 今作成中のプログラムで↑で書くと OPTLINK (R) for Win32 Release 8.00.1 Copyright (C) Digital Mars 1989-2004 All rights reserved. D:\Programs\ProgLang\D\dmd\bin\..\lib\phobos.lib(winsock) Offset 25A8BH RecordType 00C3 Error 1: Previous Definition Different : _htons@4 --- errorlevel 1 とリンカがエラーを吐きます。 ためしに今作ってみた↓だと問題なくコンパイル、リンクが出来たのですが。。。 import std.stdio; void main(){ for (int i = 0; i < 5; i++){ scope win w = new win(); w.wl("test"); } } class win{ void wl(char[] s){ writefln(s); } }
68 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 00:27:03 ] >>64 fullCollect()でもminimize()でも一度増えたメモリ使用量は減ってない気がするな これってこういうもんなの?それともバグか何か? >>66 と思ったら実装されてないのかよ。。。
69 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 00:33:16 ] >>66 うわっ 実装されてなかったのか… どおりで何も起こらないわけだ。
70 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 00:35:02 ] >>67 んー、それはリンカエラーだからscopeとは関係なさそうだ WS2_32.LIBリンクするのやめてみたら。
71 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 00:39:00 ] fullCollect()は参照されてないもののデストラクタを呼ぶ minimize()は参照されてないところのメモリを開放する って感じか。でminimize()は未実装と
72 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 00:42:58 ] >>70 リンクしないとプログラム動きません。。。
73 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 00:50:31 ] class A{ this(){ writefln("A:constructer"); } ~this(){ writefln("A:destructer"); } } void main() { scope A a = new A(); a = null; } こうするとデストラクタが呼ばれないんだけどこういうもの?
74 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 00:54:36 ] >>73 それずいぶん前にもここで見た気がするんだが、まだ直ってないのか
75 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 00:55:53 ] >>73 そういうもの。スコープの最後でdestructorを呼ぶから。
76 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 01:01:57 ] >>74 コードが不正だって結論じゃなかったっけ……と思ったけど > scope への初期化以外の代入も禁じられています。 > Rationale: これらの制限は、 もっともな理由が見つかれば将来的には緩和されるかもしれません。 なんて書いてあるな。緩和された? ……これは緩和せんでもいいような。
77 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 01:04:21 ] >>75 スコープの外れた時点で入ってるもののデストラクタを呼ぶってのはわかるんだけども、 scope A a = new A(); って感じに変数宣言と同時に代入したもののデストラクタが二度と呼ばれなくなるっぽい scope A a; a = new A("a"); a = new A("b"); こんな感じにわけると"b"の方のデストラクタがスコープ外れたときに呼ばれて ""
78 名前:77 mailto:sage [2008/02/13(水) 01:05:57 ] 途中で送ってしもうた scope A a; a = new A("a"); a = new A("b"); こんな感じにわけると"b"の方のデストラクタがスコープ外れたときに呼ばれて "a"のほうはプログラム終了時にちゃんとデストラクタが呼ばれた
79 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 01:07:14 ] >>75 a = null; を無くすと、デストラクタが呼ばれるんだが・・・。
80 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 01:08:40 ] >>76 なるほど そしたらコンパイルエラー出してくれればいいのにな
81 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 01:10:54 ] >>79 ?
82 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 01:16:27 ] デストラクタが呼ばれないことがあるのはきついな。
83 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 01:26:27 ] どう考えてもコンパイラのバグだろ。
84 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 01:49:03 ] >>76 緩和されてなくて、scope変数の中身を変えるコードの時点で未定義動作だろね。 エラーが出ないのは前からなんだけど、scopeはfinal扱いにすりゃいいんじゃないかと思う。 …って、もしかして変数宣言のfinal属性って仕様は消滅してる? constな伝播性のない定数的扱いで使いがありそうだったのに。 どっかで話があった、「宣言時やコンストラクタ以降でも構わない、 一度だけ代入する変数」って概念を与える属性として復活してくれりゃいいなあ。
85 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 01:51:50 ] finalはなかった事になりました。
86 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 02:38:51 ] finalは最初からなかったです
87 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 02:41:57 ] finalは生きてるよ、enumの心の中で。
88 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 02:42:15 ] え?いつの間に final なくなったの? それ2.0の話?
89 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 02:57:09 ] TangoのConduitsの辺りを読んでみようと思って久しぶりにマニュアル見てみたら ttp://www.dsource.org/projects/tango/wiki/Manual これ分散コンピューティング用のライブラリか? ttp://www.dsource.org/projects/tango/wiki/ChapterClustering なんかすっげーのを入れる気なんだな
90 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 08:21:30 ] まじか
91 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 10:51:47 ] >>71 phobosには実装されないんでしょうか…。
92 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 11:02:14 ] なんかphobosの整備はをるたんの中で優先度最低っぽいから……
93 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 14:35:56 ] TangoがDの命名規約守ってくれればをるたんもTango任すんじゃないのかなあ
94 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 22:36:47 ] std.randomがクラスじゃなくて構造体で実装されてるのはなんで?
95 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 22:38:45 ] 値型で十分だからじゃないかな
96 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 22:39:06 ] 軽いからでしょ。
97 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 22:51:12 ] 早いw いや、十分だし実際値型で実装できてるんだけども。 UniformDistributionとかで使うから各エンジンのインターフェースは揃えてるわけで、こういうのって継承でやるのが普通だよね? まあ軽いのかもしれないが、わざわざ値型を選択する理由になるのかなーとか思っていた。結構違うもんなのかね。サンクス。
98 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 22:52:23 ] 乱数は速度が要求される事もあるし、 仮想関数の呼び出しコストを嫌ったんじゃね。
99 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 23:01:52 ] たかだか関数一つでクラス化されたら、使うのが面倒くさくなる。。。
100 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 23:39:27 ] 面倒くささは一緒だろう。
101 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 00:18:56 ] 構造体にインターフェースを適用させようぜ的な話があった気がするんだけど、どこで沸いた話だっけ。
102 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 00:23:10 ] カンファレンスのスライドじゃなかったか
103 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 00:39:32 ] もう関数はタプル返せるようになった?
104 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 08:52:09 ] 返せないときがあったの?
105 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 08:59:35 ] 104は未来人か何かか
106 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 09:24:03 ] 104はあたしの所に来なさい、以上。
107 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 12:55:09 ] "Learn to Tango with D" がアマゾンから届いた。 索引は欲しかったな...
108 名前:104 mailto:sage [2008/02/14(木) 13:07:03 ] Tuple!(uint,"w", uint,"h") size(); こういうことじゃなくて?なんか勘違いしてたらごめん
109 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 13:52:15 ] std.typeconsのタプルという名前の汎用構造体型じゃなくて、 template Tuple(T...){ alias T Tuple; }の方のタプルだよ。
110 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 14:49:27 ] typeconsなんてあったんだ今知ったです
111 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 21:11:16 ] tangoでGCを切って、GCコードを含めずコンパイルする方法ってどこかに載ってる?
112 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 21:23:17 ] そんなことしたらそもそもTango自体が使えなくなるんじゃないか?
113 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 21:31:52 ] >112 そういえばそうだな。 フックさせるDLLはGC切りたくて、gcstub.objリンクする方法試してみたけど上手くいかなかった。 というかそもそもgcstub.objがtango+dmdのセットに入ってなかったからphobosの方から取ってきてた。 tangoは使えなくなるんだし、別にtangoセットのdmd使う必要もないな。...試してくる。
114 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 21:49:06 ] /⌒ヽ / ´_ゝ`)すいません、ちょっと場所お借りしますよ・・・ | / | /| | // | | U .U D言語BOF オープンソースカンファレンス2008 Tokyo/Spring www.ospn.jp/osc2008-spring/ サイトにて参加登録が始まりました。 空きがあれば当日参加できますが、申込数に応じて部屋(の大きさ)が変わるらしいので登録お願いします。
115 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 21:58:16 ] import std.c.stdio; void main(){ printf("Hello"); } を dmd main.d -c dmd main.obj gcstb.obj ってしたら、exeが出来たんだけど、実行しても何も表示されない。
116 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 22:22:23 ] エントリポイントがないから。 extern(C) int main(int argc, char* argv) { main(); return 0; }
117 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 22:33:14 ] >>116 を追加したらちゃんと表示された。サンクス。 ってことはGCのコード外すとDプログラムの前処理や後処理のコードも消えるってことか。 Dのプログラムはどこにエントリポイントがあるのかと思ってたけど、そんなところにあったのか。
118 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 22:44:48 ] gcstubリンクすると連想配列使えないとかforeach使えないとか、 様々な悪夢が起きるからやめたほうがいいと思うよ。
119 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 22:45:21 ] >>117 エントリポイントはphobosが持ってる。
120 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 03:03:11 ] www.kmonos.net/alang/wnd/topics/winapi.ja.html この辺を参考にしてwin32プログラムに挑戦してるんですが、 以下のプログラムを実行すると、強制終了してしまいます。 これって何が悪いんでしょうか。 import win32.core, std.string; extern (Windows) int WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { format("%d", 2); return 0; } コンパイラはDMD v2.010です。
121 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 04:19:43 ] GCとか初期化する前にformat読んだからじゃない? www.kmonos.net/alang/d/2.0/windows.html
122 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 04:31:54 ] できました!ありがとうございます。 自分でWinMainを書くと、phobos側でやってくれたGCの初期化処理が行われないんですね。 納得です。
123 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 04:47:40 ] 自分でWinMainってなんの為に書くの? 公式だと書いてるけどわなDには「書く必要はない」ってあるし。引数が欲しいから?
124 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 05:41:03 ] >>123 あ、そこら辺俺も知りたい。 普通の言語で、エントリポイントは何をしてからmainに回ってくるのか、mainの前にいくつ経由してくるのか、 WinMain/DllMainだとどう違うとか。それで、D言語だと他のと違ってこれをする。とか。 エントリポイントあたりを解説してるサイトとかないかな。 あと自分で調べたこともちょっとメモ。間違ってたら指摘ください。 GC切ったプログラムに挑戦してる中で、DllMain()で自分で呼んでる_minit()/_moduleCdtor()/_moduleUnitTests()/_moduleDtor()が何をしてるか知りたくてソース見てきた(Phobos)んだけど、 _minit()はModuleInfoって奴をD言語形式に変換してる。おそらく_moduleCdtorとか呼ぶ準備。アセンブリでたった数行だった。 _moduleCtorはコンストラクタ実行らしい。ソース読んでも良く分からなかったけど、コンストラクタ/デストラクタ/単体テストの準備をしてたと思う。あと中でnewが使われてたから、GC切った環境でこれ呼ぶと落ちる。 残りの二つはおそらく_moduleCtorの準備したデータにアクセスしてる。_moduleDtorはデストラクタ実行。_moduleUnitTestsは単体テスト実行。他のことはしてないっぽい。 というわけで今はモジュールコンストラクタも単体テストも書かず、↑の関数一つも呼ばずにDLL作ってます。
125 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 06:39:29 ] >>123 Win32APIの勉強をするにあたって、 wisdom.sakura.ne.jp/system/winapi/win32/index.html ここを参考にしてるからです。 形式を合わせただけなので、WinMainを自分で書いたことに特に意味はありません。
126 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 09:53:56 ] ちょっと解説してみようか。 たとえばCのスタートアップでは、コンソールハンドル(stdinとかね)のopen、 例外機構を持つ言語ならそのセットアップ等、プログラムを実行するために必要な準備をしてから、 ユーザープログラムの開始点を呼び出す。 もちろん、後処理(開いているハンドルのcloseとかatexitの関数実行など)も含まれている。 DMDの場合、Dとしてのスタートアップの前に、DMCのスタートアップがあるのが少しややこしいところ。 DMCのスタートアップ→DMDのスタートアップ→ユーザープログラムという三段構えになっている。 DMCでは、ソース中に含まれるmain、WinMain、DllMain等を判別し、 それに応じた(DMCの)スタートアップを自動的にリンクするようになっている。 この仕組みをDMDから使用した場合、Phobosに含まれるextern(C)のmainがDMCからみたmainということになり、 そちらが呼び出されることによって、Dのスタートアップが実行されるという仕組みになっている (DMCからは、いわゆるextern(D)な関数の変名規則は未知なので、Dのソースコードのmainは、DMCからmainとして認識されない)。 ライブラリのリンク優先度は低いので、先にWinMain等が見つかると、 そちらのスタートアップが使用されるため、Phobos内のextern(C)のmainは呼び出されず、 Dのスタートアップは実行されない。 WinMain等で手動でスタートアップの関数を書かなければいけないのは、この仕組みのため。
127 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 19:47:29 ] 構造体のポインタにwithしてもパラメータ呼び出せるようにならないかなー
128 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 19:48:59 ] 言葉間違えすぎわらったです パラメータじゃないメンバー
129 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 20:52:19 ] >>127 *付けて with(*p) とかにすると大丈夫みたいだよ。
130 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 21:50:32 ] >>129 う、うぃずぴー・・・
131 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 05:07:57 ] 最近このスレ寂しいな。 ところで、Cスタイル可変個引数関数を使おうとしたんだけど、 extern(C) void foo( int a, ... ){ void* p = _argptr; } って感じで_argptrを使おうとすると、 Error: undefined identifier _argptr とエラーが出た。多分バグかと。 とりあえずC言語で可変個引数のメモリ配置とか調べてみると 単純に引数が順番に置かれてるだけだった。 だから解決策として、 void* p = cast(byte*)&a + int.sizeof; って自分で求めてこれを_argptrとして使ったら今のところ上手くいってる。これって既出? あとついでにDスタイルの可変個引数のメモリ配置も調べてみたんだけど、どうやらCスタイルと一緒っぽい。
132 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 06:42:17 ] Tango XML now in trunk! dsource.org/projects/tango/forums/topic/393 超期待
133 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 08:44:31 ] >132 おぉーこれは…… ってかTangoってなぜあのへんてこな構文なのか誰か教えてorz
134 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 09:17:40 ] >>133 どのあたりが変? 実はphobosあまり知らずにtangoから入ったからあまり使いにくさを感じない。 結構すっきりしてて使いやすいと思う。 確かにモジュール名が大文字始まりなのは最初は変だと思ったけれども。
135 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 09:28:18 ] 2.0の対応予定無いのかなあ。 モジュール名のこととか、なんかもうちょい足並みが揃って欲しい。
136 名前:133 mailto:sage [2008/02/18(月) 09:55:02 ] Cout("Hello")(" ")("World").newline; ttp://www.dsource.org/projects/tango/wiki/TutSimpleIO とか、とにかく \n が .newline ってのが馴れないんだよね。
137 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 09:59:55 ] あー、それは確かに驚いたけど、そんな書き方自分は使わないからあんまり気にならないかなw というかいつもStdout使ってる。あれ?Coutってもしかして\n使えない?
138 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 10:18:05 ] >>131 そういや仕様書のCスタイル可変個引数の例文の方でも、 Cのリンケージと言いつつextern(C)しない_argptrのコード例しか 載ってないんだよな。 2.010で再現した。バグだろね。たぶんスレでは初出。
139 名前:131 mailto:sage [2008/02/18(月) 10:22:47 ] あ、バージョン書き忘れてた。自分のはDMD1.026です。 ちなみにぐぐってみると www.digitalmars.com/d/archives/digitalmars/D/What_happened_to_argptr_47894.html なんてのがあった。 2007/2 ...もう一年前だな(遠い目
140 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 19:15:32 ] >>132 まだ candidate だけど phobos にもこんなのがきているわけだが。 dsource.org/projects/phobos/browser/candidate/phobos/std/xml.d
141 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 19:38:04 ] 1年でそんなに変わるもんじゃないですね
142 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 01:06:32 ] ここで聞くか、win32apiのところで聞くか迷ったけどここで。 ウインドウを左クリックしたら、メニューを出すプロシージャを書いたんだけど ちゃんと”終了”というメニューが出てこない。(何か短いメニューのようなものが出る) どこが悪いんでしょう。 wndは項目がクリックされたらメッセージを送るウインドウのハンドルです。 case WM_LBUTTONDOWN: POINT nowPoint; GetCursorPos(&nowPoint); SetForegroundWindow(wnd); hMenu = CreateMenu(); AppendMenu(hMenu, MF_ENABLED | MF_STRING, 1, cast(wchar[])("終了")); TrackPopupMenuEx( hMenu, TPM_RIGHTALIGN | TPM_BOTTOMALIGN, nowPoint.x, nowPoint.y, wnd, null ); break;
143 名前:デフォルトの名無しさん [2008/02/19(火) 01:19:20 ] cast(wchar[])じゃなくてcast(wchar*)とか?
144 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 02:07:31 ] >142 CreateMenu() じゃなくて CreatePopupMenu() じゃないでしょうか。
145 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 04:31:46 ] >>142 cast(wchar[])でも問題無いが、cast(wchar*)を使うべき。 cast(wchar[])"終了"と書くと文字列が配列として作られるから、長さ情報とかも生成される。 cast(wchar*)"終了"と書くと文字列へのポインタとして作られるだけで、配列の情報は生成されない。
146 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 05:37:00 ] "終了\0"w.ptrが一番カッコいい気がするのは俺だけ?
147 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 05:40:10 ] いや、お前だけじゃないw でも毎回そう書くのは面倒だけどな。
148 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 07:00:55 ] >>140 Phobosいろいろ修正されてるんだな
149 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 07:23:39 ] >>144 それでした。 ありがとうございます。 >>143 >>145 わかりました。windowsapiに渡すときはそうすることにします。