- 1 名前:デフォルトの名無しさん [2005/09/11(日) 23:54:01 ]
- おそらく、.NET開発でデファクトスタンダードに最も近い
であろうC++/CLIについて語ろうぜ!
- 220 名前:デフォルトの名無しさん mailto:sage [2005/11/22(火) 21:33:23 ]
- STL.NETはどこからダウソできるん?
- 221 名前:デフォルトの名無しさん [2005/11/24(木) 09:32:05 ]
- STL.NETじゃね?
- 222 名前:デフォルトの名無しさん mailto:sage [2005/11/24(木) 11:46:15 ]
- > ネイティブ−マネージドの遷移は負荷が高い
え?
- 223 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 01:21:05 ]
- >>219
だたホスティングしてもmscoree.dll をCOMで呼び出すだけだからあまり変わらない気がするが、 同じプロセス空間に複数のアップドメインを作ってアセンブリを起動するシェルのようなものを作れば、 それなりに起動は速くなるかもしれないですね。 >>222 え? managed codeからnative codeをオーバーヘッド無しで呼べるといいたいのかな?
- 224 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 01:44:09 ]
- 呼べるでしょ。
データの受け渡しにコストがかかるだけで。
- 225 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 01:47:36 ]
- >>224
呼べません。
- 226 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 01:53:34 ]
- 一見そのまま呼べるかのように振る舞うだけじゃなかったか
- 227 名前:デフォルトの名無しさん [2005/11/25(金) 02:04:50 ]
- オーバーヘッドって具体的にどんな処理してるんだろ。
- 228 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 02:08:03 ]
- マーシャリングとかじゃね?
- 229 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 02:12:24 ]
- マネージドとネイティブの世界には分厚い境界線
なるものが存在するんですよ。 その境界線を越えようとするものは某北朝鮮から脱国するがごとく リスクを負わなければならないのですよ。
- 230 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 06:46:32 ]
- intしか使わないネイティブを、
SuppressUnmanagedCodeSecurity, LinkDemandすればコストほとんどなしなんじゃないの? 構造体もValueType使えば、ボクシング/アンボクシング行われないしね。
- 231 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 09:22:48 ]
- >>229
つ Borland(R) Developer Studio 2006 ttp://www.borland.co.jp/news/20051124_bds2006.html マネージドとネイティブをコンパイルで切り替えだお。
- 232 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 11:14:41 ]
- value class制限大杉
- 233 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 21:30:37 ]
- ref structとvalue classの違いは?
ref structって値型じゃないの? ref classとref structの違いって何よ?デフォルトpublicとprivateの違いだけ?
- 234 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 22:31:14 ]
- ref ←→ 値型
ref class と ref struct の違いは class と struct の違いと同じ ref 型がCLRに管理されてるクラス。value 型は primary な値を意味するクラス
- 235 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 22:44:30 ]
- OKありがとう。とてもわかった
- 236 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 23:02:55 ]
- 値型だと
デフォルトコンストラクタ コピーコンストラクタ デストラクタ ファイナライザ 代入演算子 が定義できなかったよ。 デフォルトコンストラクタが定義できないんで引数無しのタグクラス食わせてるんだけど 何かあるんだろうか... それとデストラクタが定義できないせいで単純にnewすると解放ができない。
- 237 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 23:07:16 ]
- >>236
C#って知ってる?
- 238 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 23:08:24 ]
- > newすると解放ができない。
なんか言ってることおかしくない? 解放って?
- 239 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 23:12:33 ]
- >236
値型は primary な型を作るためのものだから、int とかにデフォルト・コンストラクタや ファイナライザを定義しないでしょ?
- 240 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 23:13:13 ]
- >>236
値型は、初期化しによる初期化、代入などで、 memcpyが行われるだけでいいようなオブジェクトに使う。 定義できなかったと言うより、定義しないでいいものに使う。
- 241 名前:236 mailto:sage [2005/11/25(金) 23:15:45 ]
- >>238
template <typename T,typename TAG> value struct a { T *p; a(TAG) { p = new T();//NativeC++のスマートポインタが使えないのでCLIなスマートポインタが必要ぽい } };
- 242 名前:236 mailto:sage [2005/11/25(金) 23:21:43 ]
- >>239,240
参照型だとコピーコンストラクタいちいち用意するの面倒じゃん。 C++とC++/CLI両対応のソース書きたいので値型にしてる。
- 243 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 23:38:57 ]
- >>242
.Netでは「クラスは参照型」となっているのだからいつか破綻する。
- 244 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 23:40:16 ]
- それは思考が逆で、
コピーコンストラクタが必要ないから値型にしているのであって、 面倒だから参照型を使わないんじゃない。
- 245 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 23:41:57 ]
- 値型か参照型かは性能にもろに影響してくるから
適切に選択した方がいいよ
- 246 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 23:56:47 ]
- 普通にクラスを書けばいいんじゃないか?
わざわざ値型で定義しようとするから、苦労しているだけだと思うが
- 247 名前:デフォルトの名無しさん mailto:sage [2005/11/26(土) 08:19:50 ]
- >>45
LLVMがgccに入りそうな勢いだなあ。
- 248 名前:デフォルトの名無しさん mailto:sage [2005/11/28(月) 09:42:42 ]
- 参照を初期化リストで初期化できないのですが、
なぜなのでしょうか? value struct UseRef { explicit UseRef(int& in_i) :i(in_i) {} int& i; }; ref struct TestRef { int i; UseRef r; TestRef() :r(i) {} };
- 249 名前:デフォルトの名無しさん mailto:sage [2005/11/28(月) 13:52:01 ]
- 値型は生成時にデフォルト値を持つ必要がありますが、標準C++ の int 型はデフォルト値を
規定されていません。そのため、生成時に不定となる値の参照を型として保持できないと思われ
- 250 名前:248 mailto:sage [2005/11/28(月) 16:40:53 ]
- >>249
ありがとうございます。 参照型でも試してみましたが、やはりだめみたいでした。 一度、GC Heapにgcnewしてそこからinterior reference?(int%)を取得することで 参照のように扱うことはできました。 どうも値型のメンバには値型かGcHeap(Cloneされる)しかおけないようです。 また、interior ptr|referenceのときもクラスのメンバにはできないようです。
- 251 名前:デフォルトの名無しさん mailto:sage [2005/11/28(月) 18:05:46 ]
- まぁ、仕様書見るとそう書いてありますね
- 252 名前:デフォルトの名無しさん mailto:sage [2005/11/28(月) 22:05:15 ]
- 俺の勘で。
ref struct TestRef { int i; UseRef r; TestRef() : i(0), r(i) {} };
- 253 名前:デフォルトの名無しさん mailto:sage [2005/11/29(火) 16:38:04 ]
- UseRef のデフォルト・コンストラクタが不定値を持つから駄目ぽ
- 254 名前:デフォルトの名無しさん [2005/12/01(木) 17:33:26 ]
- 組込型だと
普通のref class とvalue classで通るコードでエラーがでるんだけど 属性とかでなくコンパイラにはじかれてるのかな? Int32 o_int(0); Int32^ g_int = gcnew Int32(0); Int32% r_int = *g_int; //Int32^ rg_int = %r_int;//NG //String o_str;//NG String^ g_str = gcnew String(""); //String% r_str = *g_str;//NG //String^ rg_str = %r_str;//NG
- 255 名前:デフォルトの名無しさん [2005/12/02(金) 02:00:31 ]
- なんだか汚い言語になっちゃいましたね
perlみてー
- 256 名前:デフォルトの名無しさん mailto:sage [2005/12/02(金) 03:41:08 ]
- C++が汚いのはもとからだろ
- 257 名前:デフォルトの名無しさん mailto:sage [2005/12/02(金) 07:44:32 ]
- >>255
思いつきで拡張してるよね。 C++の世界では有名な人達がやっているんだが…
- 258 名前:デフォルトの名無しさん mailto:sage [2005/12/02(金) 07:49:14 ]
- だれだっけ?
- 259 名前:デフォルトの名無しさん mailto:sage [2005/12/02(金) 08:28:53 ]
- Stanley Lippman
staff.develop.com/slip/ blogs.msdn.com/slippman/ www.microsoft.com/presspass/press/2001/oct01/10-19lippmanpr.mspx Herb Sutter www.gotw.ca/ blogs.msdn.com/hsutter/ www.microsoft.com/presspass/press/2002/Mar02/03-13SutterPR.mspx
- 260 名前:デフォルトの名無しさん mailto:sage [2005/12/02(金) 12:51:52 ]
- Perlは美しい。C++もああいうの目指すべき。
- 261 名前:デフォルトの名無しさん mailto:sage [2005/12/02(金) 13:27:41 ]
- >>260
漏れはあまり詳しくないんだが、そうか???本当にそうなのか???????
- 262 名前:デフォルトの名無しさん mailto:sage [2005/12/02(金) 15:34:59 ]
- そんなあなたに Brainf*ck
- 263 名前:デフォルトの名無しさん mailto:sage [2005/12/03(土) 00:57:17 ]
- >>255-257
良くも悪くもC++的っていう気はする。
- 264 名前:デフォルトの名無しさん mailto:sage [2005/12/03(土) 11:30:30 ]
- C++は細かいところで汚いなりに、それなりのポリシーがあったが、
C++/CLIに至ってはなんでもありだ。実装の都合としか思えないものもある。
- 265 名前:デフォルトの名無しさん mailto:sage [2005/12/03(土) 19:46:54 ]
- C++をぐちゃぐちゃにしC++コミュニティーを崩壊させる。
↓ C++の衰退とC#の反映
- 266 名前:デフォルトの名無しさん mailto:sage [2005/12/03(土) 20:47:05 ]
- C#はメジャーにならない
断言する
- 267 名前:デフォルトの名無しさん mailto:sage [2005/12/03(土) 21:11:34 ]
- 名無しで断言されても……
- 268 名前:デフォルトの名無しさん mailto:sage [2005/12/03(土) 22:04:56 ]
- >>265
それか!!
- 269 名前:デフォルトの名無しさん mailto:sage [2005/12/04(日) 18:49:26 ]
- C++/CLIの設計コンセプトは「拡張機能を使わなければ、既存のC++と変わらないこと」だから
別にC++に変な影響を与えないと思うけど
- 270 名前:デフォルトの名無しさん mailto:sage [2005/12/04(日) 20:03:25 ]
- 果たしてそうかな
- 271 名前:デフォルトの名無しさん mailto:sage [2005/12/04(日) 20:18:12 ]
- >>270
そうだよ。
- 272 名前:デフォルトの名無しさん mailto:sage [2005/12/04(日) 20:56:43 ]
- 関係ないが、親玉格のC(99)がやらかしてくれてるからなあ。
- 273 名前:デフォルトの名無しさん mailto:sage [2005/12/04(日) 21:15:11 ]
- C++はまだ「生きた」言語なんだよ。
まだまだ進化する。
- 274 名前:デフォルトの名無しさん mailto:sage [2005/12/04(日) 21:41:25 ]
- ここに書いて良いのかわからんかったんですが。
タスクマネージャーの「CPU使用率の履歴」みたいな動的な(?)グラフを出せるものを書きたいのですが 何から手をつければいいのか、全くわかりません。 アドバイスよろしくお願いします。
- 275 名前:デフォルトの名無しさん [2005/12/04(日) 21:46:55 ]
- age
- 276 名前:デフォルトの名無しさん mailto:sage [2005/12/04(日) 22:13:21 ]
- >>274
とりあえず↓この本読め。 www.amazon.co.jp/exec/obidos/ASIN/4872331265/qid=1133701895/sr=1-1/ref=sr_1_10_1/249-6035794-3226728
- 277 名前:デフォルトの名無しさん [2005/12/05(月) 09:58:09 ]
- >>272
C99のマズイところでどんなとこ? 得に思い当たらないんだけど
- 278 名前:デフォルトの名無しさん mailto:sage [2005/12/05(月) 11:34:16 ]
- エラーのthrow/catchが、cとc++で別になったのは痛い。
MFCとC++、C丼とC++、MC++とC++、C++CLIとC++、それぞれ結局別物と思われてるところも痛いけど。
- 279 名前:デフォルトの名無しさん mailto:sage [2005/12/05(月) 11:43:35 ]
- 実際別物
- 280 名前:デフォルトの名無しさん mailto:sage [2005/12/05(月) 15:13:07 ]
- MFCを持ち出してくるところが痛い。
- 281 名前:デフォルトの名無しさん mailto:sage [2005/12/05(月) 15:30:50 ]
- MFCって、mc++とかC++/CLIから使えるんだっけか?
- 282 名前:デフォルトの名無しさん mailto:sage [2005/12/05(月) 18:32:19 ]
- C++/CLIやmc++の構文を使ってないコードを /clrでコンパイルしたものを
C++/CLIやmc++のプログラムと読んでいいかどうかによるけど、 そう呼んでいいなら使える。
- 283 名前:デフォルトの名無しさん mailto:sage [2005/12/05(月) 18:41:23 ]
- managed と unmanagedの型でデータ交換したいのですが、
COMを使うしかないのでしょうか?
- 284 名前:デフォルトの名無しさん mailto:sage [2005/12/05(月) 19:07:05 ]
- >>283
具体例を挙げてわかるように質問してくれ。
- 285 名前:デフォルトの名無しさん mailto:sage [2005/12/05(月) 19:10:17 ]
- >/clrでコンパイルしたものを
どういったオプションでつか?
- 286 名前:283 mailto:sage [2005/12/05(月) 19:33:39 ]
- >>284
混合クラスにできないだけで、 別クラスにしておいて呼び出しは可能だったのね... Marshalingできる時はしたほうがいいのかな ttp://msdn2.microsoft.com/library/ms235282(en-US,VS.80).aspx
- 287 名前:修正 mailto:sage [2005/12/05(月) 21:25:49 ]
- unmanagedからmanagedの呼び出しはできないみたい。
- 288 名前:デフォルトの名無しさん mailto:sage [2005/12/05(月) 22:45:23 ]
- CLRホスティング・・・
- 289 名前:デフォルトの名無しさん mailto:sage [2005/12/06(火) 03:01:26 ]
- managed c++, c++/CLI なら
managed から nativeのモジュールを呼び出すことも cl /MT /c submod.cpp cl /clr mainmod.cpp submod.obj native から managedのモジュールを呼び出すこともできる。 cl /clr /c submod.cpp cl /MT mainmod.cpp submod.obj
- 290 名前:デフォルトの名無しさん mailto:sage [2005/12/06(火) 07:34:09 ]
- 最強
- 291 名前:デフォルトの名無しさん mailto:sage [2005/12/06(火) 10:52:01 ]
- unko
- 292 名前:デフォルトの名無しさん [2005/12/07(水) 23:15:01 ]
- C++/CLIの存在意義って?
マネージならC#でよくね?
- 293 名前:マイク ◆yrBrqfF1Ew mailto:sage [2005/12/07(水) 23:19:32 ]
- そうだな。
- 294 名前:デフォルトの名無しさん mailto:sage [2005/12/08(木) 00:28:08 ]
- やっぱりC#?
C++から移植するのってどれぐらい工数かかるんだろうか・・・・
- 295 名前:デフォルトの名無しさん [2005/12/08(木) 00:32:04 ]
- ぶっちゃけ、WindowsアプリならVC++6&MFCが最強では?
あえてC#を覚えようとする気がしない。 VC++6&MFCでつれないWindowsアプリはない。
- 296 名前:デフォルトの名無しさん mailto:sage [2005/12/08(木) 00:39:03 ]
- かわいそうな人
- 297 名前:デフォルトの名無しさん mailto:sage [2005/12/08(木) 01:10:46 ]
- あえてCを覚えようという気がしない。
機械語で作れないwindowsアプリはない。
- 298 名前:デフォルトの名無しさん mailto:sage [2005/12/08(木) 01:24:49 ]
- あえて計算機を覚えようという気がしない。
脳内で計算できない問題はない。
- 299 名前:デフォルトの名無しさん mailto:sage [2005/12/08(木) 06:10:14 ]
- 切り返すなら同じ性質の物事を書かなきゃ :-P
- 300 名前:デフォルトの名無しさん [2005/12/08(木) 08:16:12 ]
- >>297
俺も未だに機械語で書いてるよ Cだとおせーから嫌だ
- 301 名前:デフォルトの名無しさん mailto:sage [2005/12/08(木) 08:28:05 ]
- >>295
なるほど、いろんなWindowsアプリさんたちが釣れるようでつね。
- 302 名前:デフォルトの名無しさん mailto:sage [2005/12/08(木) 11:44:15 ]
- >>295はLonghornが出たら干される使い捨てデジドカ
- 303 名前:デフォルトの名無しさん [2005/12/08(木) 20:59:47 ]
- OSが記述できてしまう
C++は絶対に廃れないよ しかも、デバイスドライバを書ける人は絶対に不可欠 C#やJAVAなんてモノが出来ても結局また 新たな言語が出てきて廃れるのは必至
- 304 名前:デフォルトの名無しさん mailto:sage [2005/12/08(木) 21:14:47 ]
- つまりCOBOLと似たようなもんだ。
新しい言語の出現で全盛期より減ったとは言え、需要がなくなることはありえない。
- 305 名前:デフォルトの名無しさん mailto:sage [2005/12/08(木) 21:44:19 ]
- 歩く死体か。
- 306 名前:デフォルトの名無しさん mailto:sage [2005/12/09(金) 02:03:11 ]
- Cで必要にして十分な件。
- 307 名前:デフォルトの名無しさん mailto:sage [2005/12/09(金) 11:02:38 ]
- 既存のプログラムが全部マネージ環境で通るようにライブラリとか
整えて欲しい。 printfやstrcmp使うとネイティブとの混合アプリになっちゃうんでしょ? 標準ライブラリの中も.NETにすりゃあいいのに。
- 308 名前:デフォルトの名無しさん mailto:sage [2005/12/09(金) 11:24:49 ]
- 混合になってなんかマズイことでもあるのかい?
- 309 名前:デフォルトの名無しさん mailto:sage [2005/12/09(金) 13:12:07 ]
- >>307
あなたは根本的にCLIの世界を理解してないです。
- 310 名前:デフォルトの名無しさん mailto:sage [2005/12/09(金) 16:26:18 ]
- >>308
混合だとWin以外に持っていけるの?(あるかはしらんけど) あと、切り替え時に異様に遅い感触。 >>309 根本を教えてくれ
- 311 名前:デフォルトの名無しさん mailto:sage [2005/12/09(金) 16:43:46 ]
- 感触って君の思い込みのこと?
- 312 名前:デフォルトの名無しさん mailto:sage [2005/12/09(金) 16:53:06 ]
- >>311
/clrつけてコンパイルしなおしたプログラムが異様に遅い。 .NETにしてもちょっと遅すぎると思ってね。原因がネイティブ 部分の呼び出し負荷くらいしか思い当たらない。
- 313 名前:310 mailto:sage [2005/12/09(金) 17:37:18 ]
- 簡単なやつで試してみた。環境はPen4-3GHz
int a=0; while(a++<200000000){ stricmp("abc","123"); } ネイティブアプリだと1、2秒、CLIだと12秒くらいかかる。 stricmpをmy_stricmpに変えて、以下のように適当に定義してみると、 ネイティブでもCLIでも1、2秒で終わる。(my_stricmpは適当。要は 標準ランタイムを呼ばなければ良い) int my_stricmp(const char*a,const char*b){ while(*a++==*b++){ if(a[0] == 0) return 0; } return -1; } ちなみに、strcmpだとCLIでも1、2秒で終わるのだが、良く分からん。 strcmpだとCLIでもインライン展開されるのかな?
- 314 名前:310 mailto:sage [2005/12/09(金) 17:42:54 ]
- >>313の例ではネイティブへの切り替え以外に負荷になる要素は
無いと思うんだが、識者の意見希望。
- 315 名前:デフォルトの名無しさん mailto:sage [2005/12/09(金) 18:51:09 ]
- 関数の処理が遅いのか、CLR の起動に手間取っているのかは、ちゃんと分けた?
- 316 名前:310 mailto:sage [2005/12/09(金) 19:01:59 ]
- >>315
my_stricmpを使ってネイティブと時間の差が無いのだから、 起動時間の問題じゃないと思う。 あと、ループの回数を増減させれば処理時間も比例する。
- 317 名前:デフォルトの名無しさん mailto:sage [2005/12/09(金) 20:03:25 ]
- >>313
strcmpは?stricmpだとCLIの方はロケールとかで色々面倒くさい ことしてそう。
- 318 名前:デフォルトの名無しさん mailto:sage [2005/12/09(金) 20:56:41 ]
- >>313
ではlstrcmpはどう? これなら絶対にインライン展開できない。
- 319 名前:310 mailto:sage [2005/12/09(金) 21:15:00 ]
- >>318
lstrcmp,これから試してみるけど先に質問。 >>317に関して、 俺、やはり根本が分かって無い模様。strcmpは313に書いた通りなのだが、 stricmpの場合でも、CLIからネイティブと同じルーチンが呼ばれるもんだと 思っていた。 この前提で、中身が一緒なら呼び出してる部分に負荷があるんじゃないかと 思っていたわけだが、ネイティブとCLIで呼び出されるstricmp(に限らず標準 ライブラリ全般)は別物なの?
- 320 名前:デフォルトの名無しさん mailto:sage [2005/12/09(金) 22:17:02 ]
- >>319
その試した見たというコードをどこかのアップローダに晒すというのは どうだい?そうすれば同じ土俵で話ができる。
|

|