![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
VisualBasic6でプログラムを組んでいて疑問がわきました。
主に計算主体の場合、C言語と比べて速度が遅いと言われますが、どうしてVBで作ると同じアルゴリズムなのに
速度が遅いのでしょうか?
VBで早くする方法が知りたいです。
ActiveBasicというものがあり、そちらで動作させると
早いといううわさがあり、本当かわかりませんが、
どうなのでしょうか?VBのコンポーネントは使えるのでしょうか?
※昔、Delphiと同じアルゴリズムで速度を比べたら
Delphiの方が早かったです。理由はわかりませんが・・・
No.3ベストアンサー
- 回答日時:
Cコンパイラは通常、伝統的にネイティブコンパイラになります。
最適化コンパイラなどが存在することからも分かるように、CPUの処理オーダーなども気にして厳密に作られます。
ですがネイティブコンパイラは、機械語の特性をダイレクトに引きずってユーザーフレンドリーでなくなってしまうという特徴があり、どうあっても玄人向け言語になってしまうのです。
つまり、「○○のときは××しなければならない」という言語的な制約が増えてしまうのです。
それに対してBASICは、文字通り「分かりやすく、作りやすい」ことが一番重要であるため、中間言語をアセンブリングしながら実行する形態をとることが多いです。
それゆえ、デバッグするために何度もコンパイルを繰り返しても速度上のストレスをほとんど感じませんし、要件定義が同じものを作っても圧倒的に開発速度が速いです。
「ある特定のアルゴリズムを組むと、言語仕様上は大丈夫なはずなのに動かない」というトラブルもほとんど存在しません。
が、その代わりに本番環境でも遅いのです。
Delphi は、たしかネイティブコンパイラであるケースが多いはずです。(未確認)
もしかするとC言語ほどにはCPUオーダーを気にして作られてはいないのかもしれませんが、それでも相応に速くなります。
ActiveBasicは、ディスカバーソフトウェア社のネイティブコンパイラです。
「分かりやすく使いやすいくなければならない」というBASICの基本理念は、「とにかく速い」というネイティブコンパイラの思想とは真っ向から対立していますが、まぁ、なんとかしたんでしょう。
たぶん速いです。でも実際使ってみると、Visual BASIC ほどには使いやすくないことが分かるはずです。なぜなら、それがネイティブコンパイラの宿命だからです。
No.6
- 回答日時:
ネイティブコンパイラがどうだとか、言語の制約がどうだとか、機械語の特性がどうだとか書かれた回答がありますが、何か勘違いしているようなので補足を。
>ですがネイティブコンパイラは、機械語の特性をダイレクトに引きずってユーザーフレンドリーでなくなってしまうという特徴があり
機械語の特性とユーザーフレンドリーの話は、まったく別次元の話。
現在の最新コンパイラは、コード生成ルーチン、最適化ルーチンが賢く、機械語の特性は殆ど表面には出て来ません。逆に、最近のCPUはC言語に特化した命令コードを持つくらいで、機械語の特性云々の主張は実状と真逆に近いです。
また、ユーザーフレンドリーかどうかは、エラーメッセージの親切さ、デバッグのし易さ、GUIの作りなど、言語特性とはまったく無関係の部分が影響します。
>「○○のときは××しなければならない」
これはどんな言語、どんなCPUを使ったって同じです。制約はどこにだって付いて回ります。言語により違うのは「制約を回避しやすいか、回避しにくいか」だけの違い。
「コンパイラは難しい、インタプリタは簡単」と言われる理由を強いて挙げるなら
・コンパイラは、ちょっと直しただけで全部コンパイルしなければならず、使われない一部分でも不完全なままにしておく事が出来ない。それに、ライブラリやらインクルードやら覚える事が多い。実行時にエラーがあっても自動的に止まってくれない
・インタプリタは、ちょっとづつ直し、ちょっとづつ実行して試しというのがすぐに可能で、しかも、未完成で使わない部分があっても未完成のまま放置が可能。実行時にエラーがあったら止まってくれる
の違いしか存在しない。
現在のコンパイラはそういうレベルまで来ていて、GUIで開発している限り、極論を言えば「インタプリタとコンパイラの違いは、実行時に早いか遅いか、コンパイル作業があるかないか、実行時エラーで止まるかどうか、実行時に簡単に止める事ができるかどうか」だけの違いしか無いと言えます。
No.5
- 回答日時:
Delphiは「コンパイラ言語」です。
VisualBasicは「インタプリタ言語」です。
コンパイラ言語は、コンパイルする事によって可読言語を機械語に翻訳し、翻訳が終った機械語をCPUが直接実行するのでかなり高速です。
一方、インタプリタ言語は、実行する時にいちいち可読言語を一字一句解釈しながらエラーが無いか調べつつ、命令語を実行していくので、とても低速です。
なお、ActiveBasicはBasicと名前が付いていてもインタプリタではなくコンパイラなので実行が早いのです。
Delphiも前述の通りコンパイラなので実行が早いです。
なお、VBも「コンパイルして実行形式ファイルにする」と言う作業をすれば多少は早くなります。但し、コンパイルしてしまうと「一行づつステップ実行して確認」などのデバッグが一切出来なくなりますし、コンパイル前のソースプログラムを残しておくのを忘れると、二度と修正できなくなります。
No.4
- 回答日時:
3です
>コンパイラ言語は、コンパイル時に、全てを翻訳しているため、実行時の負担が軽減されるのです。
VBはコーディング時はともかく、実行時はコンパイルして実行するので、インタープリタ言語とは言い切れません。
コンパイルして実行はしますが、1に書いたとおり、手順が増えているので、実行ステップ数が多い為、遅くなるのです。
No.2
- 回答日時:
インタープリタ言語と、コンパイラ言語の違いです。
コンピュータは、最終的には、アセンブラ言語(16進コード)で
動作します。
インタープリタは、実行時に1行1行アセンブラに翻訳しながら実行
します。
コンパイラ言語は、コンパイル時に、全てを翻訳しているため、実行時の負担が軽減されるのです。
No.1
- 回答日時:
基本的には人間の言葉に近いほど、翻訳時にプログラムがいろいろな解釈をさせられるからです。
同じ足し算(1+1)でも、マシン語ならadd命令1個ですみます
言語が高級になるほど、変数Aの場所を確保し、代数1を入力し、文字変数か数字変数かチェックし・・・と長くなってゆきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 物理学 2物体の単振動 1 2023/08/17 20:27
- 物理学 xy平面上を運動する物体Aがある。この物体の時刻tにおける位置ベクトルra(t)がra(t)=p + 2 2022/05/22 14:00
- 物理学 高1力学の運動量の問題です。問題を一通り解いたのですが、行き詰まってしまったのでご回答頂ければ嬉しい 3 2022/06/29 11:20
- 物理学 xy平面上を運動する物体Aがある。この物体の時刻tにおける位置ベクトルra(t)がra(t)=p + 1 2022/05/23 21:39
- マウス・キーボード PCでのタッチタイピング、アルファベット約480字/分、単純計算で日本語約240字/分は、世間一般に 1 2023/07/11 22:02
- 物理学 重力加速度について 7 2022/10/19 08:28
- 物理学 時間を語るなら、(複数の時間の正体)を知る必要が有る。 1 2023/02/16 22:14
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
- 地図・道路 道路工事の進捗速度が遅くなったのは、団塊世代の作業員の大量引退が原因か? 5 2023/06/17 11:59
- 物理学 光速度に近い速度で移動しても、時間や時計の動きが遅くなる?等は、あり得ない。 3 2022/09/24 00:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
unsigned long long 型のフォー...
-
VisualC++6.0でhugeモデルを使...
-
ソフトの開発言語を調べる方法
-
書籍「C言語逆引き大全 500の極...
-
AIXとCOBOLについて
-
プログラミングって右脳よりの...
-
パーサとコンパイラの違いって?
-
VC++の/Zm オプションについて
-
VBは速度が遅い?
-
組み込みソフト。ROM領域にデータ
-
Visual Studio でmakefileを使...
-
リリースモードとデバッグモー...
-
C++ での開発環境が安価に入手...
-
COBOLの論理演算子について質問...
-
python エラー
-
エクセルのエラーメッセージ「4...
-
<unistd.h>をVisualStudioでつ...
-
コンパイルできません。
-
C言語でヘッダファイルにグロー...
-
Excelのエラーで困ってます。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
unsigned long long 型のフォー...
-
ソフトの開発言語を調べる方法
-
cc と gcc の違い
-
printfなど、標準関数のソース...
-
パーサとコンパイラの違いって?
-
COBOLのALPHABET...
-
Visual Studio でmakefileを使...
-
組み込みソフト。ROM領域にデータ
-
リリースモードとデバッグモー...
-
C++Builder → Visual C++ 移植...
-
C++でデスクトップGUIアプリ開...
-
サイクルカウントの方法
-
VisualC++6.0でのProfessionalE...
-
COBOLの論理演算子について質問...
-
関数形式マクロ dtaは戻り値が...
-
C言語の2進数表記
-
POWERCOBOLのSQL...
-
Σの計算について
-
C言語の規格
-
COBOL計算式の中間ワーク桁数に...
おすすめ情報