2009-02-27 14 views
2

私はC#、Java、Cなどの静的言語を使用しており、動的言語であるJavascriptでいくつかの作業を行っています。私が理解したいことということですので、動的言語はどのような状況で適切ですか?

人気の信念に反して

、私はJavascriptに比べて自分はC#で高速なコードを書いて見つける(と私はJavaScriptに比べてC#でより多くの経験を持っているので、それは可能性があり)

、動的言語が適切であり、静的言語よりも好まれる場所は何ですか?

今後数年間維持する必要のあるエンタープライズシステムに動的言語を使用できますか?それは主に使用およびスローコードで使用されますか?

+0

これはwikiではありませんか? –

+0

追加で、私は静的言語IDEができることに近づけることができる動的言語IDEをまだ見ていません。優れたIDEは生産性を大幅に向上させます。 – MichaelGG

+0

http://stackoverflow.com/questions/493973/uses-for-dynamic-languages/667275#667275 – Dan

答えて

3

私は、いつでもシンプルさと柔軟性がパフォーマンスと説明よりも重要なものになります。静的タイピングは、非常に高速なアセンブリコードの作成に使用できる多くの情報をコンパイラに提供します。また、契約を明示的にすることで、コードのセクションを分離しやすくすることも可能です。しかし、これらのコントラクトは非常に明示的であり、非常に多くのコードを通じて波及効果があるため、変更するのはやや難しいです。高度な柔軟性が必要なシステムでは、静的タイピングの剛性を回避するために複雑さが増します。

個人的には、私は静的な型チェックの欠如がそれほど大きな問題ではないとは思わない。もちろん、コンパイル時の失敗は、理想的な高速障害です。しかし、動的言語のパラダイムは本当に悪いことではありません。実行時に動的言語で型エラーが発生すると、即座にエラーが発生し、明示的なエラーメッセージが返されます。あなたは奇妙な未定義の振る舞いと、まったく別の場所での失敗を取得するだけではありません。

一方、私は良いテンプレートシステム(C++ではない)と静的型推論が絶対的な神話であることが分かりました。これは基本的にコンパイル時の動的な型付けなので、両方の世界を最大限に活用することができます。コンパイル時にはすべてが静的にチェックされます。早期にエラーが検出され、効率的なアセンブリコードが生成されます。それにもかかわらず、設計時に契約を明確にする必要がないという柔軟性を保持しています。私の理解は、HaskellやOCamlなどがこれをうまくやっていることです。

+0

+1 - シンプルさと柔軟性を指摘します。 – Ramesh

0

C#4.0のダイナミクスの有用性を示す1つのシタオテーション。 2つのコントロールのコントロールを含むことができるコントロールがあるとします。どちらもDataSourceプロパティを持っていますが、この共通のスーパークラスはありません。これを明確にするために、ダイナミクスを使用して、プロパティが実行時レベルに存在するかどうかを確認できます。

その他のシナリオには、条件に基づいてランタイムを実行するためのクラス変更が含まれます。関数C()だけがtrueを返すなら、関数A()がクラスBになるようにしたいとしましょう。 JavaScriptで行うことはできますが、C#ではこれを行うことはできません。

+0

オブジェクトの動作が実行時に変更された場合、混乱とメンテナンスにはなりませんか? – Ramesh

+0

できます。しかし、これが必要な場合があります。 – Migol

+0

動的タイピングは、最初の例に対処するための貧弱な方法です。 2つのクラスが類似した構造を持ち、共通の型を継承/実装していない場合は、メンバの制約、構造型の型付け、またはある種の型のクラスが適しているようです。 – MichaelGG

3

私はこのように一般化することはできません。ダイナミック/非ダイナミック言語は、どちらも同じドメイン内で役立ちますが、ほとんどすべてで構成されています。

+0

私は実行時に動的なコードを維持することに心配しています。エンタープライズアプリケーションは動的言語を使用でき、保守には向かないのですか? – Ramesh

+0

はい、どうしてですか?メンテナンス地獄は、言語が動的か静的かにかかわらず、悪いデザインの製品です。 –

+0

私は同意しますが、動的言語は簡単に静的に比べてメンテナンスの問題になることができます私の理解だった。また、ミッションクリティカルなリアルタイムアプリに動的言語を使用できますか? – Ramesh

0

JavaScriptが最良の例ではありません。 Python、Ruby、Groovyを見てください。

+0

またはLua、Scheme、arc ... – Javier

+0

JavaScriptには素晴らしいe4x拡張機能があります。 – Dan

+0

@ダンしかし、どのようなe4x動的言語と関係がありますか?リフレクション、イントロスペクション、クロージャーなどです。これらは静的なものとは実際には動的な言語が異なる機能です。 – vartec

0

動的言語は、静的言語と同じように、プログラマによって暗黙的に定義された型を持つことができます。

動的言語についての素晴らしい点の1つは、実際には存在しないオブジェクトやメソッドを呼び出すメソッドスタブを作成できることです。これは、最初にコードを設計し、後で詳細を記入するのに適しています。あなたがチームで働いているときには良いことです。しかし、これを行うと、コンパイラは通常、メソッド呼び出しがうまくいかないという警告を表示します。コンパイラはコードをコード化し、そのコードを実行させます。

ダイナミックな言語は強力ですが、パワーによってはデバッグが困難になることがあります。

関連する問題