• ベストアンサー

VBは速度が遅い?

VisualBasic6でプログラムを組んでいて疑問がわきました。 主に計算主体の場合、C言語と比べて速度が遅いと言われますが、どうしてVBで作ると同じアルゴリズムなのに 速度が遅いのでしょうか? VBで早くする方法が知りたいです。 ActiveBasicというものがあり、そちらで動作させると 早いといううわさがあり、本当かわかりませんが、 どうなのでしょうか?VBのコンポーネントは使えるのでしょうか? ※昔、Delphiと同じアルゴリズムで速度を比べたら Delphiの方が早かったです。理由はわかりませんが・・・

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

  • ベストアンサー
noname#25358
noname#25358
回答No.3

 Cコンパイラは通常、伝統的にネイティブコンパイラになります。  最適化コンパイラなどが存在することからも分かるように、CPUの処理オーダーなども気にして厳密に作られます。  ですがネイティブコンパイラは、機械語の特性をダイレクトに引きずってユーザーフレンドリーでなくなってしまうという特徴があり、どうあっても玄人向け言語になってしまうのです。  つまり、「○○のときは××しなければならない」という言語的な制約が増えてしまうのです。  それに対してBASICは、文字通り「分かりやすく、作りやすい」ことが一番重要であるため、中間言語をアセンブリングしながら実行する形態をとることが多いです。  それゆえ、デバッグするために何度もコンパイルを繰り返しても速度上のストレスをほとんど感じませんし、要件定義が同じものを作っても圧倒的に開発速度が速いです。  「ある特定のアルゴリズムを組むと、言語仕様上は大丈夫なはずなのに動かない」というトラブルもほとんど存在しません。  が、その代わりに本番環境でも遅いのです。  Delphi は、たしかネイティブコンパイラであるケースが多いはずです。(未確認)  もしかするとC言語ほどにはCPUオーダーを気にして作られてはいないのかもしれませんが、それでも相応に速くなります。  ActiveBasicは、ディスカバーソフトウェア社のネイティブコンパイラです。  「分かりやすく使いやすいくなければならない」というBASICの基本理念は、「とにかく速い」というネイティブコンパイラの思想とは真っ向から対立していますが、まぁ、なんとかしたんでしょう。  たぶん速いです。でも実際使ってみると、Visual BASIC ほどには使いやすくないことが分かるはずです。なぜなら、それがネイティブコンパイラの宿命だからです。

その他の回答 (5)

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.6

ネイティブコンパイラがどうだとか、言語の制約がどうだとか、機械語の特性がどうだとか書かれた回答がありますが、何か勘違いしているようなので補足を。 >ですがネイティブコンパイラは、機械語の特性をダイレクトに引きずってユーザーフレンドリーでなくなってしまうという特徴があり 機械語の特性とユーザーフレンドリーの話は、まったく別次元の話。 現在の最新コンパイラは、コード生成ルーチン、最適化ルーチンが賢く、機械語の特性は殆ど表面には出て来ません。逆に、最近のCPUはC言語に特化した命令コードを持つくらいで、機械語の特性云々の主張は実状と真逆に近いです。 また、ユーザーフレンドリーかどうかは、エラーメッセージの親切さ、デバッグのし易さ、GUIの作りなど、言語特性とはまったく無関係の部分が影響します。 >「○○のときは××しなければならない」 これはどんな言語、どんなCPUを使ったって同じです。制約はどこにだって付いて回ります。言語により違うのは「制約を回避しやすいか、回避しにくいか」だけの違い。 「コンパイラは難しい、インタプリタは簡単」と言われる理由を強いて挙げるなら ・コンパイラは、ちょっと直しただけで全部コンパイルしなければならず、使われない一部分でも不完全なままにしておく事が出来ない。それに、ライブラリやらインクルードやら覚える事が多い。実行時にエラーがあっても自動的に止まってくれない ・インタプリタは、ちょっとづつ直し、ちょっとづつ実行して試しというのがすぐに可能で、しかも、未完成で使わない部分があっても未完成のまま放置が可能。実行時にエラーがあったら止まってくれる の違いしか存在しない。 現在のコンパイラはそういうレベルまで来ていて、GUIで開発している限り、極論を言えば「インタプリタとコンパイラの違いは、実行時に早いか遅いか、コンパイル作業があるかないか、実行時エラーで止まるかどうか、実行時に簡単に止める事ができるかどうか」だけの違いしか無いと言えます。

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.5

Delphiは「コンパイラ言語」です。 VisualBasicは「インタプリタ言語」です。 コンパイラ言語は、コンパイルする事によって可読言語を機械語に翻訳し、翻訳が終った機械語をCPUが直接実行するのでかなり高速です。 一方、インタプリタ言語は、実行する時にいちいち可読言語を一字一句解釈しながらエラーが無いか調べつつ、命令語を実行していくので、とても低速です。 なお、ActiveBasicはBasicと名前が付いていてもインタプリタではなくコンパイラなので実行が早いのです。 Delphiも前述の通りコンパイラなので実行が早いです。 なお、VBも「コンパイルして実行形式ファイルにする」と言う作業をすれば多少は早くなります。但し、コンパイルしてしまうと「一行づつステップ実行して確認」などのデバッグが一切出来なくなりますし、コンパイル前のソースプログラムを残しておくのを忘れると、二度と修正できなくなります。

  • porilin
  • ベストアンサー率22% (142/631)
回答No.4

3です >コンパイラ言語は、コンパイル時に、全てを翻訳しているため、実行時の負担が軽減されるのです。 VBはコーディング時はともかく、実行時はコンパイルして実行するので、インタープリタ言語とは言い切れません。 コンパイルして実行はしますが、1に書いたとおり、手順が増えているので、実行ステップ数が多い為、遅くなるのです。

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.2

インタープリタ言語と、コンパイラ言語の違いです。 コンピュータは、最終的には、アセンブラ言語(16進コード)で 動作します。 インタープリタは、実行時に1行1行アセンブラに翻訳しながら実行 します。 コンパイラ言語は、コンパイル時に、全てを翻訳しているため、実行時の負担が軽減されるのです。

  • porilin
  • ベストアンサー率22% (142/631)
回答No.1

基本的には人間の言葉に近いほど、翻訳時にプログラムがいろいろな解釈をさせられるからです。 同じ足し算(1+1)でも、マシン語ならadd命令1個ですみます 言語が高級になるほど、変数Aの場所を確保し、代数1を入力し、文字変数か数字変数かチェックし・・・と長くなってゆきます。

関連するQ&A