La tipificación estática es una técnica ampliamente utilizada en los lenguajes de programación , en la que una variable , un parámetro de subrutina, un valor de retorno de función se asocia con un tipo en el momento de la declaración y el tipo no se puede cambiar más tarde (la variable o parámetro aceptará, y la función devolverá valores solo de este tipo). Ejemplos de lenguajes tipificados estáticamente son Ada , C , C++ , C# , D , Java , ML , Pascal , Solidity , Go , Fortran. La técnica opuesta es la escritura dinámica .
Algunos lenguajes escritos estáticamente ganaron más tarde la capacidad de usar también escritura dinámica con la ayuda de subsistemas especiales. Por ejemplo, Varianten Delphi , paquetes en AliceML [1] , Data.Dynamicen Haskell [2] .
La escritura estática produce el código de máquina más simple , por lo que es útil para los lenguajes que producen ejecutables del sistema operativo o código intermedio compilado por JIT . Muchos errores ya se eliminan en la etapa de compilación, por lo que la escritura estática es buena para escribir código complejo pero rápido. En un IDE , el autocompletado más relevante es factible , especialmente si el tipo es estático fuerte: se pueden descartar muchas opciones por no coincidir con el tipo. Cuanto más grande y complejo sea el proyecto, mayor será la ventaja de la escritura estática, y viceversa.
Al mismo tiempo, los lenguajes tipificados estáticamente con una base matemática insuficientemente desarrollada resultan bastante detallados: cada vez que necesita especificar qué tipo tendrá la variable. Algunos lenguajes tienen inferencia de tipo automática , pero esto puede conducir a errores sutiles. Esto no es cierto para los lenguajes de la familia ML , basados en el llamado " esquema de tipado principal [3] ", que infiere automáticamente el tipo más general de cualquier expresión y verifica estrictamente la coincidencia de tipos de dependencia. Esto le da al lenguaje la expresividad de los escritos dinámicamente, al tiempo que proporciona un mejor rendimiento y seguridad de tipo [3] .