C / Javaと比較して、多くの状況でパフォーマンスを大幅に低下させることなく、RubyやClojureのようなものを設計することは可能ですか?ハードウェア設計は役割を果たしますか?
編集:重要なのは、10パーセントだけでなく、桁違いの意味です
編集:私は動的言語を意味する私にとってデルナンは正しいと思うので、タイトルを変更しました
C / Javaと比較して、多くの状況でパフォーマンスを大幅に低下させることなく、RubyやClojureのようなものを設計することは可能ですか?ハードウェア設計は役割を果たしますか?
編集:重要なのは、10パーセントだけでなく、桁違いの意味です
編集:私は動的言語を意味する私にとってデルナンは正しいと思うので、タイトルを変更しました
パフォーマンスは多くのものに依存します。もちろん、コンパイルしている場合でも、言語のセマンティクスを保持する必要があります。Rubyから動的ディスパッチを削除することはできません。劇的に高速化されますが、世界中のすべてのRubyコードの95%が完全に破壊されます。しかし、それでも、パフォーマンスの多くは、実装がどれだけ賢いかに依存します。
「ハイレベル」とは「ダイナミック」という意味ですか?HaskellとOCamlは非常に高レベルですが、ネイティブにコンパイルされており、特に並列処理が機能する場合は、C#やJava、場合によってはCやC++よりも優れたパフォーマンスを発揮します。そして、彼らは確かにパフォーマンスを第一の目標として設計されていませんでした。しかし、コンパイラの作成者、特に機能言語に焦点を当てている作成者は、非常に賢い人です。あなたや私が高級言語を始めた場合、たとえばLLVMをネイティブコンパイルのバックエンドとして使用したとしても、このパフォーマンスに近づくことはできません。
動的言語を高速に実行することはより困難です-それらはコンパイル時ではなく実行時に多くの決定(タイプ、クラス/オブジェクトのメンバーなど)を遅らせます、そして静的コード分析は時々それが行nとmで不可能であることを証明することができます、それでも、高度なランタイムを持ち歩き、静的言語のコンパイラがコンパイル時に実行できる多くのことを実行する必要があります。動的ディスパッチでさえ、よりスマートなVM(インラインキャッシュは誰ですか?)で最適化できますが、それは大変な作業です。つまり、小さな新しい言語でできる以上のことです。
SteveYeggeのDynamicLanguagesStrikeBackも参照してください。
そしてもちろん、重大なパフォーマンスの低下とは何ですか?Cの読み取りよりも100倍遅いのですが、ご存知のとおり、実行時間の80%はコードの20%に費やされます=コードの80%は、プログラム全体の知覚パフォーマンスに顕著な影響を与えません。残りの20%については、いつでもCまたはC ++で書き直して、動的言語から呼び出すことができます。多くのアプリケーションでは、これで十分です(一部のアプリケーションでは、最適化する必要さえありません)。残りの部分については...まあ、パフォーマンスがそれほど重要な場合は、パフォーマンス用に設計された言語で適切に記述する必要があります。
言語設計とそれが実行されているプラットフォームを混同しないでください。
たとえば、Javaは高級言語です。これはJVM上で実行されます(Clojure(上記で特定)およびJRuby(RubyのJavaバージョン)も同様です)。JVMはバイトコード分析を実行し、コードの実行方法を最適化します(エスケープ分析、ジャストインタイムコンパイルなどを利用します)。したがって、プラットフォームは、言語自体にほとんど依存しないパフォーマンスに影響を与えます(JavaのパフォーマンスとC / C ++との比較の詳細については、こちらを参照してください)。
何と比較して損失?ガベージコレクターやクロージャが必要な場合は、それらが必要です。それに関係なく、料金を支払うことになります。言語があなたがそれらを手に入れやすいようにするならば、それはあなたがそれらを必要としないときにそれらを使わなければならないという意味ではありません。
言語がコンパイルされる代わりに解釈される場合、それは桁違いの速度低下をもたらすでしょう。しかし、そのような言語には、使いやすさ、プラットフォームの独立性、コンパイルの必要がないなどの代償的な利点があるかもしれません。そして、あなたがそれらに書いたプログラムは、速度が問題になるほど長くは実行されないかもしれません。
正当な理由もなく速度低下をもたらす言語実装があるかもしれませんが、それらを使用する必要はありません。
DARPAHPCSイニシアチブが何を思いついたのかを見たいと思うかもしれません。提案されたプログラミング言語は、Sun's Fortress、IBMのX10、Cray'sChapelの3つでした。後者の2つはまだ開発中です。これらのいずれかがあなたの高レベルの定義を満たしているかどうかはわかりません。
そして、はい、ハードウェア設計は確かに役割を果たします。これらの3つの言語はすべて、非常に多くのプロセッサを搭載したスーパーコンピュータを対象としており、そのドメインに適した機能を備えています。
それは確かに可能です。たとえば、Objective-Cは動的に型付けされた言語であり、C ++に匹敵するパフォーマンスを備えています(ただし、一般的に言えば、少し遅くなりますが、それでもほぼ同等です)。