¿Existen diferencias arquitectónicas importantes al diseñar aplicaciones que se construirán en lenguajes estáticos (como C # o Java) y lenguajes dinámicos (como Ruby o Python)?
No.
Es un poco más fácil escribir marcos sofisticados para lenguajes dinámicos. Pero eso no es una cosa de aplicación.
¿Cuáles son las posibilidades de diseño que podrían ser una buena opción para un tipo que es malo para el otro?
Ninguno, de verdad.
Puedes escribir cosas buenas en cualquier idioma amable.
¿Hay características útiles que se puedan lograr con un tipo que no sea con el otro (en diseño y arquitectura, por supuesto)?
No.
La diferencia es que los lenguajes dinámicos son "escribir, ejecutar, corregir". Puedes experimentar y arreglar rápidamente.
Los lenguajes estáticos son "escribir, compilar, construir, ejecutar, corregir". No puedes experimentar tan fácilmente.
Aparte de eso, son casi idénticos en sus capacidades.
¿Hay algún patrón de diseño dinámico específico?
Tal vez. Python eval()
y sus execfile()
funciones, en cierto modo, apuntan a una característica de lenguaje dinámico que es difícil (pero lejos de ser imposible) manejar en un lenguaje estático. Sería mucho más líneas de código para compilar y ejecutar código en el mismo espacio de proceso.
No es específico del lenguaje dinámico. Es mas facil.