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)?
Quais são as possibilidades de design que podem ser uma boa escolha para um tipo ruim para o outro? Existem recursos úteis que podem ser obtidos com um tipo que não é com o outro (em design e arquitetura, é claro)?
Além disso, existem padrões de design específicos para dinâmicas?
Respostas:
Vamos esclarecer algumas coisas:
Todas essas semelhanças surpreendentes à parte, existem algumas diferenças práticas que influenciam o processo de desenvolvimento:
Há também um tipo de programa que nunca poderia ter sido criado sem a digitação estática: Singularity , um sistema operacional sem limites de processo de hardware. Está escrito em uma pequena quantidade de C, alguns C # e um dialeto de C # chamado Spec #, que suporta contratos de código.
Apesar de ter sido escrito em uma linguagem de coleta de lixo, o desempenho da comunicação multitarefa e interprocessos neste sistema operacional é de fato melhor do que qualquer outra coisa lá fora, devido ao fato de que todos os processos são executados em um espaço de memória e devido às otimizações formais de verificação. Mencionado acima. Você não poderia fazer isso sem a digitação estática, porque, para que os programas não comprometam o restante do sistema, os objetos de comunicação precisam ser estaticamente verificáveis.
Na maioria das vezes, as arquiteturas devem ser muito parecidas. As linguagens estáticas podem facilitar a discussão dos programas em muitos casos, porque os tipos são bem definidos, mas um programa de linguagem dinâmica bem escrito também teria tipos que são, no mínimo, bem definidos na mente dos desenvolvedores.
fonte
Há uma diferença arquitetônica significativa. Atuação.
Dependendo do seu orçamento de hardware, carga de trabalho esperada e acordos de nível de serviço, talvez não seja possível atender aos requisitos com um idioma dinâmico.
Na maioria das vezes, a velocidade de desenvolvimento e a flexibilidade fornecidas pelas linguagens dinâmicas compensam os tempos de resposta mais lentos, maior consumo de CPU e memória. Porém, para sistemas maiores com restrições de orçamento ou desempenho, as despesas gerais de uma linguagem dinâmica podem ser altas.
fonte
Eu nunca pensei nesse sentido. Então, quando foi feito o Google, o blog de Peter Norvig foi um dos principais hits. Ele afirma que alguns padrões de design são mais fáceis de implementar em linguagens dinâmicas que as linguagens orientadas a objetos tradicionais, como C ++. Eu acho que deveria haver diferenças no design / arquitetura, já que ele observa que a implementação é mais fácil em linguagens dinâmicas. Vou tentar acrescentar mais à resposta à medida que estudar mais.
fonte
Não.
É um pouco mais fácil escrever estruturas sofisticadas para linguagens dinâmicas. Mas isso não é uma coisa de aplicação.
Nenhuma, realmente.
Você pode escrever coisas boas em qualquer idioma.
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.
Talvez. O Python
eval()
e asexecfile()
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.
fonte