Comparación de código tipificado estáticamente con código tipificado dinámicamente: costos y beneficios

StackOverflow https://stackoverflow.com/questions/419072

Pregunta

Independientemente de sus méritos, el Actionscript 3 de Adobe presenta una oportunidad única para explorar las consecuencias de los lenguajes mecanografiados frente a los no tipificados, porque es un superconjunto de javascript bastante estricto, con todos los beneficios sintácticos / sobrecarga de las declaraciones de tipo estricto. casting declarativo, etc.

Lo que esto hace posible es comparar el mismo código escrito en ambos sentidos, mientras se toma en cuenta la sintaxis del lenguaje esencial.

Esto me hace preguntarme si existe alguna evidencia cuantitativa sobre el beneficio real de la tipificación fuerte, en particular para la verificación de errores durante la compilación, con respecto a las tasas de error, la productividad de programación y el volumen de código; ¿O nuestras perspectivas están totalmente basadas en especulaciones y conjeturas? ¿Hay otros idiomas que se puedan usar en ambos sentidos (sin contar el VB anticuado, no siendo un lenguaje muy respetado de ninguna manera)?

He pasado mucho tiempo con ambos idiomas, pero no he decidido de manera concluyente qué camino prefiero, y prefiero no agregar a la evidencia anecdótica: estoy buscando información objetiva.

¿Fue útil?

Solución

Esta es una de las grandes guerras religiosas en la programación, solo superada quizás por el conflicto entre el verdadero Editor EMACS y el engendro maligno de Satanás vi.

Básicamente, si un programa escrito en un lenguaje dinámico es correcto, entonces se puede convertir a un lenguaje de tipo estático y seguir siendo correcto, y viceversa. La ventaja de un idioma realmente estático es que los errores que se mostrarían en tiempo de ejecución en un lenguaje dinámico se pueden identificar en tiempo de compilación en un lenguaje de tipo estático.

Lo que a menudo se pasa por alto en estas situaciones, sin embargo, es que los lenguajes con tipos estáticos generalmente tienen escotillas de escape (como los pronósticos), y los lenguajes aparentemente dinámicos pueden usar la inferencia de tipos para inferir y tratar como tipificados estáticamente, los tipos de expresiones aparentemente dinámicas. .

Lo que es realmente importante, debajo de las portadas, es el programador. Si el programador piensa que el programa es correcto, entonces será correcto ya sea en un lenguaje estático o dinámico. No tengo conocimiento de ninguna buena evidencia experimental de que alguno de los dos sea más productivo o sea más propenso a cometer errores en la práctica.

Otros consejos

En mi opinión, los lenguajes fuertemente tipados como C # pueden identificar durante el tiempo de compilación muchos errores pasados ??por alto que no serían detectados en un lenguaje suelto y que, por lo tanto, causarán un error de tiempo de ejecución más adelante. No creo que esto sea solo una especulación, ya que la compilación estricta puede anticipar problemas que luego podrían causar errores durante el tiempo de ejecución. Esto puede eliminar potencialmente la mayoría de los errores de codificación que se pasan por alto durante la implementación, pero el compilador puede encontrarlos y corregirlos fácilmente.

El valor de la escritura estática me parece bastante limitado si cree, como yo, que no se puede decir que algo de software sea cierto a menos que tenga una prueba que demuestre que es así. Si acepta y practica eso, entonces es en gran medida irrelevante en cuanto a si los errores se identifican en el momento de la compilación o en el momento de la prueba.

En este punto, prefiero tener el más breve de los dos tipos de idiomas, que en mi experiencia han sido los idiomas dinámicos.

La otra cara, es que la escritura estática solo te ayuda si no estás escribiendo pruebas. Si ese es el caso, la escritura estática probablemente no sea suficiente para garantizar el correcto funcionamiento de su software.

El OP y felipecsl están confundidos acerca de la terminología utilizada cuando se habla de disciplinas de mecanografía.

La escritura estática significa que los tipos se verifican durante el tiempo de compilación (cualquier tiempo de compilación significa en el idioma). La escritura dinámica significa que los tipos se verifican a medida que se ejecutan las expresiones / declaraciones. La escritura fuerte significa que no puede subvertir (lanzar) un puntero a un entero, por ejemplo. La escritura débil es lo opuesto a la escritura fuerte.

No hay "tipificación estricta", que yo sepa.

Ahora, para que otra persona conteste la pregunta real ;-)

La tipificación débil requiere más tiempo de mantenimiento. A medida que los programas se vuelven más complejos, surgen más problemas debido a que no hay un compilador para detectar problemas obvios. No recomendado para grandes proyectos complejos. Hablo por experiencia.

land estadisticamente typd. Tenga sus variables y expresiones como tipos fijos que el programador declare explícitamente o que deduzca. El compilador. Usando esto. Información, el tipo de verificación aquí se llevará a cabo en tiempo de compilación. Si bien los lang tipificados dinámicamente tienen sus valores fijos, pero las variables y las xxpresiones no están fijas ... debido al hecho de que cuando se calcula un operando, es probable que devuelva valores diferentes, la verificación de tipos se realiza después de que se haya calculado el operando. después del cálculo pero antes de realizar la operación en tiempo de ejecución

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top