No.2ベストアンサー
- 回答日時:
>「コンパイラならばある程度できます」とありましたが、これはどのような意味なのでしょうか。
コンパイラの構造
http://www.seto.nanzan-u.ac.jp/~hachisu/compiler …
で、中間コードからコードを作成するときに、たとえば、8ビットCPUの場合
LD Aレジスタ (適当なアドレス)
LD Bレジスタ (適当なアドレス)
ADD Aレジスタ Bレジスタ
LD (適当なアドレス) Aレジスタ
(同じような処理が延々と続く)
で和が処理されます。1980年代の「頭の良いコンパイラ」ですと、演算結果を適当な内部レジスターに保存して、主記憶装置に保存することなくその後の計算に使用する、いうような処理をしています。
ところが、Visual Basic の場合には、中間コードのまま処理しています。だからやたら遅い。VB用DLLファイルの一箇所の参照先を参照する(共通ルーチンの呼出)ので、その後、巨大なDLLファイルのどこを実行するのか、という分岐ルーチンがあり、その分岐終了後にちょっとの時間実行されて、戻ります。「分岐ルーチン」分が無駄になります。「分岐ルーチン」部分は先読みが効きませんし、CPUのキャッシュがほとんど効かない部分です。
>「人力によるソースの操作が必要」という個所なのですが
たとえば、
LD SI (適当なアドレス)
LD CX (適当な個数)
LD A (適当な値)
(ジャンプ先)
LD (SIの示すアドレス), (Aレジスター)
SUB SI , 1
SUB CX , 1
CX が1以上ならば(ジャンプ先に移動)
という主記憶装置の塗り潰しルーチンですが手作業でやると、PUSH 命令に置きかえる(減算命令を消す)ことで高速化ができます。
C言語ですと、データエリアとスタックエリアを区別しないで使用する、という方法も(普通の状態では使えませんけど)可能です。極端な場合、ポインターを消してしまうとかの方法もあります。
極端な言い方をすれば、C言語の場合CPU依存のソースコードがかけることです。
回答をたいへんありがとうございます。
まだ、深く理解できませんが、頂いた回答を元に私になりに調べまして、理解していこうと思っています。
学習の参考資料として活用させて頂きます。
少なくとも、VBとCでは、実行した場合、処理速度という点でいかんともしがたい差があるということは、わかりました。
No.1
- 回答日時:
Basic 言語で、コンパイラならばある程度までできます。
JAVAでも、できないことはないですが、きついです。
というのは、
「将棋ソフト」の場合、すべての可能性を端から順番にたどって行き、その中からもっとも良い条件にある内容を選択する
という手法を使っています。
ですから、コンパイラといっても、単なる共通ルーチンの呼出しか行わないVisual Basic やJAVAでは、処理が遅く使い物になりません。
高速処理をする場合には、どうしても、人力によるソースの操作(重複作業部分の削除)が必要なので、C言語しか現状では対応できません。
回答たいへんありがとうございます。
すいません。補足要求の欄に記入するべきでしたが、ここのお礼の欄に再度申し訳ありませんが、お尋ねさせて頂きます。
頂いた回答の中で、「コンパイラならばある程度できます」とありましたが、これはどのような意味なのでしょうか。
コンパイラという言葉自体の意味はは一応心得ているつもりですが、いまひとつ門外漢の私にはよくわかりませんでした。
また、「共通ルーチンの呼び出ししか行なわない」とか、「人力によるソースの操作が必要」という個所なのですが、何か、CにはVBやJAVAなどとは違う強力な機能・仕様があるということなのでしょうか。ポインタなどがそうですか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java EclipseとVisual StudioをPC1台にインストールしただけではPCは重くならない? 3 2022/12/08 15:35
- 囲碁・将棋 羽生さんが将棋連盟会長になった真の理由は…? 2 2023/06/14 17:26
- 囲碁・将棋 将棋のスーパーカップはやらんの? 2 2023/06/27 21:54
- 囲碁・将棋 詰将棋。過去作品との重複、盗作、偶然の一致については誰が検証しているのか? 2 2023/04/26 20:14
- 囲碁・将棋 ぴよ将棋。実際のアマチュア段位と比較するとどうなる? 1 2023/05/04 12:01
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- Java プログラミングのプの字も知りませんが、プログラミングを勉強したいです。とりあえず、学ぶものを決めない 3 2022/11/04 13:10
- C言語・C++・C# [至急] Project Euler:#16 Power digit sumコード、入力、出力、解説 3 2022/09/24 02:35
- 囲碁・将棋 あらきっぺの3冊 1 2023/01/22 08:31
- 囲碁・将棋 人間(プロの棋士の)の能力を凌駕してる、たとえば囲碁のAIは、将棋の能力がみられないのですか? 5 2023/08/13 15:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
unsigned long long 型のフォー...
-
ソフトの開発言語を調べる方法
-
gcc のコンパイラオプションに...
-
パーサとコンパイラの違いって?
-
組み込みソフト。ROM領域にデータ
-
C言語はC言語でできている?
-
C言語
-
cc と gcc の違い
-
#pragmaとは
-
C言語インタプリタ
-
C言語のプログラミングのソフト...
-
AIXとCOBOLについて
-
『独習C』第3版と第4版の違い
-
C++でデスクトップGUIアプリ開...
-
C言語で画像を出力したい
-
組み込みソフトってなんですか?
-
<conio.h>?
-
C言語の規格
-
ALGOL・PL/Iのフリーのコンパイ...
-
関数形式マクロ dtaは戻り値が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
unsigned long long 型のフォー...
-
ソフトの開発言語を調べる方法
-
C++でデスクトップGUIアプリ開...
-
組み込みソフト。ROM領域にデータ
-
cc と gcc の違い
-
C++Builder → Visual C++ 移植...
-
printfなど、標準関数のソース...
-
COBOLのALPHABET...
-
COBOLの論理演算子について質問...
-
Visual Studio でmakefileを使...
-
cobolで実行環境って何ですか?
-
パーサとコンパイラの違いって?
-
昔のgraph.hというファイル
-
未使用引数の注意文出力を回避...
-
C言語でのコンパイラの作成方法
-
C言語はC言語でできている?
-
COBOL計算式の中間ワーク桁数に...
-
リリースモードとデバッグモー...
-
『Bin』ディレクトリは何の略語?
-
POWERCOBOLのSQL...
おすすめ情報