¿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)?
¿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? ¿Hay alguna característica útil que se pueda lograr con un tipo que no sea con el otro (en diseño y arquitectura, por supuesto)?
Además, ¿hay algún patrón de diseño dinámico específico?
Respuestas:
Vamos a aclarar algunas cosas:
Dejando a un lado todas esas sorprendentes similitudes, hay algunas diferencias prácticas que influyen en el proceso de desarrollo:
También hay un tipo de programa que nunca podría haberse hecho sin tipeo estático: Singularity , un sistema operativo sin límites de proceso de hardware. Está escrito en una pequeña cantidad de C, algo de C # y un dialecto de C # llamado Spec #, que admite contratos de código.
A pesar de estar escrito en un lenguaje recolectado como basura, el rendimiento de la comunicación multitarea y entre procesos en este sistema operativo es, de hecho, mejor que cualquier otra cosa, debido al hecho de que todos los procesos se ejecutan en un espacio de memoria y debido a las optimizaciones de verificación formales I mencionado anteriormente. No podría hacer esto sin tipeo estático, porque para que los programas no puedan comprometer el resto del sistema, los objetos de comunicación deben ser estáticamente verificables.
Sin embargo, la mayoría de las veces, las arquitecturas deberían ser muy similares. Los lenguajes estáticos pueden hacer que los programas sean más fáciles de razonar en muchos casos porque los tipos están bien definidos, pero un programa de lenguaje dinámico bien escrito también tendría tipos que, al menos, están bien definidos en la mente de los desarrolladores.
fuente
Hay una diferencia arquitectónica significativa. Actuación.
Dependiendo de su presupuesto de hardware, la carga de trabajo esperada y los acuerdos de nivel de servicio, es posible que no sea posible cumplir los requisitos con un lenguaje dinámico.
Con mayor frecuencia, la velocidad de desarrollo y la flexibilidad proporcionadas por los lenguajes dinámicos compensan los tiempos de respuesta más lentos y el consumo de memoria y CPU más elevado. Pero para sistemas más grandes con limitaciones de presupuesto o rendimiento, los gastos generales de un lenguaje dinámico pueden ser altos.
fuente
Nunca he pensado en este sentido. Entonces, cuando hizo un Google, el blog de Peter Norvig fue uno de los principales éxitos. Dice que algunos patrones de diseño son más fáciles de implementar en lenguajes dinámicos que los lenguajes orientados a objetos tradicionales como C ++. Creo que también debería haber diferencias en el diseño / arquitectura, ya que señala que la implementación es más fácil en lenguajes dinámicos. Intentaré agregar más a la respuesta a medida que estudie más.
fuente
No.
Es un poco más fácil escribir marcos sofisticados para lenguajes dinámicos. Pero eso no es una cosa de aplicación.
Ninguno, de verdad.
Puedes escribir cosas buenas en cualquier idioma amable.
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.
Tal vez. Python
eval()
y susexecfile()
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.
fuente