¿Por qué los lenguajes de tipo débil todavía se están desarrollando activamente?

17

Me pregunto por qué los lenguajes de tipo débil todavía se están desarrollando activamente. Por ejemplo, ¿qué beneficio se puede sacar de poder escribir?

$someVar = 1;
(...)  // Some piece of code
$someVar = 'SomeText';

en lugar de usar la versión muy diferente, de tipo fuerte

int someInt = 1;
(...)
string SomeString = 'SomeText';

Es cierto que necesita declarar una variable adicional en el segundo ejemplo, pero ¿eso realmente duele? ¿No deberían todos los idiomas esforzarse por ser fuertemente tipados, ya que impone la seguridad de escritura en tiempo de compilación, evitando así algunas dificultades en la conversión de tipos?

DotNetStudent
fuente
9
"Fuertemente escrito" no es un término bien definido. Principalmente significa "no puede subvertir el sistema de tipos". Es ortogonal a lo que describió anteriormente, que podría ser latente frente a tipado manifiesto o estático frente a tipeo dinámico.
Frank Shearar
10
¿Qué me estoy perdiendo que mueve esto del cebo de llamas con varias preguntas estrechamente relacionadas, posiblemente incluso duplicadas (solo busque en SackOverflow las preguntas que mencionan la escritura estática y dinámica en sus etiquetas) a preguntas legítimas?
1
Hay ventajas y desventajas tanto para los lenguajes tipados estáticamente como tipados dinámicamente. Los lenguajes tipados dinámicamente se prestan muy bien para un rápido desarrollo o creación de prototipos (de ahí que la razón por la que los "lenguajes de scripting" sean tipados dinámicamente), mientras que los lenguajes tipados estáticamente (posiblemente) son más fáciles de mantener y extender a medida que crecen en proyectos grandes y complicados.
Charles Salvia
66
El primer ejemplo es un poco como Python donde las variables no tienen tipo declarado. Sin embargo, Python es un lenguaje muy fuertemente tipado porque los objetos, ellos mismos, tienen un tipo que es casi imposible de cambiar o coaccionar. Creo que el mal uso de la terminología hace que esta pregunta sea muy difícil de responder.
S.Lott
1
@delnan El hecho de que esta pregunta tenga dos respuestas razonables y no se haya convertido en una guerra de llamas ayuda.
Adam Lear

Respuestas:

25

La escritura fuerte / débil y la escritura estática / dinámica son ortogonales.

Fuerte / débil se trata de si el tipo de valor importa, funcionalmente hablando. En un lenguaje de tipo débil, puede tomar dos cadenas que están llenas de dígitos y realizar la suma de enteros; en un lenguaje fuertemente tipado, esto es un error (a menos que primero convierta o convierta los valores a los tipos correctos). La escritura fuerte / débil no es una cosa en blanco y negro; la mayoría de los idiomas no son 100% estrictos ni 100% débiles.

La tipificación estática / dinámica se trata de si los tipos se unen a valores o identificadores. En un lenguaje de tipo dinámico, puede asignar cualquier valor a cualquier variable, independientemente del tipo; la escritura estática define un tipo para cada identificador, y la asignación de un tipo diferente es un error o da como resultado una conversión implícita. Algunos idiomas adoptan un enfoque híbrido, lo que permite tipos declarados estáticamente, así como identificadores sin tipo ('variante'). También hay inferencia de tipos, un mecanismo en el que es posible escribir de forma estática sin declarar explícitamente el tipo de todo, al hacer que el compilador descubra los tipos (Haskell lo usa ampliamente, C # lo expone a través de la varpalabra clave).

La programación dinámica débil permite un enfoque pragmático; el idioma no se interpone en tu camino la mayor parte del tiempo, pero tampoco intervendrá cuando te disparas en el pie. Por el contrario, la escritura estática fuerte empuja al programador a expresar ciertas expectativas acerca de los valores explícitamente en el código, de manera que permita al compilador o al intérprete detectar una clase de errores. Con un buen sistema de tipos, un programador puede definir exactamente qué se puede y qué no se puede hacer con un valor, y si, por accidente, alguien intenta algo indeseable, el sistema de tipos a menudo puede evitarlo y mostrar exactamente dónde y por qué las cosas salen mal.

tdammers
fuente
En un lenguaje apropiado de tipo débil como HyperTalk con operadores separados para la concatenación y adición de cadenas (por ejemplo, asumir &para la concatenación), las operaciones tienen "12"+3o 45 & "6"no presentan ambigüedad (calculan 15 y "456", respectivamente). En un lenguaje más fuertemente tipado, el operador "+" podría sobrecargarse de manera segura tanto para la concatenación de cadenas como para la suma numérica sin causar ambigüedad porque las operaciones en cadenas y números estarían prohibidas. Los problemas surgen cuando el lenguaje especifica los clavos, ni los tipos ni las operaciones a realizar.
supercat
4

La escritura débil es más parecida a 1 == "TRUE". Esta sección en la wikipedia ilustra muy bien la diferencia.

Tenga en cuenta que ninguno de los ejemplos de la wikipedia está estáticamente escrito, que es a lo que se refiere en su segundo ejemplo.

Entonces, si la pregunta es por qué las personas usan lenguajes de tipo dinámico, la respuesta es: los sistemas de tipo estático le imponen limitaciones. Muchas personas simplemente nunca han trabajado con un sistema de tipo estático expresivo, lo que les lleva a la conclusión de que las desventajas del tipeo estático son mayores que los beneficios.

back2dos
fuente
0

Los lenguajes de tipo débil todavía se están desarrollando porque las personas los usan y les gustan. Si no le gusta escribir débilmente, no use idiomas débilmente escritos. Declarar que algo es La única forma verdadera y que todos deberían hacerlo La única forma verdadera ignora la complicación del mundo.

mjfgates
fuente
0

¿No deberían todos los idiomas esforzarse por ser fuertemente tipados, ya que impone la seguridad de escritura en tiempo de compilación, evitando así algunas dificultades en la conversión de tipos?

No necesariamente. Objetivo de aprendizaje-C: un manual aborda esa pregunta directamente en el contexto del objetivo-C:

Las variables de tipo débil se usan con frecuencia para cosas como las clases de colección, donde el tipo exacto de los objetos en una colección puede ser desconocido. Si está acostumbrado a usar lenguajes fuertemente tipados, podría pensar que el uso de variables débilmente tipadas causaría problemas, pero en realidad proporcionan una gran flexibilidad y permiten un dinamismo mucho mayor en los programas Objective-C.

Caleb
fuente