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?
C # 4.0 tiene muchas, si no todas estas características. Si realmente desea un código de máquina nativo, puede compilar el código de bytes en el código de máquina con una utilidad.
En particular, el uso de la palabra clave dynamic
permite que los objetos y sus miembros se vinculen dinámicamente en el tiempo de ejecución.
Vea el video de Anders Hejlsberg, The Future of C #, para una introducción:
Creo que Lisp se ajusta a esa descripción.
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.
Python to C probablemente necesite estos criterios.
Escribir en Python.
Compila Python a ejecutable. Consulte Proceso para convertir secuencias de comandos de Python simples en ejecutables de Windows . También vea Escribir un traductor de código de Python a C?
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á.