• ベストアンサー

言語の実行スピードで早い順に並べてみたら

VisualStudio2005とVisualStudio6を持っていますが、同じアルゴリズムで書かれたプログラムで実行速度が速い順を知りたいのですが 私の主観ですが(抜けているものがありましたら追加してください。) 以下のような予想になります。 VC2005++ VC6++ Delphi BCC C# VC.NET 2005 VB.NET 2005 Visual J++ VisualBasic6 皆さんの意見が知りたいです。(Lispやその他の言語もご存知な場合もよろしく。) また、アセンブラ(マシン語)の埋め込みができる言語も知りたいです。昔、下のような記述ができた言語があったような記憶がありますが 今でもどの開発ツール(ボーランド社など他のメーカーも含めて)で可能なのでしょうか? asm{ mov ax, 4000h; int 0x21; }

  • binma
  • お礼率14% (11/78)

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

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

> 条件は、バブルソートにかかる時間がどの処理系が早いかです。 提示されたソースであれば、Visual C++(ネイティブコードであれば、バージョンはあまり関係ないと思います)が一番高速になりそうです。 同じC/C++でも、最適化性能の関係でBorland C++ Compilerは遅くなります。また、Borland C++ Compilerの場合、C++はCより遅くなる傾向にあります。なお、.NETやJavaはどうしても不利になりますね。

binma
質問者

お礼

詳しい回答ありがとうございます。ボーランドが遅のは残念ですね。 昔Turbo Pascalの時代で遊んでいた時は、実行速度とは関係ないですが、コンパイルが早いのでファンでしたが、その後コンピュータから離れていましたので、.NETやJavaがわからずなかなかとっつきにくいです。 今、C#とVB.NETを覚えようとしていますが、実行速度はどちらが速いのでしょうか?C#はDelphiに似ているように感じますが、将来Javaも学びたいのでC#の方が(実行速度を考えないと)良いのでしょうか?

その他の回答 (2)

  • moritan2
  • ベストアンサー率25% (168/670)
回答No.3

手間を気にしないのなら、アセンブラが一番速いと思います。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

> 同じアルゴリズムで書かれたプログラムで実行速度が速い順を知りたいのですが 条件が漠然としすぎている気がします。 確かに、実行速度に最も大きな影響を与えるのはアルゴリズムでしょうが、そこから先はコーディングレベルのテクニックや、言語・処理系の仕様がかなり効いてきます。具体的にどんなコードを比較するのかを明らかにする必要があるでしょう。 たとえば、ニュートン法で整数の平方根を求めるのであれば、C++でテンプレートメタプログラミングによって実装するのが最速(実行時間ゼロなので)です。ところが、同じニュートン法で平方根を求める場合でも、拡張倍精度浮動小数点数を使うのであれば、(インラインアセンブラを使うのでない限り)Visual C++よりDelphiの方が高速になる可能性が高いはずです。

binma
質問者

お礼

>条件が漠然としすぎている気がします。 そうですね。特殊な計算なら処理系によって有利不利がありますね。 条件は、バブルソートにかかる時間がどの処理系が早いかです。 以下、汚いソースですが、このアルゴリズムでの計測を前提とします。 //準備で共通データ作成 int NumMax = 10000; int a[NumMax]; // ランダム初期化 for(long i=0; i < NumMax; i++){ a[i] = ランダム値(1から100) } で作成した1万個のランダム値の入った配列を作成し、 この同一データを各言語で 10億回バブルソートしてかかった時間などです。 //ここからの時間 int Loop1Max = 10000; int Loop2Max = 10000; int b; for(int lp1=0; lp1<Loop1Max; lp1++){ for(int lp2=0; lp1<Loop2Max; lp2++){ // バブルソート(降順) for(int i=0; i<NumMax-1; i++){ for(int j=1; j<NumMax; j++){     if(a[i] < a[j]){ b = a[i]; a[i] = a[j]; a[j] = b; } } } } } // ここまで

関連するQ&A

  • 今、開発言語をどれにしようか、迷っています。

    マシンはデュアルコアのAthlon64 4800+は 決定しているのですが開発言語をどれにしようか、迷っています。 Windows: ASM, C, VB, Delphi, C++Builder, VC++, Java, VB2005, VC2005, C# ... Linux:GCCが良いよでしたら、Linuxにするかもしれません。 計算とグラフ表示が主な処理で、なかなかアルゴリズムが難しく、開発途中で試行錯誤しますので、開発のし易さも選ぶポイントです。 以下の優先順位です。 1番目:実行速度の早いもの(最適化など) 2番目:Profile機能がある(サードパーティでもよい) 3番目:ソースの記述量が少ない。(簡単) 4番目:書籍や情報が多い 5番目:汎用性が高い(今後のメンテナンスも考えて) 1番目の実行速度にこだわるのは、VB6でプログラムを書いて実行させたところ、昔BCCで書いていたプログラムより遅かったので驚愕しました。 簡単なのはよいのですが、速度が遅いのとプロファイル機能が手に入れなかったので、VisualBasicは断念しようと思います。 仕事とは直接関係ないのですが、今後の参考にしたいので、皆さまのご意見をお聞かせください。

  • VBは速度が遅い?

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

  • 各言語の特徴

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

  • 数多く存在するプログラミング言語について教えて下さい

    今、プログラミング言語全般について勉強中ですが、質問です! C、C++、Perl、FORTRAN、COBOL、ALGOL、SmallTalk Lisp、Prolog、Logo、TCL、Pascal、ObjectC、VB、 Basic、Java、Delphi、April、Rubyなど様々な言語が存在しますが、この中の言語以外には他にどの様な名前の言語が存在しますか? そして、 知名度の低い(使っている人すみません)TCL、Aprilを始めとする言語について 詳しい事を教えて下さい。

  • もし仮に5つの言語(Python, Java, C/C++, Perl

    もし仮に5つの言語(Python, Java, C/C++, Perl, LISP、アセンブラ)を学ぶとした場合の学習順序 こんばんは。 もしこの5つを何年かかけて学ぶとした場合、この学習順序をどうおもいますか? ちなみにこの5つの言語は、linuxなどのOSやオープンソースソフトウェアの開発に携わっている方たち(ハッカーの方たち) が、OSや言語開発をするなら学ぶべき言語として主張していました。(クラッカーではなくハッカーです) この方たちがいうには pythonをはじめに学習し、次にjava それからC/C++, Perl, LISP、アセンブラの順番が良いと言っていました。 特にpythonを一番に学び、javaを2番に学ぶべき理由としては↓ まず Python から始めることをおすすめします。設計がきれいだし、ドキュメントもしっかりしているし、初心者にもそこそことっつきやすくできています。でも入門言語として最適でも、おもちゃではありません。強力で柔軟で、大きなプロジェクトにもじゅうぶん対応しています Java もプログラミングを学ぶにはよい言語です。 Python よりはむずかしいですが、できるコードは Python より高速です。二番目の言語としてはとてもすぐれていると思います。 本気でプログラミングをするなら、C を勉強するしかありません。これは Unix の中核となる言語です。C++ は C と密接な関係にあります。片方を知っていれば、もう片方を学ぶのはそんなにむずかしくありません。が、どっちも真っ先に勉強しようとするのには向いた代物ではありません。 それ以外に Perl と LISP があります。Perl は実際的な意味からも勉強しておく価値があります。アクティブ Web ページやシステム管理にとても広く使われているからです。自分では Perl を使わなくても、読めるようにはなっておきましょう。LISP は、それをモノにしたときのすばらしい悟り体験のために勉強しましょう。この体験は、その後の人生でよりよいプログラマーとなる手助けとなるはずです。たとえ、実際には LISP そのものをあまり使わなくても。 さらに、visualbasicやC#などはやめた方が良い。と主張しています。↓ ウィンドウズの下でハッキングを学ぶのを、拘束衣を着て踊りを学ぶのに例えたのは、あれは冗談じゃないんですよ。 Visual Basic や C# にはそれぞれ個別に問題があります。その大きなものは、移植性がないことです。マイクロソフトの独占言語だというだけで、もうすでに失格ですし、ほかの Basic と同じく言語としての設計もまずく、悪いプログラミングの習慣が身についてしまいます。 足りなかったのでこちらに。 みなさんはこの順序や考えについてどうおもいますか? 本当にpythonは最初に適した言語なのでしょうか? 長文になってしまい申し訳ありません。 できればひとりでも多くの技術者の意見が聞きたいです。なんでもかまいません。 もし良ければ回答お願いします。

  • リトルエンディアンというものでしょうか?使いづらいです。

    VC6で以下のようにメモリ上の4バイトは逆さなのでしょうか? 非常に使いづらいです。 正しく?1を取得する方法が知りたいです。 int a[2] = { 1, 2 }; _asm{ // 2003年頃の本を見ると__asmだし、他ではasmだった。 _asmはVC特有? mov esi, a // メモリ上では 0x01 0x00 0x00 0x00 0x02 0x00 0x00 0x00と逆さに入ってる mov eax, [esi+0]; // eaxが 0x10000000 // eaxには1が入って欲しいのですが無理なのでしょうか? 普通の感覚から考えてビックエンディアンが良いと思うのですが、 リトルエンディアンは何に便利なのでしょうか?

  • C/C++のインラインアセンブラに関する質問

    使っているコンパイラはボーランドのフリーのC++のコンパイラなのですが インラインアセンブラのソースをコンパイルするとこんなエラーメッセージがでます( 警告 W8002 roger.cpp:8アセンブラを使う為コンパイラを再起動した(関数(main()) エラーE2133 ’tamsm32.exe'を実行できない とエラーメッセージが出ます 調べても解決方法がわからないのですが 解る方は教えてください ついでにコンパイルしようとしたソースは↓です #include<iostream.h> void main(){ int w=8; int w2=5; _asm{ mov eax,w mov edx,w2 }; cout<<w<<endl; };

  • BCCコンパイラ5.5(ボーランドの無料製品)での、実行可能ファイルの作成

    ボーランドより、フリーのC・C++コンパイラをダウンロードしました。↓機能一覧です。 http://www.borland.co.jp/cppbuilder/freecompiler/bcc55feature.html コンパイラというだけあって、実行可能ファイル(.exeファイルみたいなやつ)は作成できないんですかね?Javaだと全部ただで実行可能ファイルまで作成できるんですが。。 VCをもっているんですが、めんどくさいのでコマンドラインから操作できるものがいいです。 フリーで実行可能ファイルまで作成できる、コマンドラインで開発できるものはないでしょうか?言語はもちろんCです。 分かる方、よろしくお願いします。

  • プログラム言語がJISに制定されるとどんなメリットがあるの

    C++やC#、FortranなどJISに制定されたプログラム言語がありますが、JISに制定されると利用者にとってどんなメリットがあるのでしょうか。 他を調べてみるとJIS制定されたBASIC言語(FullBASIC)もあるみたいですがあまり聞いたことがありません。 現在VisualStudio2005を使用しています。 C++やC#など、JISに制定されたのならどこかにJISマークの表示があるかと思いますが見たことがありません。 また、同じ言語名であってもマイクロソフトとボーランドなど開発元が異なると解釈や使用方法が違ったりする様な事を以前聞きました。 同じ名称でも自分が利用している言語が本当にJISに準拠している言語なのか確認する事はできるのでしょうか

  • インラインアセンブラの関数について質問です。

    C言語で書かれたプログラムの中に、アセンブラで書かれた関数を使うため、インラインアセンブラで関数を作っていたのですが、私の能力の限界を感じたので、是非、ご教授願います。以下に示します。 元のアセンブラの関数write_mem82(int addr, int data) MOV EAX, [ESP+4] MOV AL, [ESP+8] MOV [EAX], AL RET です。これは、OS○作○門という本に載っていたものですが、プログラムをインラインアセンブラにすると、成功するのかふと疑問に思ったのです。よって、アセンブラの種類は、nasmを基にしたnaskです。 こういうことは、その本のサポートページか何かで質問すればよい的なことをおっしゃる方もおられると思います。残念ながら、サポートページは、ほぼ凍結状態で、何年待てば回答が返ってくるのか?という状態です。 そういう経歴で、ここの質問させていただくに至りました。 肝心の、私が書いてコンパイルエラーになるプログラムを書きます。 static __inline__ void write_mem82(int addr, int data){ __asm__ ( "MOV EAX,[ESP+4]": "MOV AL,[ESP+8]" "MOV [EAX],AL" "RET" ); } です。"MOV [EAX],AL"でエラーが出ます内容は構文が間違っているという内容のものです。なお、関数の名前は、意図的に変えてあります。オリジナルとは違います。 大した関数ではないのかもしれないのですが、わからないのでよろしくおねがいいたします。

専門家に質問してみよう