• ベストアンサー

VBでVC++の処理速さを実現する

ふと疑問に思ったので質問します。 あくまでも一般論ですが、VBはVC+より簡単だけどデメリットは処理速度が遅いことだそうです。 でもどちらも最終的には機械語?に訳されるんでしょ? じゃあ人間にとって作りやすいVBで作っても、最終的にはコンパイラがVC++と同じ機械語にしてくれたら良いと思うのですが。 どうしてそういう都合の良いことは出来ないのですか?

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

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.6

なんかいろいろと話が出てますが。 本質的にVBとVC++の違いは >あくまでも一般論ですが、VBはVC+より簡単だけどデメリットは処理速度が遅いことだそうです。 ですよね。 で、”簡単”というところでVBがどうして簡単なのかを考えていけばわかると思います。 簡単な理由: 1.データ型を意識しなくても自動的に変換してくれる ・・・VBが内部的にがんばって変換する処理を行っている 2.文字列が簡単に扱える。 ・・・VBが内部的に、領域確保やメモリ内のデータのコピーなどの処理をがんばってる。 3.画面にコントロールを貼り付けるだけで、簡単にGUIが完成する。 ・・・VBがフォームの表示等の一般的な必要となる処理、コントロールとのやり取りの処理等をすべて内部的に行っている。 4.ActiveXコンポーネントやCOMオブジェクトが簡単に使える。 ・・・VBが内部的なコンポーネントとのインターフェイス間のやり取りをすべて行っている。 みたいな感じですかね? ランタイムが必要とか、コンパイルが必要とかということとは別問題です。 ランタイムは、あくまでもVBのプログラムで内部的に共通で 行われる処理をまとめてDLL等にしたり、 VBで直接使用しづらい処理をActiveXコンポーネントにすとといったために使用します。 コンパイルも、ちゃんとネイティブコンパイルできますし。 で、このVBの簡単な点が全て実行速度というところに跳ね返ってきます。 2.やランタイムについては、VitaminBBさんはMFCをよく使われているのであれ?と思ったかもしれません。 MFCはCStringで簡単に文字列を扱えますし、MFCにはランタイムDLLも存在します。 実は、MFCもVBほどではないですが、”遅い”です。 フレームワークがC++で書かれているから速いとか言う問題ではなく、単純に、ある程度何でもできるフレームワークだから内部的な処理が多すぎるという点でMFCは遅いのです。 つまり、便利→内部的な処理が多い→遅いということになります。 #ただ、MFCの場合は、画面まわり、すなわちユーザーインターフェイスをMFCに任せ、演算などの高速処理を必要とするビジネスロジックはMFCを使わないということもできるので、このあたりがVBと違うところです。 VBで速くしようとすると、画面はVB、ビジネスロジックはCのDLLなんてことになります(よくありますが)。

VitaminBB
質問者

お礼

回答ありがとうございます。

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

その他の回答 (11)

  • azusaku
  • ベストアンサー率50% (15/30)
回答No.1

VBにもネイティブコードとPコードってのがあって、 ネイティブコードだったら、VCと遜色ないくらい 早いですよ。 当然、マシン語ですけども。 また、VCのメリットは、1つのプログラムで2つの処理を同時にできることです。 VBはできません。

VitaminBB
質問者

お礼

回答ありがとうございます。 Pコード、ネイティブコードってなんですか?

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

関連するQ&A

  • VB6, VB2005,VC# どれを学習したらよいでしょうか。

    VB6, VB2005,VC# どれを学習したらよいでしょうか。 やりたいことはデータベースやテキストファイル処理、インターネットコネクションのプログラミングです。 仕事でExcelVBAを時々使うので、以前から持っているVB6かと思ったのですが、なぜかMSDNがなくリファレンスがなく微妙です。本かウェブしか頼れない・・・。 ある程度の処理速度を求めていますのでExcelVBAではない方がいいのですが、これからのことを考えたらVB6よりもVB2005でしょうか? それともどうせVB2005はexcelとは大幅に文法が変わってしまうのだからC#? いろいろ調べるほどわからなくなってしまいました。 なおエクセルVBAも本に一通り書いてあることも満足にできない程度です・・・。(こちらにも役立てられるとさらにうれしいです)

  • VC++とVC#について

    VC#が出て久しいですよね。 MSが推奨する言語なのでそちらに移行するものと思っていましたが、処理速度が遅くなるという欠点があるそうですね。 プロの現場ではVC#へ移行しつつあるのでしょうか? それともまだまだVC++のほうが根強い人気なのでしょうか? いろいろなご意見お待ちしてます。

  • C言語やC++、VC++について

    C言語やC++、VC++について C言語やC++、VC++などはIL コードと呼ばれる中間言語が作成されるのでしょうか?それともコンパイラーがネイティブコードに変換されるのでしょうか?でもネイティブコードに変換すると機械語なので互換性がないのではないのでしょうか?それなのになぜ他のwindowsのパソコンで実行できるのはなぜなのでしょうか?そこら辺はどうなっているのでしょうか?

  • .NET C++の処理速度

    最近.NETについて調べていました。 .NETではコンパイル時にマネージドコードと呼ばれる中間ファイルが作成され、 それが.NETFramework上で動くという仕組みのため、C++で書こうがVBで書こうが 最終的にできあがるものは同じものになるということが分かりました。 私は、Cが有利な点は(Javaなど他の言語に比べ)処理速度が異常に早いことだと思っていましたが .NET上で動く場合はC++もVBも処理速度に差が出ることはあまりないのでしょうか? また、.NET、JVM、ネイティブのCの3つを比較した場合、 どのくらい処理速度に差があるでしょうか?(大雑把でもいいので) 私は [ネイティブC] >>>超えられない壁>>> [.NET] > [JVM] くらいかと思っているのですが‥ 以上、よろしくお願いします。

  • 混ぜちゃダメなんですか?

    プログラミングについて疑問があります。 最終的に機械語に変換されるなら、javaとRubyとかPHP、他の言語を混ぜたプログラムは作れるんですか? そういうの、やった人とかいるのでしょうか?  (言語って沢山あるんだ~、コンパイラって何?という超初心者レベルです。  お返事は素人が理解しやすいように書いて頂けたら嬉しいです。  よろしくお願いします。)

  • シェルとカーネルの概念とプログラムの処理の流れ

    興味本位で「プログラミング」について、調べ学んでる内にひとつの壁にぶつかりましたので質問させていただきます。 質問内容は「シェルとカーネル。そしてアプリケーション」になります。 素人ながら現在持っている論理を下記に列挙します。誤認識などあれば指摘いただければ幸いであります。 狭義での論争は、避けたいので、広義として理解頂ければと思います。(狭義や曖昧な点においてもある程度学習済み) 1. プログラミング言語には、低級・高級言語があり、ハードよりのC言語(影響下のC++, Objective-C)で作られたプログラムの実行速度は速い。 2. プログラム処理系には、インタプリタ・コンパイラがあり、一般ユーザーが使用するアプリケーションのほとんど(.exeなど)がコンパイラアプリケーション。 3. JavaなどVM環境下動作するアプリケーションは、中間言語で実行される。 4. OSには中核であるカーネルがあり、カーネルは人工言語(コンピューター言語)を機械語に訳し、各リソース(CPU・RAMなど)に処理を実行させる。 5. カーネルはシェルに覆われており、実際のユーザー側の処理のリクエストは、シェルを介して行われる。 6. シェルには大別して、CLI(CUI)とGUIがあり、CLIシェルはプロンプトが表示されるコマンドラインインタプリタ。 7. GUIシェルは、OSがオペレーションの意から、OSの各種機能(Windows System, エクスプローラー等)。※ 私は理解を容易する為にOSそのものをシェルと捉えてます。 長くなりましたが、上記を踏まえた上での質問が下記になります。 Q. iTunes, Word, などの各種アプリケーションの各種操作(処理、実行)というのは、コンピューター言語でシェルを介し機械語でカーネルまで橋渡しされるのでしょうか? なぜこのような質問になるかといいますと... プログラミング言語は機械語にコンパイルして、はじめてコンピューターに理解してもらえる事は百も承知です。 プログラミング言語で制作されたアプリケーションの処理や実行は当然、コンパイル済みの機械語で行うものと認識しております。(ここでは中間言語は除く) ここで冒頭に述べた壁に当たりました。洒落ではなく、私の中で「殻」もとい「壁化」してしまったシェルの存在です。 現在、持ち合わせてる論理から考察すると、機械語で実行された処理をシェルを介す意味がどこにあるのか?それとも介さずカーネルにそのまま引き渡してるのか? 私が間違っており、そもそも制作されたアプリケーションの処理や実行は、コンピューター言語であり、それをシェルを介しカーネルという流れがあるのならば、コンパイラの存在意義が分かりません。 本来はもっと自分が思ってる事を言語化出来ればいいのですが、これが現時点で精一杯です。

  • .NET frameworkについて

    .NET frameworkとはJVMとほとんど同じような気がするのですが、いろんな言語が使えること以外に何かメリットあるのでしょうか? それと、たとえば、VC.NETで作ったプログラムはコンパイラで中間コードになって、実行時に.NET frameworkでインタプリタみたいに機械語に直して実行しているのでしょうか?

  • Cで作成したDLLをVBで呼出

    Cで作成したDLLの関数をVB6.0から呼び出す事ができず、悩んでおります。 ご教授お願いします。 どの様な関数を呼び出そうとしているのかというと、以下の通りです。 <DLL Cで作成(コンパイラVC6)> void WINAPI hoge(BSTR pgname,BSTR fmt,...){ ~処理~ } /* 宣言では頭にDLLExport*/ <呼出側 VB6.0で作成> '宣言 Public Declare Function hoge Lib "hoge" _ (ByRef pgname as String , _ ByRef fmt as String , _ ParamArray args()) '呼出 call hoge("foo","baa","array1",2) この様なコードを書いております。 C側、VB側ともに固定数の引数にしてみたところ、 通ったので「ParamArray args()」の定義が違うのではないか・・・?と思っているのですが、 どの様に宣言したらよい物なのでしょうか? もしくは、そもそも全然違う箇所を間違っているのでしょうか? 宜しくお願いします。 ※ 説明の足りない箇所があれば、仰ってください。

  • 各言語の特徴

    いろんな言語の特徴が知りたいです。 C:処理速度がはやい VB:開発効率がいい VC++:ネットワークに強い JAVA:ネットワークに強い? Delphi: COBOL: 他たくさん知りたいですσ(^^) 教えてください、お願いします(^^)

  • VBでフォントデータを得る方法

    PC上で動作する言語としてはVBだけが少々わかる程度です。 このVBだけを頼りに、文字のフォントデータを取得したいと考えています。 フォントとしては16x16で、フリーで装飾的要素のない一般的なものが希望です。 このデータによりLEDマトリクスに文字を再生したいのです。 用途としては商用です。 文字のシフトJISコードを得ることまではできました。 このコードによりフォントデータを得るためには、そのファイルそのものが VBで扱えるようになっていなければならないわけですが これが見当たりません。 ・・・というか、ここで以前フリーのフォントを教えていただいたのですが インストールさえできませんでした。 (なぜできないかを説明するのも、わからない用語が多すぎてできません) VBだけで処理できる都合のよいファイルがありましたら教えてください。 それともVBの初歩レベルだけでは無理でしょうか?

このQ&Aのポイント
  • 2023/4/24からPCのWi-Fi接続ができなくなりました。側面のWi-Fiスイッチはオンになっているが、設定からWi-Fiをオンにしてもオフに戻ってしまいます。ネットワークの状態は「未接続」「利用できるネットワークの表示」にはWi-Fiが表示されず、「Wi-Fi2 無効」とだけ表示されます。他のデバイスではWi-Fiを利用できるため、対処方法を教えてください。
  • PCのWi-Fi接続ができない問題が発生しました。2023/4/24からWi-Fiに繋げることができず、側面のWi-Fiスイッチはオンになっているのにも関わらず、設定からWi-Fiをオンにしてもオフに戻ってしまいます。ネットワークの状態は「未接続」と表示され、「利用できるネットワークの表示」にはWi-Fiが表示されず、「Wi-Fi2 無効」とだけ表示されます。他のデバイスでは問題なくWi-Fiを利用できるため、対処方法を教えてください。
  • PCのWi-Fi接続ができなくなってしまいました。2023/4/24以降、Wi-Fiに接続できなくなりました。側面のWi-Fiスイッチはオンになっているものの、設定からWi-Fiをオンにしてもオフに戻ってしまいます。「ネットワークの状態」は「未接続」で、「利用できるネットワークの表示」にはWi-Fiが表示されず、「Wi-Fi2 無効」と表示されます。他のデバイスでは問題なくWi-Fiを利用できるため、どうすればよいかアドバイスをいただけますか?
回答を見る