Cómo entender la diferencia entre los lenguajes estáticos, dinámicos, fuertes y poco escritos

En primer lugar, ¿qué son todas estas palabras – Estático – Dinámico – Fuerte – Débilmente Escrito Idiomas?

Así es como se pueden clasificar los lenguajes de programación:

  • Lenguajes de programación de tipo estático vs. lenguajes de programación de tipo dinámico
  • Lenguajes de programación fuertemente mecanografiados vs lenguajes de programación débilmente mecanografiados.

Entenderemos lo que significan estos términos para que usted no tenga que buscarlos en su próxima guerra de llamas. Así que vamos a zambullirnos en:

Verificación de tipo

Es el proceso de verificar y hacer cumplir las restricciones de los tipos. Normalmente lo realiza el compilador o intérprete en tiempo de compilación o ejecución. Por ejemplo, no se puede dividir una cadena por un número de coma flotante (si se puede, por favor, no lo hagas). en términos más simples, la comprobación de tipo es simplemente mirar las variables y sus tipos y luego decir si esta expresión tiene sentido. por lo tanto, ahora sabemos lo que es la comprobación de tipo, entender estos términos es realmente simple.En idiomas escritos estáticamente la comprobación de tipo se realiza en tiempo de compilación. Mientras que en los lenguajes escritos dinámicamente , la comprobación de tipos se realiza en tiempo de ejecución.

¿Qué significa eso para usted?

Declaración de tipo

Estática: Todos los tipos de variables deben indicarse explícitamente, ya que esta información es necesaria en el momento de la compilación.
Por ejemplo en Java

float f = 0.5;

Dynamic: No se requiere declaración explícita ya que el tipo se asigna a una variable en tiempo de ejecución.

Por ejemplo, en Python

f = 0.5

Performance

Estática: Realice más procesamiento en tiempo de compilación pero ofrezca un mejor rendimiento en tiempo de ejecución. Dinámico: Compilador/intérpretes más eficientes, pero la comprobación del tipo en tiempo de ejecución afecta al rendimiento. Flexibilidad y errores

Estática: Es menos propenso a los errores de ejecución pero proporciona menos flexibilidad al programador. Dinámico: Proporciona más flexibilidad pero es más propenso a los errores de ejecución. Recordar It

Un hack rápido para recordar lo que se escribe estáticamente y dinámicamente, es llamarlos por sus nombres completos

==> Idiomas comprobados estáticamente.
>

>
==> Idiomas comprobados dinámicamente.

La nube de idiomas. Cortesía: Mayank Bhatnagar .

Pero, ¿qué son los idiomas fuertemente mecanografiados y los idiomas débilmente mecanografiados?

Es un espectro* (aviso legal en la parte inferior). Por lo tanto, vamos a seguir adelante y aprender los términos de la forma en que se utilizan a menudo.

>
En Lenguajes fuertemente tecleados una vez que un tipo es asignado a una variable say en tiempo de ejecución o tiempo de compilación, retiene ese tipo y no puede ser entremezclado en expresiones con otros tipos fácilmente.Por ejemplo en Python

data = “string1” //Type asignado como str en tiempo de ejecución

data = 5 //Type assigned as int at runtime

data = data + “string2” //Type-error str and int no puede ser concatenado >Whereas, en Lenguajes tecleados débilmente , una vez que un tipo es asignado a una variable say en tiempo de ejecución o tiempo de compilación, puede ser entremezclado fácilmente en expresiones con otros tipos.por ejemplo en Javascript

$data = “string1” //Type asignado como str en tiempo de ejecución

Datos = 5 //Tipo asignado como int en tiempo de ejecución

data = $data+”string2″ //str e int se concatenan

Conclusión

La comprobación de tipos asegura que los tipos de variables correctos forman parte de una expresión. En los lenguajes con verificación de tipo estática, la verificación de tipo se realiza en tiempo de compilación, mientras que en los lenguajes con verificación de tipo dinámica, la verificación de tipo se realiza en tiempo de ejecución.

Los lenguajes fuertemente mecanografiados tienen un mayor control de tipo y hacen cumplir el tipo asignado (en tiempo de compilación o ejecución), mientras que los lenguajes débilmente mecanografiados tienen un control de tipo débil y permiten expresiones entre varios tipos diferentes.

(¿Diversión?) Descargo de responsabilidad

Si entras en el nitty gritty y tratas de encontrar LA respuesta correcta , volverás desorientado (¡exactamente!). Resulta que no existe una demarcación oficial de estos términos acordada en toda la industria. Es un espectro. Pero las condiciones siguen siendo muy variadas. Así que, fui a cavar. La Especificación de Lenguaje Java llama a Java un lenguaje fuertemente mecanografiado. Pero The C Programming Language First Edition no utiliza tal término.

Referencias

  • medium.com/p/magic-lies-here-statically-typed-vs-dynamically-typed-languages
  • docs.oracle.com/javase/specs/jls/se8/jls8.pdf
  • archive.org/details/TheCProgrammingLanguageFirstEdition/page/n7
  • stackoverflow.com/a/430414/4693983
  • stackoverflow.com/a/1520342/4693983
  • blogs.msdn.microsoft.com/alfredth/2012/02/17/how-to-start-a-computer-science-flame-war/
  • merriam-webster.com/diccionario/descombobulado
  • medium.com/@haydnjmorris/page-2-dynamically-typed-vs-statically-typed-languages-e507ac463496
    Encuéntrame en Twitter, Facebook, Linkedin, Quora, Github, Medium, Gmail @jarpit96

Etiquetas

Lenguaje de programaciónLenguajes de programaciónPythonJavaDesarrollo de softwareHistorias técnicas recientesCodificaciónContinuar la discusión