何が言語“高速”または“低速”になりますか?
6029 ワード
彼の記事Naser TamimiはC +とPythonを比較します、そして、これは彼が観察したものです:
PythonはC +よりずっと遅いことがわかりますが、実際にはプログラミング言語は高速か遅いです.プログラミング言語によって生成されたマシンコードは単純です.
すべての言語には同じゴールがあります
マシンコードのような低レベル言語(バイナリディクショナリで表示)は、CPUに対して翻訳プログラムが必要ないため、非常に高速に動作しますが、書き込みにはとても不便です.
C++やJavaScriptなどの高レベル言語(HLL)は、プログラマがコンピュータと通信する環境のような単純な人間の言語を提供します. プログラミング言語は構文によって異なるかもしれません、しかし、それらのすべての共通のゴールはマシンコードを生成することです. その結果、コードがマシンコードにどのように変換されるかはすべてわかります.
これを理解するために、静的でダイナミックにタイプされたプログラミング言語間の違いを最初に理解しなければなりません.
静的および動的型付け言語
静的型付け言語静的型付け言語は、コンパイル時に変数型が知られているものです.変数変数のデータ型は静的型付け言語で指定する必要があります.例えば、C、C +、Rust、Java
でタイプ検証が行われる.結果として、これらのチェックは、データの値と、プログラムが実行される前に割り当てられた変数の型との間に欠落した関数、無効な型引数、または不一致のようなものをキャッチします.
プログラマはこれらのタイプチェックをパスしない限りコードを実行できないので、コンパイル時にエラーと警告をスローすることでバグを修正するようにプッシュします. エラーのかなりの数が開発プロセスの初期に発見されます. 動的型付け言語
インタプリタが変数の値に基づいて実行時に型を代入する場合.ジャバスクリプト, Python
タイプチェッカーがこの時点で問題を識別した場合、開発者は通知され、プログラムがクラッシュする前にコードを修正するオプションを与えられます.
コードの変更をテストする前にコンパイラを終了させるのを待つ必要はありません.これにより、デバッグプロセスはずっと速くなりやすくなります.
どうやって?
このPythonの例を見てください.
インタプリタにはどんな種類のデータが得られるか知る方法がありません.ランタイムでは、より多くのチェックを行う必要があります.これは、基本的な動作に対してより暗黙の作業をしていることを意味します.
これらのすべてのルックアップは非常に迅速に完了するのは難しいです.
その結果、マシンコードを生成するのにかかる時間が増加し、これらの言語が遅くなります.
一方、C++やJavaのような静的な型の言語では、コンパイラが使用している特定のデータ型を知っているため、最適化されたマシンコードを生成することができます.
どちらの言語を選ぶべきですか.これはJavaScriptのような言語が役に立たないと言うことではありません.それは完全にユースケースに依存します.それぞれの言語は、明確な側面に焦点を当てています.動的なタイピングは、プログラマが実行時データに基づいて型と機能を構築することができますが、それは速度の犠牲になります. プログラマは、オペレーティングシステム・ドライバまたはファイル・システムを構築するとき、C、C++または錆を使用することによって、アプリケーションに電力を供給するために利用可能なわずかなハードウェアスペースまたはエネルギーがない場合であっても、いかなる文脈においても有効に動作するようにコードを微調整することができる.それで、それは我々が達成したい仕事に依存します.
以下のコメントで私に教えてください.
PythonはC +よりずっと遅いことがわかりますが、実際にはプログラミング言語は高速か遅いです.プログラミング言語によって生成されたマシンコードは単純です.
すべての言語には同じゴールがあります
これを理解するために、静的でダイナミックにタイプされたプログラミング言語間の違いを最初に理解しなければなりません.
静的および動的型付け言語
静的型付け言語
/* C++/C code */
int number_1 = 1; //integer
number_1 = "digit"; //ERROR! cannot be changed to string
コンパイル時にインタプリタが変数の値に基づいて実行時に型を代入する場合.ジャバスクリプト, Python
var name;
name = 57;
name = "Vibali"; //this will not throw any error.
JavaScriptのコンパイルフェーズはありません.代わりに、ブラウザインタプリタはJavaScriptコードを調べ、各行を理解して実行します.タイプチェッカーがこの時点で問題を識別した場合、開発者は通知され、プログラムがクラッシュする前にコードを修正するオプションを与えられます.
どうやって?
このPythonの例を見てください.
# Python 3 program to find
# factorial of given number
def factorial(n):
if n < 0:
return 0
elif n == 0 or n == 1:
return 1
else:
fact = 1
while(n > 1):
fact *= n
n -= 1
return fact
nの値は何ですか?それは数値ですか.文字列ですか.それはあなたが以前に作成したクラスですか?インタプリタにはどんな種類のデータが得られるか知る方法がありません.ランタイムでは、より多くのチェックを行う必要があります.これは、基本的な動作に対してより暗黙の作業をしていることを意味します.
これらのすべてのルックアップは非常に迅速に完了するのは難しいです.
その結果、マシンコードを生成するのにかかる時間が増加し、これらの言語が遅くなります.
一方、C++やJavaのような静的な型の言語では、コンパイラが使用している特定のデータ型を知っているため、最適化されたマシンコードを生成することができます.
どちらの言語を選ぶべきですか.
以下のコメントで私に教えてください.
Reference
この問題について(何が言語“高速”または“低速”になりますか?), 我々は、より多くの情報をここで見つけました https://dev.to/vibalijoshi/what-makes-languages-fast-or-slow-3l44テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol