通訳言語の長所と短所は何ですか?
-
05-07-2019 - |
質問
今、Perlを学んでいます。通訳言語の長所と短所は何ですか?
解決
ウィキペディアからの素朴なコピーなので、このコミュニティWikiを作成します。
インタープリター言語の利点
解釈された言語は、コンパイルされた言語に比べてプログラムに特定の柔軟性を与えます。コンパイラーよりもインタープリターに実装しやすい機能には次のものがあります(ただし、これらに限定されません):
- プラットフォームの独立性(Javaのバイトコードなど)
- エバリュエーターのリフレクションおよびリフレクションの使用法(一次評価関数など)
- 動的型付け
- デバッグの容易さ(インタープリター言語でソースコード情報を取得する方が簡単です)
- プログラムサイズが小さい(インタープリター言語には命令コードを選択できる柔軟性があるため)
- 動的スコープ
- 自動メモリ管理
インタープリター言語の欠点
通常、インタープリターによる実行は、通常のプログラム実行よりもはるかに効率が低くなります。これは、すべての命令が実行時に解釈を渡すか、新しい実装のように、実行する前にコードを中間表現にコンパイルする必要があるために発生します。仮想マシンは、定義された中間言語がマシン言語にはるかに近いため、実行時に翻訳しやすいため、パフォーマンスの問題に対する部分的な解決策です。もう1つの欠点は、実行を可能にするためにローカルマシンにインタープリターが必要なことです。
他のヒント
長所:
- ラピッドプロトタイピング(書き込み、コンパイル、実行サイクルなし)
- クロスプラットフォーム(各プラットフォームにインタープリターが存在すると仮定)
短所:
- パフォーマンス(コンパイルされた言語ほど速くはありません)
最大の欠点は?ほとんどの人は実行速度を言うでしょうが、必ずしも真実であるとは限りません。最近のほとんどのインタープリター言語は、ビルド時にファイルを中間状態に変換し、実行時に他の言語と同様にマシンコードに変換します。最近、これらの言語VM内で巧妙なキャッシングが広く普及しているため、それほど大きな問題ではないはずです。これは確かに、パフォーマンスがインタープリター言語の問題ではないということではなく、多くの人が示唆するほど悪くないことが多いということです。
ただし、パフォーマンスの問題があっても、コンパイルされた言語と同じタスクをより効率の低いコードで達成する方が簡単な場合が多いため、プログラムの実行時間全体でコンパイル中のパフォーマンスの低下は無視できることに注意してください。
個人的には、最大の欠点は、実行が発生する前にインタープリターが常に存在する必要があることです。これは、特にインタープリタ言語が常にクロスプラットフォームであるとは限らないため、移植性をかなり低下させます。
コン:
- 最大の欠点はおそらく実行速度です
長所:
- 最大の利点は、おそらくターンアラウンド時間、つまりコードテストの反復ループです
明確で幅広い点をまとめると、コンパイルされた言語は、解釈された言語よりもパフォーマンスが高い傾向があります。
ソースコードは付属していないため、コンパイルされた言語は商用デスクトップソフトウェアにより適しています。
解釈された言語は、コンパイラーを待たずに素早く編集/実行/繰り返しができる限り、少し早く学ぶ傾向があります。私の経験では、彼らはまた、より高いレベルになる傾向があり、それは同様にそれらをより簡単にします。
ウィキペディアには、長所と短所に関するページがあります。非常に高度なインタープリター言語は、ネイティブバイナリに実際にコンパイルできるため、インタープリター言語の長所と短所の間の線があいまいになります。
PERLは、線を曖昧にする言語の1つです。強力なスクリプト言語として有名ですが、ネイティブにコンパイルすることもできます。
"スローネス" PERLなどの動的言語の問題はもはや問題ではないかもしれません。動的言語分野の最新動向に関する優れたプレゼンテーションを次に示します。
http://steve-yegge.blogspot .com / 2008/05 / dynamic-languages-strike-back.html
Javaはインタプリタ言語として解釈される
長所:
- 互換性:Java仮想マシンは、「一度書くだけで、どこでも実行できる」という概念を承認しています。
- セキュリティ:JVMで実行されているプログラム。したがって、障害が発生しても、オペレーティングシステムのファイルには影響しません。
- メモリ管理。
短所:
- Java仮想マシンには多くの実装があります。たとえば、Java 8機能を使用するプログラムを作成する場合、このプログラムは8バージョン以上のJVMで実行する必要があります。