静的言語(C#やJavaなど)と動的言語(RubyまたはPython)など)で構築されるアプリケーションを設計するときに、アーキテクチャ上の大きな違いはありますか?
あるタイプに適したデザインで、他のタイプには適していないデザインの可能性はどれですか?当然のことながら、他のタイプでは実現できない便利な機能はありますか?
また、ダイナミック固有のデザインパターンはありますか?
いくつかのことをまっすぐにしましょう:
これらすべての驚くべき類似点はさておき、開発プロセスに影響を与える実際的な違いがいくつかあります。
静的型付けなしで決して作成できなかったプログラムの1つのタイプもあります: Singularity 、ハードウェアプロセス境界のないOS 。少量のC、いくつかのC#、およびコードコントラクトをサポートするSpec#と呼ばれるC#の方言で書かれています。
ガベージコレクションされた言語で書かれているにもかかわらず、このOSでのマルチタスクおよびプロセス間通信のパフォーマンスは、実際には他のどこよりも優れています。すべてのプロセスは1つのメモリスペースで実行されます。これは、前述の正式な検証の最適化によります。プログラムがシステムの残りの部分を危険にさらすことができないようにするには、通信オブジェクトが静的に検証可能である必要があるため、静的型付けなしではこれを行うことはできません。
ただし、ほとんどの場合、アーキテクチャはほとんど同じに見えるはずです。静的言語は、型が明確に定義されているため、多くの場合、プログラムの推論を容易にしますが、適切に記述された動的言語プログラムには、少なくとも開発者の心の中で明確に定義されている型もあります。
アーキテクチャには大きな違いがあります。パフォーマンス。
ハードウェアの予算、予想されるワークロード、およびサービスレベル契約によっては、動的言語では要件を満たすことができない場合があります。
ほとんどの場合、動的言語によって提供される開発の速度と柔軟性は、遅い応答時間と高いCPUとメモリ消費を相殺します。ただし、予算やパフォーマンスの制約がある大規模なシステムでは、動的言語のオーバーヘッドが高くなる可能性があります。
私はこれらの線に沿って考えたことはありません。 Googleが登場したとき、 Peter Norvigのブログ がトップヒットの1つでした。一部の設計パターンは、C++などの従来のオブジェクト指向言語よりも動的言語で実装する方が簡単であると述べています。動的言語では実装が簡単であると彼は指摘しているので、設計/アーキテクチャにも違いがあるはずだと思います。さらに勉強しながら、さらに答えを追加していきます。
静的言語(C#やJavaなど)と動的言語(RubyまたはPython)など)で構築されるアプリケーションを設計する場合、アーキテクチャに大きな違いはありますか?
番号。
動的言語用の豪華なフレームワークを書く方が少し簡単です。しかし、それはアプリケーションではありません。
あるタイプに適したデザインで、他のタイプには適していないデザインの可能性はどれですか?
ありません。
良いものはどちらの種類の言語でも書くことができます。
当然のことながら、他のタイプでは実現できない、他のタイプでは実現できない便利な機能はありますか?
番号。
違いは、動的言語は「書き込み、実行、修正」であるということです。すぐに実験して修正できます。
静的言語は「書き込み、コンパイル、ビルド、実行、修正」です。簡単に実験することはできません。
それ以外は、機能はほぼ同じです。
ダイナミック固有のデザインパターンはありますか?
多分。 Python eval()
およびexecfile()
関数-ある意味で-処理が難しい(しかし不可能ではない)動的言語機能を指す静的言語では、同じプロセス空間でコードをコンパイルして実行するには、はるかに多くのコード行が必要になります。
動的言語固有ではありません。簡単です。