私は動的に型付けされた言語の大きな問題は、型チェックが非常に遅いという多くの逸話を聞いたことがあります。なぜそれは遅いですか?変更可能な実行時割り当てタイプを使用すると、計算効率が大幅に低下する可能性があるというコンピュータ科学の合理性は何ですか?タイプチェックには高価な理由は何ですか?
答えて
動的に型指定された言語は、コードが実行されている間にタイプチェックを実行する必要があります。彼らは時々コンパイルすることができますが、合理的なパフォーマンスのために多くのコーナーをカットする必要があります。実行時にチェックする大きな欠点の1つは、型が有効でない場合、インタプリタは例外をスローするか実行を停止できることです。
したがって、望ましくない場合であっても例外を防ぐためにタイプを強制することがよくあります。私が明示的にキャストしたのはint
なので、整数全体の単純な除算は私のユーザ出力が突然 '2.0'でいっぱいであることを意味することは珍しくありません。
コンピュータ科学は合理的です。タイプチェックは非常に重いアルゴリズムです。あなたが呼び出すすべての関数について、関連するすべての型を検証しなければならない(または別の関数呼び出しかもしれない)。型情報は後で更新する必要がある。実行時にはシンプルな型システムと最適化はほとんどありません。コンパイラは、弱い型のシステムでさえ、効率の悪いアルゴリズムを最適化するために、これを利用することができます。
静的型言語をコンパイルし、動的型言語を解釈するのは非常に一般的です。これは、言語がコンパイラ用に設計されている場合、コードがより最適になり、実行時に型を管理する必要がないように、コンパイラに型チェックの責任を与えるのは簡単なことではないからです。実行時に実行する必要が少ないほど、より高速なコードが実行されます。
最終的には、これはインタープリタ用に設計された言語がコンパイラが入力できるレベルを提供できないことを意味します。タイプ情報を活用してパフォーマンスを向上させるためのタイプ情報を利用する自由度が低いことに加えて、実行時にタイプ情報を保持し、変更する必要があります。ストライク2。弱いタイプのシステムでも、多くのタイプ安全バグが発生します。
当然、弱いタイピングが望ましい多くのケースもあります。動的言語はしばしばスクリプティングの役割を果たします。コード化が簡単で、解釈が容易で、コンパイラよりも新しいプラットフォームに移植することができます。これは非常に異なるシステムを一緒に接着するのに非常に役立ちます。 1つのスクリプトは、オペレーティングシステムやその上の多くのプログラムと対話して、お気に入りのWebサイトから最新のすべての猫のビデオを毎日ダウンロードするようにスケジュールできます。
いつものように、あなたのレパートリーには動的言語と静的言語があることを強くお勧めします。強力なタイピングと弱いタイピングの容易さへのアクセスを保証するためにアクセスすることは非常に貴重です。コードomnivore :)
- 1. スウィフト譲渡評価が無効になった理由は何ですか?
- 2. コンテンツエリアのタグの高さが25pxの理由は何ですか?
- 3. インデックスシークがインデックススキャンよりも高価になる理由
- 4. スカラーコンテキストでPerlでハッシュを評価する理由は何ですか?
- 5. GCCの高価な最適化とは何ですか?
- 6. 「未定義はオブジェクトではない(PropTypes.shapeを評価する)」という理由は何ですか?
- 7. VxWorksはそのように決定的かつ高速になる理由は何ですか?
- 8. stat()は高価なシステムコールですか?
- 9. iPhoneクラッシュログ - 理由は何ですか?
- 10. match.errorの理由は何ですか?
- 11. 理由は何ですか:laravel 5
- 12. sqliteロールバックの理由は何ですか?
- 13. NSTimerは高価ですか?
- 14. Rails:メソッドをプライベートにする主な理由は何ですか?
- 15. Eclipse Junoにアップグレードする主な理由は何ですか?
- 16. 高価、比較または割り当ては何ですか?
- 17. AWS EC2:常に最も安価なインスタンスを使用しない理由は何ですか?
- 18. Flash/Silverlight/WhateverにWYSIWYGリッチテキストエディタがない理由は何ですか?
- 19. Java 8にプリミティブBiConsumerがない理由は何ですか?
- 20. メソッドaddMouseListenerにスーパーが必要ない理由は何ですか?
- 21. MyStackがProtoStackに準拠しない理由は何ですか?
- 22. これはまだ選択的な理由は何ですか?
- 23. 最高のCSSグリッドシステムとは何だと思いますか?その理由は何ですか?
- 24. Javaセキュアなコーディングが重要な理由は何ですか?
- 25. ActionCable:ブロードキャストを別のジョブに入れる理由は何ですか?コントローラからブロードキャストしない理由は?
- 26. PyDevは何らかの理由で
- 27. OpenGraphタグは、何らかの理由で
- 28. .htaccessが正確でない理由は何ですか。
- 29. シェルスクリプトで実行しない理由は何ですか?
- 30. ここで静的な理由は何ですか?
これは包括的でよく考えられた答えです。これをまとめてくれてありがとう、ありがとう! – user3325789