Existem grandes diferenças arquiteturais ao projetar aplicativos que serão construídos em linguagens estáticas (como C # ou Java) e linguagens dinâmicas (como Ruby ou Python)?
Não.
É um pouco mais fácil escrever estruturas sofisticadas para linguagens dinâmicas. Mas isso não é uma coisa de aplicação.
Quais são as possibilidades de design que podem ser uma boa escolha para um tipo ruim para o outro?
Nenhuma, realmente.
Você pode escrever coisas boas em qualquer idioma.
Existem recursos úteis que podem ser obtidos com um tipo que não é com o outro (em design e arquitetura, é claro)?
Não.
A diferença é que as linguagens dinâmicas são "escrever, executar, corrigir". Você pode experimentar e corrigir rapidamente.
Linguagens estáticas são "escrever, compilar, construir, executar, corrigir". Você não pode experimentar tão facilmente.
Fora isso, eles são quase idênticos em suas capacidades.
Existem padrões de design específicos para dinâmicas?
Talvez. O Python eval()
e as execfile()
funções - de certa forma - apontam para um recurso de linguagem dinâmica que é difícil (mas longe de impossível) de manusear em uma linguagem estática. Seria muito mais linhas de código para compilar e executar código no mesmo espaço de processo.
Não é específico do idioma dinâmico. É apenas mais fácil.