Escritura fuerte y débil


En la programación de computadoras , una de las muchas formas en que los lenguajes de programación se clasifican coloquialmente es si el sistema de tipos del lenguaje lo hace fuertemente tipado o débilmente tipificado ( tipo suelto ). Sin embargo, no existe una definición técnica precisa de lo que significan los términos y diferentes autores no están de acuerdo sobre el significado implícito de los términos y las clasificaciones relativas de la "fuerza" de los sistemas de tipos de los principales lenguajes de programación.

En general, un lenguaje fuertemente tipado tiene reglas de escritura más estrictas en tiempo de compilación , lo que implica que es más probable que ocurran errores y excepciones durante la compilación. La mayoría de estas reglas afectan la asignación de variables, los valores de retorno de funciones, los argumentos de procedimientos y las llamadas a funciones. Los lenguajes tipeados dinámicamente (donde la verificación de tipos ocurre en tiempo de ejecución ) también se pueden tipear fuertemente. Tenga en cuenta que en los lenguajes tipificados dinámicamente, los valores tienen tipos, no variables.

Un lenguaje débilmente tipificado tiene reglas de tipeo menos estrictas y puede producir resultados impredecibles o incluso erróneos o puede realizar una conversión de tipo implícita en tiempo de ejecución. [1] Los defensores de los lenguajes tipificados dinámicamente (generalmente "débilmente tipificados") consideran que estas preocupaciones son exageradas y creen que la tipificación estática en realidad introduce un conjunto exponencialmente mayor de problemas e ineficiencias. [2] Un concepto diferente pero relacionado es la tipificación latente .

En 1974, Liskov y S. Zilles definieron un lenguaje fuertemente tipado como aquel en el que "siempre que un objeto se pasa de una función de llamada a una función llamada, su tipo debe ser compatible con el tipo declarado en la función llamada". [3] En 1977, K. Jackson escribió: "En un lenguaje fuertemente tipado, cada área de datos tendrá un tipo distinto y cada proceso establecerá sus requisitos de comunicación en términos de estos tipos". [4]

Se ha hecho referencia a varias decisiones de diseño de lenguaje diferentes como evidencia de escritura "fuerte" o "débil". Muchos de estos se entienden con mayor precisión como la presencia o ausencia de seguridad de tipo, seguridad de memoria , verificación de tipo estática o verificación de tipo dinámica .

La "tipificación fuerte" generalmente se refiere al uso de tipos de lenguaje de programación para capturar invariantes del código y garantizar su corrección, y excluir definitivamente ciertas clases de errores de programación. Por lo tanto, se utilizan muchas disciplinas de "tipado fuerte" para lograr estos objetivos.