Solución:
Idiomas escritos estáticamente
Un idioma se escribe estáticamente si se conoce el tipo de variable en el momento de la compilación. Para algunos lenguajes, esto significa que usted, como programador, debe especificar de qué tipo es cada variable (por ejemplo: Java, C, C ++); otros idiomas ofrecen alguna forma de inferencia de tipo, la capacidad del sistema de tipos para deducir el tipo de una variable (por ejemplo: OCaml, Haskell, Scala, Kotlin)
La principal ventaja aquí es que el compilador puede realizar todo tipo de comprobaciones y, por lo tanto, se detectan muchos errores triviales en una etapa muy temprana.
Ejemplos: C, C ++, Java, Rust, Go, Scala
Idiomas escritos dinámicamente
Un idioma se escribe dinámicamente si el tipo está asociado con valores en tiempo de ejecución y no con variables / campos / etc.con nombre. Esto significa que usted, como programador, puede escribir un poco más rápido porque no tiene que especificar tipos cada vez (a menos que utilice un lenguaje de tipado estático con inferencia de tipo).
Ejemplos: Perl, Ruby, Python, PHP, JavaScript
La mayoría de los lenguajes de scripting tienen esta característica, ya que de todos modos no hay un compilador para realizar una verificación de tipo estática, pero es posible que se encuentre buscando un error debido a que el intérprete malinterpretó el tipo de una variable. Afortunadamente, los scripts tienden a ser pequeños, por lo que los errores no tienen tantos lugares para esconderse.
La mayoría de los lenguajes escritos dinámicamente le permiten proporcionar información de tipo, pero no la requieren. Un lenguaje que se está desarrollando actualmente, Rascal, adopta un enfoque híbrido que permite la escritura dinámica dentro de las funciones, pero aplica la escritura estática para la firma de la función.
Los lenguajes de programación tipados estáticamente hacen verificación de tipos (es decir, el proceso de verificar y hacer cumplir las restricciones de tipos) en tiempo de compilación Opuesto a tiempo de ejecución.
Los lenguajes de programación tipados dinámicamente sí comprueban el tipo en tiempo de ejecución Opuesto a tiempo de compilación.
Ejemplos de lenguajes de tipado estático son: – Java, C, C ++
Ejemplos de lenguajes tipados dinámicamente son: – Perl, Ruby, Python, PHP, JavaScript
Aquí hay un ejemplo que contrasta cómo Python (escrito dinámicamente) y Go (escrito estáticamente) manejan un error de tipo:
def silly(a):
if a > 0:
print 'Hi'
else:
print 5 + '3'
Python realiza la verificación de tipos en tiempo de ejecución y, por lo tanto:
silly(2)
Funciona perfectamente bien y produce el resultado esperado. Hi
. El error solo se genera si se golpea la línea problemática:
silly(-1)
Produce
TypeError: unsupported operand type(s) for +: 'int' and 'str'
porque la línea relevante se ejecutó realmente.
Go, por otro lado, realiza la verificación de tipos en tiempo de compilación:
package main
import ("fmt"
)
func silly(a int) {
if (a > 0) {
fmt.Println("Hi")
} else {
fmt.Println("3" + 5)
}
}
func main() {
silly(2)
}
Lo anterior no se compilará, con el siguiente error:
invalid operation: "3" + 5 (mismatched types string and int)