2

私はそれらが何であるかを知っています:

命令型プログラミング言語では、実行したいことを段階的にコンパイラーに伝えますが、宣言型言語では、結果を記述するコードを記述しますが、必ずしも目的の結果を達成する方法は必要ありません。

ただし、どちらのタイプのプログラミング言語を使用した場合の最適化についても知りたくありません。これに加えて、合併症はありますか? たとえば、いずれかの言語で開発されたプログラムを実行する際のスペース/時間の必要性。

4

1 に答える 1

2

プログラミングパラダイムの比較WikiPedia ページのパフォーマンス比較セクションでは、一般的な方法で求めていることをほとんどカバーしています。

純粋に合計命令パスの長さに関しては、サブルーチンをまったく使用せずに命令型スタイルでコーディングされたプログラムのカウントが最も低くなります。ただし、そのようなプログラムのバイナリ サイズは、サブルーチンを使用してコーディングされた同じプログラム (関数型および手続き型プログラミングなど) よりも大きくなる可能性があり、より多くの「非ローカル」物理命令を参照するため、キャッシュ ミスが増加し、最新の命令フェッチ オーバーヘッドが増加する可能性があります。プロセッサ。

サブルーチンを広範囲に使用し (関数型、手続き型、オブジェクト指向を含む)、(コンパイラーの最適化による) 重要なインライン化も使用しないパラダイムは、結果として、サブルーチン リンケージ自体で総リソースのより多くの割合を使用します。プログラムの状態を故意に直接変更せず、ミューテーター メソッド (または「セッター」) を使用してこれらの状態の変更をカプセル化するオブジェクト指向プログラムは、直接的な結果として、オーバーヘッドが大きくなります。これは、メッセージ パッシングが本質的にサブルーチン呼び出しであるという事実によるものですが、さらに 3 つの追加のオーバーヘッドがあります: 動的メモリ割り当て、パラメーター コピー、および動的ディスパッチです。ヒープからメモリを取得し、メッセージ パッシング用のパラメータをコピーするには、状態の変更自体に必要なリソースをはるかに超えるかなりのリソースが必要になる場合があります。プライベート メンバー変数の値を返すだけのアクセサー (または「ゲッター」) も、より直接的な代入 (または比較) を使用する代わりに、同様のメッセージ パッシング サブルーチンに依存し、合計パス長に追加されます。

...それは続きます

于 2015-10-29T12:07:45.907 に答える