9

SO には、静的型付けと動的型付けについて多くの質問がありますが、両方を備えた言語についてはあまり見つけていません。説明させてください。

Python や Perl などのラピッド プロトタイピングに関しては、動的に型付けされた言語が有利なようですが、静的に型付けされた言語 (C++、OCaml など) では、コンパイル時のチェックと最適化が可能です。両方を許可する言語があるかどうか疑問に思っています:

  • まず、動的型付け、簡単なデバッグと REPL のための一般的な (つまり、任意の型を受け入れる) 印刷関数、および変化する設計選択への適応を使用して迅速にプロトタイプを作成します。
  • 次に、いくつかの変更を加え、コードをライブラリにコンパイルします。静的型付けを使用して、より多くの安全性テストと最高のパフォーマンスを実現します。静的型付けを許可するために変更することは、たとえば、変数の宣言 (ただし、型推論のおかげですべてに注釈を付けるわけではありません)、コンパイラ スイッチの追加、汎用関数の代わりに特定の関数の使用などです。

C# では、デフォルトは静的型付けですが、次のように記述できます。

dynamic fooVar = new FooClass();

その場合fooVar、動的に型付けされます。

http://www.lexifi.com/blog/runtime-typesのOCamlもこのようなものを提供しているようです。

どの言語が最適かについての主観的なアドバイスはやめてください。客観的な機能のみを使用してください。

4

1 に答える 1

7

もちろん。それは「漸進的型付け」と呼ばれ、私はそれをトレンディと見なします。

「漸進的型付け」のいとこは「オプションの型付け」です。どちらの場合も、静的型があるコードとないコードが共存します。ただし、「オプションの型付け」では、言語のセマンティクスは静的型に完全に依存しませんが、「漸進的型付け」では、静的型が使用可能な場合、セマンティクスは静的型を考慮する場合があります。

コース「静的型付けと動的型付けの統合」のページから、彼らが研究していることを読みました

Typed Racket(以前のTyped Scheme)、C#4.0、Diamondback Ruby、Haskell、Sage、Thornなど、静的型付けと動的型付けを統合する最近の言語の設計

Dartをリストに追加できます。これは、ポジションペーパーのPluggable、OptionalTypeSystemsのようにオプションの型付けを提案します。

于 2012-11-16T10:07:54.300 に答える