1 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 23:00:35 ] プログラミング言語 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の入門講座)
792 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 00:41:46 ] >>788 Dのクラスは参照型だから、C++でいうとC*に相当する。 だから、cast(void*)c1 == cast(void*)this; になるはず。
793 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 00:54:54 ] >>788 Cをstructでやってみれば、C++と同じ結果になると思うよ。
794 名前:788 [2008/02/07(木) 01:18:41 ] >>792 なるほど。その通りになりました。 参照型。。。あれよく分からないんだよなあ。
795 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 01:25:54 ] struct内でもthisはポインタだった気がするんだけどまぎらわしいようそうでないような
796 名前:788 [2008/02/07(木) 02:19:19 ] >>795 試してみたら、構造体ではthisは普通にポインタみたいです。
797 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 04:27:40 ] synchronized ( Expression ) ScopeStatement これの存在意義がわからないです・・ どなたか教えていただけますか
798 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 08:28:04 ] Object lock = new Object; void foo() { bar; synchronized(lock) { hoge; fuga; piyo; } buz; } とかでメソッド全体よりも細かい単位でロック制御できる
799 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 08:42:34 ] >>798 横レス失礼 それって、Mutexとどこか違うの? 逆に、Tangoのtango.core.sync.Mutexって意味あるの?
800 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 08:47:00 ] ブロックから出れば勝手にロックが解除される
801 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 08:51:39 ] >>799 要するにMutexだよ。 tangoのMutexはsynchronized文での自動lock/unlockだけじゃなくて、 手動でもlock/unlock/tryLockが出来る www.dsource.org/projects/tango/wiki/ChapterThreading#Mutex
802 名前:799 mailto:sage [2008/02/07(木) 09:50:33 ] なるほど、ありがとう。把握した。 大した違いはないけど、より細かいことがやりたかったら synchronized ( Expression ) ScopeStatement だの、Mutexクラスだのを使えってことか。
803 名前:797 mailto:sage [2008/02/07(木) 11:41:03 ] なるほど、Mutexとして使えばいいのですね ありがとうございました
804 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 12:04:54 ] この俺をさらに強固なアンチMSにしてくれたね。 痛い目を見るよ、この結果は。
805 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 12:20:34 ] でもぶっちゃけお前スライムより弱いべ?
806 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 13:50:19 ] かたやMSは絶好調時のムドーより強い
807 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 13:53:13 ] Descent 0.5.1
808 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 18:33:18 ] tangoの日本語ドキュメントは、何処かで公開されてないですかね?
809 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 18:50:21 ] Descentつかってる方におききしたいんですが、 デバッグ機能としてのbreak-pointや、watchもばっちりなんですか?
810 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 18:51:32 ] >>808 今のところこの二つしかない ttp://shoo.s20.xrea.com/shoo/programing/ ttp://f17.aaa.livedoor.jp/~labamba/?tango
811 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 20:51:11 ] MSにパクられた ttp://namidame.2ch.net/test/read.cgi/news/1202382434/
812 名前:808 mailto:sage [2008/02/07(木) 20:52:35 ] >>810 ありがとうございます。 見て来ましたが、ぜんぜん日本語化進んでないって事ですねw 英語ダメダメだから、安物の翻訳ソフトでも買おうかな。
813 名前:デフォルトの名無しさん [2008/02/07(木) 21:15:01 ] 今Dでキーボードフック(グローバル)を書いてみてるんだけど、なぜか上手くいかない。 ちゃんとDLLからSetWindowsHookEx呼んでるし、SetWindowsHookExは成功してるみたいないんだけどな。 Dだとグローバルフックが出来ない理由ってある?(ローカルは出来た) もうちょっとコード見直してきます。
814 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 21:44:24 ] そーいやD言語でググってたらSunにもD言語があるのを見つけたっけなぁ。 ウォルタンはSunからは何も言われなかったんだろうけど。 Firebirdほど大きな問題にはならない気がするけど、 やっぱややこしいから変えてほしいところだ。
815 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 21:48:46 ] Sunのほうが5,6年後でしょ。
816 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 21:55:14 ] >>813 グローバルフックなら共有データセグメントとかメモリマップトファイルとか使って、 フックハンドルをプロセス間で共有できるようにしないといけないよ。 ローレベルフックを使うのも一つの手。
817 名前:813 [2008/02/07(木) 22:02:14 ] >>816 今までずっとそう思ってたんですが、WindowsXP/2000ではCallNextHookExの第一引数はNULLでいいらしいです。 第一引数に何か渡しても無視されるそうな。
818 名前:813 [2008/02/07(木) 22:04:11 ] msdn2.microsoft.com/en-us/library/ms644974.aspx
819 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 22:06:51 ] D言語でもお麻衣さんの問題はAPIスレで面倒みてもらったほうがよろしかろ
820 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 22:11:22 ] MSがD言語作るらしいぞ headlines.yahoo.co.jp/hl?a=20080206-00000007-cnet-sci
821 名前:819 [2008/02/07(木) 22:12:07 ] 実はVC++2008で書いたコードでは上手くいっているのでAPIというよりDLLの問題かなと。 そのVCで作ったDLLをDのmainから呼び出した場合上手くいきました。
822 名前:813 [2008/02/07(木) 22:13:18 ] 失礼。↑は813です。
823 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 22:14:45 ] >>820 何回同じ話題振ったら気がすむんだよww 同じスレぐらい検索しろ
824 名前:デフォルトの名無しさん [2008/02/07(木) 22:32:00 ] >>820 別物なんだよ。
825 名前:デフォルトの名無しさん [2008/02/07(木) 22:36:19 ] ネームぱくられました
826 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 22:44:43 ] たぶん、D言語では商標とれないよね。
827 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 23:06:27 ] >>813 ソースコード見てみたーい
828 名前:813 [2008/02/07(木) 23:19:49 ] いろいろしてみたけど結局分からないorz >>827 というわけで載せるためにソース整形してきます。
829 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 23:30:07 ] >>815 あ、ほんとだ。 向こうのnewsでも「"D"も有名になったもんだ =P」なんて皮肉られてる……のかな? 英語ヨクワカラナーイ。
830 名前:813 [2008/02/07(木) 23:50:35 ] ↓DLLのソース // test_hook.d module test_hook; import win32.winbase; import win32.windows; static import tango.stdc.stdio; import tango.stdc.stringz; import tango.io.Stdout; pragma( lib, "tango-user-dmd.lib" ); HANDLE g_hModule = cast(HANDLE) null; // DLLのモジュールハンドル HHOOK g_hHook = cast(HHOOK) null; extern (C){ void gc_init(); // GC初期化 void gc_term(); // GC終了 void _minit(); // モジュールリスト初期化 void _moduleCtor(); // モジュールコントラクタ実行 void runModuleUnitTests(); // 単体テスト実行 }
831 名前:813 [2008/02/07(木) 23:51:14 ] extern(Windows) BOOL DllMain( HANDLE hModule, ULONG ulReason, LPVOID pvReserved ){ switch(ulReason){ case DLL_PROCESS_ATTACH: gc_init(); // GC初期化 _minit(); // モジュールリスト初期化 _moduleCtor(); // モジュールコンストラクタ実行 runModuleUnitTests(); // 単体テスト実行 g_hModule = hModule; break; case DLL_PROCESS_DETACH: gc_term(); // GC終了 tango.stdc.stdio._fcloseallp = null; // DLLが終了しても標準入出力を閉じないようにする。 break; case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: return false; } return true; } export extern(Windows) void HookStart(){ g_hHook = SetWindowsHookEx( WH_KEYBOARD, cast(HOOKPROC)&KeyboadProc, g_hModule, 0 ); }
832 名前:813 [2008/02/07(木) 23:51:53 ] export extern(Windows) void HookStop(){ UnhookWindowsHookEx( g_hHook ); } extern(Windows) LRESULT KeyboadProc( int code, WPARAM wParam, LPARAM lParam ){ if( code != HC_NOREMOVE && code >= 0 ){ MessageBox( cast(HWND)null, toString16z( "Key pushed" ), toString16z( "test_hook" ), cast(UINT)0 ); return 0; //処理をした。 } return CallNextHookEx( cast(HHOOK)0, code, wParam, lParam ); }
833 名前:813 [2008/02/07(木) 23:53:57 ] ----------- ↓main.exeのソース // main.d module main; import win32.winbase; import win32.windows; import tango.stdc.stringz; pragma( lib, "tango-user-dmd.lib" ); const wchar[] HOOKDLLNAME = "test_hook.dll"; alias extern(Windows)void function() FUNC; FUNC HookStart, HookStop; void main(){ auto hMod = LoadLibraryW( toString16z( HOOKDLLNAME ) ); HookStart = cast(FUNC) GetProcAddress( hMod, "HookStart" ); HookStop = cast(FUNC) GetProcAddress( hMod, "HookStop" ); HookStart(); MessageBox( cast(HWND)0, toString16z("フックしています。"), toString16z("main"), cast(UINT)0 ); HookStop(); FreeLibrary( hMod ); }
834 名前:813 [2008/02/07(木) 23:58:15 ] ----- // test_hook.def LIBRARY 'TEST_HOOKDLL' EXETYPE NT CODE PRELOAD DISCARDABLE DATA PRELOAD SINGLE EXPORTS HookStart @1 HookStop @2 -------- 以上です。 環境はtango 0.99.4 ( dmd 1.024 ), Binding Win32API -Unicodeでコンパイル。
835 名前:813 [2008/02/08(金) 00:03:33 ] あ、-version=Unicodeのことです; フック中に他のアプリでキーを押すとMessageBoxを出します。 が、実際は反応してくれません。メモ帳起動->main.exe->メモ帳でキーボードを押す、として反応しませんでした。 さっき気づいたのですが、なぜかほかのコマンドプロンプト上のキーボード操作には反応するみたいです。
836 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 00:50:18 ] Dがなんか特殊なことやってんのかもね。 俺もグローバルフックプロシージャ内で try/catch() 文書いたら全プロセスがこけた。 SEHフレームの構築で何かやらかしてんじゃないかと予想してるが。
837 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 01:00:42 ] 2chにソースはるなボケ
838 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 01:03:48 ] 罵倒するほどでもないが、読みにくいのは確かだな。
839 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 01:09:25 ] 【技術】マイクロソフト、新開発言語「D」を開発中[08/02/07] news24.2ch.net/test/read.cgi/bizplus/1202379742/
840 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 01:10:40 ] なんどめだ
841 名前:813 [2008/02/08(金) 01:11:27 ] すみません、スペース入れようかどうか迷ったのですが結局入れませんでした。 全角スペース挿入だとコンパイルする人が半角に直すのが面倒かと思い、 nbspを入れるのも考えたんですけど、それが一般的なのかわからなかったので、そのまま入れました。 ソースを張るときはどうするのが一般的ですか?
842 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 01:15:12 ] 1レスに収まりきらないなら、適当にアーカイブ化してどっかのアップローダにでも上げればいいんじゃないかな。 複数ファイルだとビルドするのも面倒だしねえ。
843 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 01:19:25 ] >>776 >>811 >>820 >>839 開発開始を宣言しただけなのに大々的に取り上げられすぎだろw
844 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 01:23:48 ] >807 stringがエラー扱いにならなくなってるな。ありがたい。
845 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 01:32:08 ] おお、Descentがstringをchar[]として認識するようになった。 全体的にautocompletionが賢くなって、aliasの扱いが改善されてるらしいな。 "str".tolower()とかはまだエラーって言われるけど。
846 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 01:34:21 ] ttp://blogs.itmedia.co.jp/satohiroshi/2008/02/d-3d55.html こうやって宣伝に乗っかるわけか。
847 名前:デフォルトの名無しさん [2008/02/08(金) 01:45:45 ] >>846 ちょw DigitalMars完全否定w
848 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 02:00:25 ] tango入れてないので、Phobos用に少し書き換えてやってみたけど、症状ほぼ同じ。 自分とこの環境では、メモ帳が固まったまま応答無くなる。
849 名前:813 [2008/02/08(金) 02:10:22 ] あ、出来た... defファイルの DATA PRELOAD SINGLE を DATA PRELOAD にすることでちゃんとフック出来ました。 defファイルの書式(メモリ指定あたり)とか調べても見つからなかったからサンプルのまま使ってたけど、ここだったんですね。 C++の方ではdefファイルを書かずに作っていたので普通にフック出来ていたようです。 >>848 試していただいてありがとうございます。 次からは長いコードはアーカイブするなり気をつけますm あと、defの書式やオプションの解説はどこかにありますか?
850 名前:813 [2008/02/08(金) 02:17:40 ] 勘違い。VC++の方でもdefは書いてたけど、EXETYPE/CODE/DATAの設定が無視されてました。
851 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 02:25:36 ] >>849 www.digitalmars.com/ctg/ctgDefFiles.html
852 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 06:06:17 ] >>846 あれだな、情報操作に一番騙されるのって、「自分の頭で咀嚼する」意欲だけはあるけど、 調べる気があんまり無く、誘導されるままに「自分なりの見解」に辿り着いて満足しちゃうタイプの人間だよな。 この短いブログを書く時間で、D言語が既に存在するかどうかなんて調べられるのに、 「あるかどうか」という事実より、「実はなかったということのようです」という見解をひけらかすほうが大事なわけだ。 まったく思考が発展しない馬鹿のほうが、その点では無害かも。
853 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 07:38:26 ] 製品化してないものは存在しないという考えかもね。 DMDなんて同人サークルが勝手に作った独自言語程度に思われてたらやだな。
854 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 09:26:11 ] digital marsって会社のポジションがよくわからん。 IT世界的に見たらどれくらいの影響力があるんだろう。
855 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 10:03:49 ] IT世界とかあやふやすぎるだろ・・・ Cコンパイラ界、ECMAScript界なら 結構いいはずだぜ! たぶん
856 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 10:37:19 ] トップページに会社情報がないあたりが何とも。 ウィキペディア(英語のほう)みた感じだと 小規模なベンチャーかな?って思った。
857 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 12:07:13 ] digitalmarsは本当にWalterタンの同人サークル程度のもんだが。 コンパイラ界でWalter Brightの名前を知らん人間はいないだろ常識的に考えて、くらいの影響力。
858 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 12:21:56 ] それはともかく次スレからはDigitalMars Dって書かないといかんな めんどくせえ
859 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 12:39:27 ] 後発がMicrosoft Dって書くもんじゃね?
860 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 12:53:44 ] >>859 まったくだプリプリ
861 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 14:38:04 ] 文字コードの変換はこのモジュールを使うしかないんでしょうか。 www.wikiroom.com/sakurai/index.php?DJcode これを使ってみたんですが、全く同じデータを渡してもたまに末尾にゴミが混じるようで変換時に末尾に〓がついたりします。
862 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 17:53:45 ] encoding周りをちゃんと実装してるライブラリは見ないね。 iconvとか使ってみるといいかも。
863 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 18:28:57 ] >>861 キミがそいつのバグを取ってくれたら、38万の日本のDユーザが喜ぶよ
864 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 18:56:45 ] >>668 ttp://f17.aaa.livedoor.jp/~labamba/?D%B8%C0%B8%ECBOF >特に仕事に使ったという事例。2chにいたらしい
865 名前:デフォルトの名無しさん [2008/02/08(金) 18:58:46 ] Eclipse起動しただけでメモリ83MBくってる。。。でかすぎ. ちなみにVC++2008Expressは28M
866 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 20:15:20 ] もはやメモリ1G五千円の時代だよ。 28と83なんて大して変わらない。
867 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 20:16:17 ] 誤差だな
868 名前:809 mailto:sage [2008/02/08(金) 20:58:29 ] >>809 どなたか、よろしくお願いします・・・
869 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 21:03:13 ] >865 GoogleDesktopに600Mほど食われたのに比べればどうということはない
870 名前:デフォルトの名無しさん [2008/02/08(金) 21:06:11 ] >>866 メモリ512MBノート使ってますorz 増設しようかと思ったけど今主流のノートメモリの一つ前のタイプらしい。 新しいノートに変えたときに流用出来ないんで、やめときました。
871 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 21:12:36 ] >>866 >メモリ1G五千円 ノートか? 今は樋口一葉で2GB買えるだろw
872 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 21:14:34 ] バルクか
873 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 21:22:32 ] >>871 そりゃ味を選ばないならいくらでも食えるだろ。
874 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 21:29:45 ] >>868 なぜ自分で試さない? ttp://www.dsource.org/projects/descent/wiki/DebuggingPrograms ttp://ddbg.mainia.de/doc.html
875 名前:809 mailto:sage [2008/02/08(金) 21:54:48 ] >>874 うわぁ、すいません m(_ _)m ありがとうございます!
876 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:07:45 ] >>873 ノーブランドだったら1GBで英世2枚だよ メーカー製でも4枚要らない そのくらいのことも調べずに価格の最新事情を指摘されたくらいで「味を〜」とか騙らないでね
877 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:23:09 ] 何を必死になってるのかさっぱり分からん。
878 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:23:36 ] 言っとくけど俺をあまりナメないほうがいいよ vipでコテハンやってるしこのスレ潰すくらいの影響力は持ってるから くだらないことで刺激して後悔しないようにね
879 名前:デフォルトの名無しさん [2008/02/08(金) 22:25:34 ] >>878 ぺろぺろ
880 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:28:27 ] この味は! ・・・ウソをついている『味』だぜ・・・
881 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:28:59 ] じゃあつぶせば? それとも口だけ?
882 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:30:34 ] まったくだ
883 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:33:11 ] >>878 えーと・・・ この場合つっこんだら負けなんだろうな。
884 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:33:28 ] 最近はやってきたコピペだしな
885 名前:デフォルトの名無しさん [2008/02/08(金) 22:34:40 ] >>884 だよね。さっきSleipnirのスレで同じ文章見かけた。
886 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:35:02 ] 俺もgdi++スレで見たよ
887 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:38:11 ] 他所のスレで見かけたコピペをすぐに使いたくなっちゃう子って可愛いよね。
888 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:41:03 ] たった3行でここまで哀れみを誘うコピペ作ったやつも凄いな。 俺さっきから得も言われぬ哀れみを感じて表情が微妙なままだ。
889 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:44:51 ] それマジで言ったん?ソースあんならすぐ出せ マジなら2ちゃんねら総力を上げて潰すが
890 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:45:30 ] 大漁だなw お前らコピペだと分かってるならスルーしろよw それくらいもできないのかこのオタクどもはww
891 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:48:02 ] この流れは参加しないと勿体ないとおもっちまって。 D言語スレでやるこっちゃないけどな。
892 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:48:38 ] いまどき、後釣り宣言は流行らねえだろ