• ベストアンサー

managed-C 使ってますか?

唐突な質問で恐縮です。 私、制御系or技術計算系ソフトウェアをC/C++で開発しているものですが、.NET環境での開発にmanaged-C の利用が必要ということで、二の足を踏んでいます。 その理由としては、 1、計算速度が非常に重要なので、中間コードベースの.NETは遅い(?推測?) 2、unmanaged-C クラスをmanaged-C クラスに書き換えるのはすごく手間かかりそう 3、.NETの中でどんな処理されているのか見えにくいので、メンテがたいへんそう。 そこで、皆様の意見を伺いたいのですが、 managed-Cで開発されている方いらっしゃいましたら、どんなところがmanaged-C開発のメリットでしょうか? なんでもかまいませんので、お教えください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.3

1、計算速度が非常に重要なので、中間コードベースの.NETは遅い(?推測?) 最適化コンパイルしたC/C++より遅くなるのは仕方ないことです。 ですがVB6ほど遅いわけではありませんし単純計算ならそれほど遅いわけではありません。 究極はインラインアセンブラですが。 気になるのはJavaもそうですが最初の起動が遅いことですね。 2、unmanaged-C クラスをmanaged-C クラスに書き換えるのはすごく手間かかりそう 書き換える理由がわかりません。共存ができるのに書き換える必要がありますか? 3、.NETの中でどんな処理されているのか見えにくいので、メンテがたいへんそう。 むしろ自分がメンテしなくていいというのが.NETのメリットです。既にあるものを利用できれば開発期間を短縮出来ます。 ただNet内部にバグがあったらMSに報告するということになります。

egeg007
質問者

お礼

回答ありがとうございます。 とても参考になりました。 ちなみに、2は私もmanaged-cの勉強を始めたばっかりなので、よくわかってないのが現状です。 参考程度に、 class X { char m_str[100]; }; を __gc class X {(クラス内同定義)} にするとだめだったので、書き換えが必要なのかな~?というレベルの認識です。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.4

既存のクラスに__gcを使いたいのなら __gc class X { char m_str __nogc [100]; }; 或いは __gc class X { char m_str __gc []; }; にする必要はあるみたいですね。

全文を見る
すると、全ての回答が全文表示されます。
  • terra5
  • ベストアンサー率34% (574/1662)
回答No.2

C#とVB.NETは使いましたが、managedだからという利点は感じたことは無いですね。 まあ、昔ならVB+C/C++のDLLでやっていたことが、C/C++だけで出来るのがメリットっぽい気がする程度です。 あとは、原理的にはWindows以外でのプラットホームでも動かせることですかね。 速度はだいぶ遅くなるでしょうね。配列も全てクラスとして実装されているし。 書き換えの手間は、クラスによるのでは? 計算関係のクラスならそれほど手間にならないような気がしますが。 それと、マネージドとアンマネージドでは変数の扱いが違うので、インターフェイスに悩まされました。 結局変換が必要になるので。 そのためのクラスなどは用意されていますが、これもオーバーヘッド要因ですね。

egeg007
質問者

お礼

回答ありがとうございます。 >あとは、原理的にはWindows以外... これって、大きなメリットですね、 ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

マネージドC++は次のバージョンから大幅に仕様が変更されるので、現時点から手をつけるのは余りお勧めしません。 計算速度が必要なのであれば、アンマネージドコードでコア部分を実装して、GUI等の.NETに依存する部分だけC#かVBで実装するというのはいかがでしょうか?

egeg007
質問者

お礼

早々の回答ありがとうございます。 次のバージョンで変更されるのは初耳でした。 MS のホームページ要チェックですね。。。 >計算速度が必要なのであれば、アンマネージド... 同意見です。 ただ、作成するソフトがエンジン部分ばかりなので、GUIの開発はほとんどありません。 Matrixソルバーとか、n次方程式の解...とかの計算ばかりなので、やはりマネージドC++の採用は少し見送ってみます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C言語による実務での開発

    C言語による実務での開発について質問します。 学校でC言語の学習はしたことがあるのですが、実際に 実務についたことが無く、C言語を使った実務というのが どのようなものなのかイメージがつかめません。C言語で なくても、もっと他に便利な言語やソフトがあると思うのですが。 販売管理や給与計算なども実際にC言語で作られていつのでしょうか。 それとも、制御系といわれる分野で使われるものなのでしょうか。 C言語でこんなものを開発した、などと言うのをお聞かせいただきたいです。 自分の興味のことなので、本当にひまなときにでもお答えいただければと 思います。 学校で学んでいたので、ソフトウェア開発技術者試験やテクニカル エンジニア(ネットワーク)試験などを在学中に取得しているので、 多少の知識はあるのですが、実務となると・・・ 今はoffice2000ぐらいしか使っていません。

  • C++ MFCについて

    現在、開発言語を検討中です。 以前C# .NETで開発を行ったのですが、各PCに.NETのインストールが必要になり、手間がかかったので、C++ MFCで検討しています。 C++にはネイティブとマネジメントとあるのですが、 ネイティブ=MFC マネジメント=.NETという解釈で良いのでしょうか? MFCも一応はクラスを使うので、マネジメントに入るのでしょうか? この辺りの線引きが微妙で悩んでいます。 ネイティブの方が高速とあちらこちらに書いてあるのですが、.NETと比較すると何%くらい早いのでしょうか? ご存じの方がおられましたら、ご教授願いますm(__)m

  • ゲーム開発がしたい。学ぶべきはC++かC#か。

    現在、小さな事務系ソフトウェア開発会社でプログラミングをやっている者です。 思う所あって、ゲーム系の会社への転職を考えています。 応募にあたって作品の提出が必要なことは存じていますが、 どの言語を勉強し、開発すべきかで迷っています。 開発したいゲームとしては、STGかRPGで考えています。 2Dか3Dかは特にこだわりがありません。 過去に行ったプログラミングは、ゲームの関係の薄いものばかりで、 「ゲーム開発」について本格的に学んだことはありません。 学生の頃はロボットを制御するために、C言語のプログラムを書いていました。 PCとマイコンのシリアル通信のために、C#でwindowsアプリケーションも作りました。 C++もほんの一時期だけ使っていました。 卒業してから日が浅いので、これらの知識はまだある程度あります。 会社ではaspxとJavaScriptでWebページの外面、内部の動作をVBで行なっています。 触れたことのあるプログラミング言語を理解度順に並べたら多分こんな感じです。 VB≒C#>C>JavaScript>>>C++ C#とVBは似通った言語なので、VB中心の現在でもなんとなく理解できます。 現在最もメジャーらしいC++が最も経験が少なく、自信がないです。 軽く調べた感じでは、現在のゲーム開発はC++が多いが、 今後はC#やJavaも増えるかもという感じでどちらでゲーム開発を本格的に学ぼうか迷っています。 最もメジャーなC++を改めて学ぶべきか、 それともある程度使えるC#での開発方法を学ぶか、 あるいはその他の言語か、助言をお願いします。 また、開発の参考文献なども教えていただけると幸いです。 よろしくお願いします。

  • C言語を始めようと考えている者です

    某国立大理学部数学科の1回生です 4月から2回生の講義でC言語の講義があります。 以下がその内容となります 授業の到達目標 (1) 2進整数の計算、浮動小数点数の計算ができる。 (2) コンピュータが計算を行う基本的な仕組みがわかる。 (3) (2)の内容を実際にC言語で確認できる。 (4) C言語で簡単な数学の問題を解くプログラムを書くことができる。 授業スケジュール 講義  1. 計算と計算機の歴史  2. 2進整数の計算  3. 補数の考え方  4. 浮動小数点数の計算  5. 基本的なデータ型  6. プログラムの条件分岐構造  7. 中間試験  8. プログラムの繰り返し構造I  9. プログラムの繰り返し構造II 10. 配列I 11. 配列II 12. 関数 13. 素数に関する問題を解くプログラム 14. 微積分に関する問題を解くプログラム 15. 学期末試験とその解説 僕は今まで全くC言語プログラミングをしたことがありません。 他の言語も同様です。 http://www.forest.impress.co.jp/library/software/gakucgengo/ このサイトに出ている文法を学ぶことができる開発環境はダウンロードしました。 卒業後はgoogleに就職したいので今のうちからC言語は学んでおきたいのですが 先ず、何を学べばよいのかわかりません… 「アルゴリズム」や、「コンピュータの計算の仕組み」などを学ぶ必要もあると思うのですが 何から手を付ければよいのでしょうか? 考えが煮詰まってしまっています。アドバイスなどお願い致します。 因みに、現在用いているOSはwindows7です。 もしよろしければ、C言語初心者が学び始めるにあたって力強い書籍、サイトなど ありましたら教えてください。 よろしくお願い致します。

  • Visual C# について教えてください

    今まで、VB を使って Windows アプリを作ってきました。VB 歴は 10 年弱で、RS-232C 経由で測定機器を制御する Windows アプリなどを多数書いてきました。 先日 ANSI C の研修を受け、コマンドプロンプトで動くプログラムなら、C 言語でもある程度のものが書けるようになりました。これを機に、開発環境を VB から C ベースのものに移そうと考えています。 最近 VC# という言語がありますよね? 本屋でパラパラと見たところ、VC# は VB と似た環境で Windows アプリの開発ができそうで、その詳細を知りたくなりました。 現在、VC++ をはじめるか、VC# をはじめるか、悩んでおります。 質問は以下の3点です。 ・VC# で、EXE ファイル単体で動く Windows アプリが作れるのでしょうか? ・本やネットなどで、VC++ のサンプルソースは多く見かけますが、VC# のソースはあまり見かけません。これは開発を行う上で不利になりますか? VC# は VC++ のサンプルソースをほとんど流用できるのでしょうか? ・総合的に判断して、私には VC++ と VC# のどちらが適当だと思いますか? 個人的な判断で構いません。 以上、宜しくお願いいたします。

  • ミドルウエアの具体例を教えてください。

    初級シスアドで、OSとアプリケーションソフトの中間に位置するものとしてミドルウエアがあり  ・データベース管理システム(DBMS)  ・通信管理システム(LAN制御を含む)  ・ソフトウエア開発支援ツール  ・EUCツール  ・運用管理ツール 説明されています。なんとなく具体例が推測できるものもありますし、ぜんぜんイメージできないものもあります。 そこで、推測が間違っていないか確認したいのと、イメージできないものの場合具体例をあげていただければ助かります。 (1) データベース管理システム(DBMS) 多分、OracleやSQL-SeaverやMySQLのようなものだと思うのですが。 この推測はあってますか? (2) 通信管理システム(LAN制御を含む) プラットホームや使用アプリが違う場合のデータのやり取りを行うようなもの・・・というイメージがあります。使用アプリの場合はODBCドライバみたいなものの様な(全然自信ない)、プラットホームとなると実例が浮かんできません。 (3) ソフトウエア開発支援ツール なんでしょう?プログラミングジェネレータのことでしょうか。 EXCELマクロの自動記録機能なんてのもこれに入るのでしょうか。ひょっとするとEXCELマクロは、次のEUCツールでしょうか? (4) EUCツール AccessとかEXCELとかでしょうか。イメージ沸きません。 (5) 運用管理ツール う~ん・・・なんでしょう? 補足:IMEとかもミドルウエアと考えてよいのだろうか? WEBで調べるとワープロや表計算もミドルウエアと定義しているものもあります。それは少し拡張解釈なような気がします。 いずれにせよ、すっきりした定義と具体例を書いてあるものを見つけられないのです。 宜しくお願いします。

  • メモリを確保する方法(アセンブラにおけるORGの様な)ありませんか?

    PICボードの制御プログラミングをC言語で行っています。 通常は、コンパイラで自動的にメモリ領域の確保を行ってくれます。 そこをあえてプログラミングで操作したいのですが 何か良い方法がありましたら教えて下さい。 目的プログラムは、タイマ割り込みによるLEDの制御です。 組み込みソフトウェア開発の勉強中です。

  • C++ 図からソースコード自動生成

    図からソースコードを自動生成するソフトがいっぱいありますが、これは内部でいったいどのような仕組みになっているのでしょうか? 内部の詳細を詳しく知りたく投稿させていただきました。 試しに、C++とjavaのクラスの定義(1クラスのみ)を図から行えるようなプログラムの作成を試みております。 以下2点で悩んでおります。 (1)2つの言語に対応するため中間言語を作る必要はあるのか? (2)図からコードを作る部分の開発が全く進みません。 似たプログラムの解説をしているサイトや本や公開されているソースコード、アドバイスありましたらご教授くださいませ。

  • クラス図

    Visual Studio2003 .NET C++で開発されているものの、 クラス図を作成したいと考えております。 規模がかなり大きく自力でのクラス図作成には時間がかかってしまうため、ツール(ソフトウェア)を使用したいと考えております。 何か、良いツール等がございましたら、教えて頂けないでしょうか。

  • 制御系ってSTL必要なんですか?

    私は、制御系・組み込み系の業務経験がありません。 UNIX C, Java, C#の経験があります。 最近、J2SE 5.0やC# 2.0などで、 「ジェネリック」という概念がでてきました。 C++のSTLがとても似ているように思えました。 自分の認識では、C++は今後、制御系などの分野 ぐらいしか用途がないように思っているのですが・・・ 制御系のC++でも、STLはバリバリ使うのでしょうか? それとも、制御系や組み込み系では、すべての ロジックが自作オンリーで、そのような汎用的な 車輪を使うことは不可能な世界なのでしょうか? この質問を至った経緯を以下に書きます。 1)Java 5.0, C# 2.0のジェネリックの概念を  学習するにあたって、C++のSTLを同時に学習した  ほうが、効果的ではないかとおもった。 2)Java, C#でプログラムを組む以上。C++の存在価値が  制御系・組み込み系への準備という位置づけでしか  見出せなかった 3)しかし、コレクションクラスなどを使った。  Java, C#の開発になれているため、すべてのロジック  をゴリゴリ書く開発に戻りたくないので、  C++なら、STLを使いたいと思った。  そして、それは(1)の目的を果たす意味で  重要だと感じた。 4)しかし、私は制御系、組み込み系の経験がないので、  C++でSTLというやりかたがその分野で通用するのか  わからなかった。  いくら、(1)の目的で勉強になるからといって、  学生がPascalを勉強するような、実務に  あまり関係のないことをやりたいとはおもわなかった  ので、制御系、組み込み系でC++でSTLという  組み合わせが現実的に有りえるのかどうかを  制御系バリバリの方にいろいろ聞いてみたいと感じた。 以上がこの質問をした経緯です。 よろしくおねがいいたします。