6

Jon Skeet がこのブログ投稿を投稿しました。その中で彼は、言語の動的部分が優れている理由を尋ねようとしていると述べています。だから私は彼に代わって先制的に尋ねようと思った.

4

5 に答える 5

8

プログラミング言語の型に対する 2 つの根本的に異なるアプローチは、静的型動的型です。これらは非常に異なるプログラミング パラダイムを可能にし、それぞれに独自の利点と欠点があります。

このテーマの背景については、Chris Smith の優れた記事What to Know Before Debating Type Systemsを強くお勧めします。

その記事から:

静的型システムは、コンパイラがソース コードを調べてラベル (「型」と呼ばれる) を構文の一部に割り当て、それらを使用してプログラムの動作について何かを推測するメカニズムです。動的型システムは、コンパイラがコードを生成して、プログラムで使用されるデータの種類 (偶然にも、「型」とも呼ばれます) を追跡するためのメカニズムです。もちろん、これら 2 つのシステムのそれぞれで同じ「タイプ」という単語が使用されているのは、まったくの偶然ではありません。しかし、それは一種の弱い歴史的意義を持っていると最もよく理解されています. 両方のシステムで「タイプ」が実際に同じものを意味する世界観を見つけようとすると、大きな混乱が生じます。そうではありません。この問題に取り組むためのより良い方法は、次のことを認識することです。

  • 多くの場合、プログラマーは静的型と動的型で同じ問題を解決しようとしています。
  • それにもかかわらず、静的型は動的型によって解決される問題に限定されません。
  • また、動的型は、静的型で解決できる問題に限定されません。
  • 本質的に、これら 2 つの手法はまったく同じものではありません。
于 2009-11-13T23:05:08.610 に答える
4

主なことは、プログラマーにこれ、あれ、およびその他を「宣言」させることから生じる多くの冗長性を回避することです。同様の利点は型推論によっても得られますが(たとえば、 booはそれを行います)、それほど安価で柔軟ではありません。私が過去に書いたように...:

完全な型チェックまたは推論には、プログラム全体の分析が必要ですが、これは非常に非現実的かもしれません。VanRoyとHaridiの傑作「コンピュータープログラミングの概念、技法、モデル」で「完全にオープンなプログラミング」と呼ばれるものを止めます。2004年からの私の投稿の引用: "" "私は彼らの結論に同意するかもしれないし、同意しないかもしれないが、彼らの本のヴァンロイとハリディの104-106ページの説明が大好きです(基本的に本質的な違いは小さいということです) -彼らはOzとAliceをそれぞれ静的型付けなしと静的型付けの相互運用可能な言語として指摘していますが、すべての点が優れています。最も重要なことは、動的型付けが実際のモジュール性を可能にする方法(静的型付けでは難しい、

「動的型付けが推奨されます」、「プログラムが可能な限り柔軟でなければならない場合」と彼らは結論付けています。アジャイルマニフェストを読んで、ほとんどの現実世界のアプリケーションプログラミングで最大限の柔軟性が重要である理由を理解することをお勧めします。したがって、より学術的なサークルではなく、現実の世界で、Dr。VanRoyとDr.Hadidiが動的型付けを行う理由を理解することをお勧めします。一般的には望ましいことであり、違いを生むほど小さな問題ではありません。それでも、私が見た他のほとんどの本よりも、長所と短所の3つの優れた議論のページを捧げることで、少なくとも問題に対する認識が高まっています。ほとんどの本は、いずれかの方法で優先順位を明確に描写し、実行しています。 、したがって、議論がそれほどバランスが取れていることはめったにありません;)。

于 2009-11-13T23:09:27.960 に答える
1

いくつかの長所と短所を比較してみましょう。

動的言語:

  • タイプの決定は、コードへの影響を最小限に抑えて変更できます。
  • コードは単独で記述/コンパイルできます。コードを書くのに、実装や型の正式な説明さえ必要ありません。
  • タイプエラーを見つけるには、単体テストに依存する必要があります。
  • 言語はもっと簡潔です。タイピングが少なくなります。
  • タイプは実行時に変更できます。
  • 編集して続行すると、実装がはるかに簡単になります。

静的言語:

  • コンパイラはすべてのタイプエラーを通知します。
  • 編集者は、Intellisenseのようなプロンプトをはるかに豊富に提供できます。
  • イライラする可能性のある、より厳密な構文。
  • より多くのタイピングが(通常)必要です。
  • コンパイラーは、事前にタイプを知っていれば、より適切な最適化を行うことができます。

もう少し複雑にするために、C#などの言語はvar構造で部分的に動的になります(とにかく感じます)、または静的に型付けされているが型推論のために動的に感じられるHaskellのような言語を考えてみてください。

于 2009-11-13T23:24:38.697 に答える