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