programacion lenguaje informacion hack descripcion concepto caracteristicas programming-languages typing static-typing dynamic-typing

programming languages - informacion - ¿Hay un lenguaje de programación compilado*con tipeo dinámico, incluso débil?



php lenguaje de programacion (9)

Me preguntaba si existe un lenguaje de programación que compila código máquina / binario (no bytecode luego ejecutado por una máquina virtual, eso es algo completamente diferente cuando se considera tipear) que presenta tipeo dinámico y / o débil, por ejemplo:

Piensa en un lenguaje compilado donde:

  • Las variables no necesitan ser declaradas
  • Las variables se pueden crear durante el tiempo de ejecución
  • Las funciones pueden devolver valores de diferentes tipos

Preguntas:

  • ¿Hay tal lenguaje de programación?
  • (¿Por qué no?

Creo que un lenguaje compilado, tipeado dinámicamente pero fuerte realmente sentiría, ¿pero es posible?




De forma similar a Lisp, existe Factor , un lenguaje concatenativo * sin variables por defecto, tipado dinámico y un sistema de objetos flexible. El código de factor se puede ejecutar en el intérprete interactivo o compilarse en un ejecutable nativo utilizando su función de deploy .

* basado en pila funcional sin puntos


No conozco ningún lenguaje que tenga exactamente esas capacidades. Sin embargo, puedo pensar en dos que tienen un subconjunto significativo:

  • D tiene inferencia de tipo, recolección de basura y poderosas instalaciones de metaprogramación, pero se compila para un código de máquina eficiente. Sin embargo, no tiene tipeo dinámico.
  • C # se puede compilar directamente en el código de máquina a través del proyecto mono. C # tiene una característica similar configurada a D, pero nuevamente sin tipado dinámico.

Objective-C tiene muchas de las funciones que mencionas: se compila en código máquina y se tipea de manera efectiva de forma dinámica con respecto a las instancias de objetos. El tipo de id Puede almacenar cualquier instancia de clase y Objective-C usa el paso de mensajes en lugar de llamadas a funciones de miembros. Los métodos se pueden crear / agregar en tiempo de ejecución. El tiempo de ejecución de Objective-C también puede sintetizar variables de instancia de clase en tiempo de ejecución, pero las variables locales aún deben declararse (como en C).

C # 4.0 tiene muchas de estas características, excepto que está compilada en IL (bytecode) e interpretada mediante una máquina virtual (el CLR). Sin embargo, esto trae a colación un punto interesante: si bytecode se compila justo a tiempo con código de máquina, ¿eso cuenta? Si es así, abre la puerta no solo a cualquiera de los lenguajes .Net, sino a Python (vea PyPy o Unladed Swallow o IronPython ) y Ruby (vea MacRuby o IronRuby ) y muchos otros lenguajes de tipado dinámico, sin mencionar muchas variantes de LISP.



Sí, es posible. Ver Julia . Es un lenguaje dinámico (puede escribir programas sin tipos) pero nunca se ejecuta en una máquina virtual. Compila el programa con código nativo en tiempo de ejecución (compilación JIT).


VB 6 tiene la mayor parte de eso


Objective-C podría tener algunas de las propiedades que busca. Las clases se pueden abrir y modificar en tiempo de ejecución, y puede enviar cualquier tipo de mensaje a un objeto, ya sea que generalmente responda o no. De esa forma, puedes implementar el tipado de pato, al igual que en Ruby. El id tipo, más o menos equivalente a un void* , puede estar dotado de interfaces que especifican un contrato que el tipo (de lo contrario desconocido) se adherirá.