¿Hay un lenguaje de programación * compilado con dinámica, tal vez incluso la tipificación débil?
-
23-09-2019 - |
Pregunta
Me preguntaba si hay un lenguaje de programación que compila a código de máquina / binaria (no código de bytes y luego ejecutado por una máquina virtual, que es algo completamente diferente al considerar la tipificación) que cuenta con dinámica y / escribir o débil, por ejemplo:
Piense en un lenguaje compilado donde:
- Las variables no necesitan ser declarados
- Las variables se pueden crear en tiempo de ejecución
- funciones pueden devolver valores de diferentes tipos
Preguntas:
- ¿Hay un lenguaje de programación tal?
- (Por qué) no?
Creo que un tipo dinámico, pero fuerte, lenguaje compilado haría muy sentido, pero ¿es posible?
Solución
Creo que encaja en esa descripción Lisp.
Otros consejos
Objetivo-C podría tener algunas de las propiedades que usted busca. Las clases pueden ser abiertos y alteradas en tiempo de ejecución, y se puede enviar cualquier tipo de mensaje a un objeto, ya sea por lo general responde a él o no. De esta manera, se puede implementar la tipificación de pato, al igual que en Ruby. El id
tipo, más o menos equivalente a una void*
, puede estar dotado de interfaces que especifica un contrato que el tipo (por lo demás desconocido) se adhiere a.
C # 4.0 tiene muchas, si no todas estas características. Si realmente quiere código máquina nativo, puede compilar el código de bytes hacia abajo a código de máquina mediante una utilidad.
En particular, el uso de la palabra clave dynamic
permite que los objetos y sus miembros para estar unidos dinámicamente en tiempo de ejecución.
Salida de vídeo de Anders Hejlsberg, El futuro de C #, para una imprimación:
Objetivo-C tiene muchas de las características que mencionas: se compila a código máquina y está efectivamente tipos dinámicos con respecto a las instancias de objeto. El tipo id
puede almacenar cualquier mensaje de instancia de clase y los usos de Objective-C en lugar de pasar las llamadas a funciones miembro. Los métodos pueden ser creados / añadido en tiempo de ejecución. El tiempo de ejecución de Objective-C puede también variables de instancia de clase sintetizan al tiempo de ejecución, pero las variables locales todavía tienen que ser declaradas (al igual que en C).
C # 4.0 tiene muchas de estas características, excepto que se compila a IL (bytecode) y se interpreta usando una máquina virtual (CLR). Esto nos lleva a un punto interesante, sin embargo: si el código de bytes es justo-a-tiempo compilado a código máquina, hace que el recuento? Si es así, se abre la puerta, no sólo para cualquiera de los lenguajes .NET, pero Python (ver PyPy o Unladed Swallow o IronPython ) y Ruby (ver MacRuby o IronRuby ) y muchos otros lenguajes de tipado dinámico, no menciona las variantes de muchos LISP.
Sí, es posible. Ver Julia . Es un lenguaje dinámico (se puede escribir programas sin tipos), pero nunca se ejecuta en una máquina virtual. Se compila el programa a código nativo en tiempo de ejecución (compilación JIT).
En una vena similar a Lisp, hay Factor , una lengua por concatenación con * ninguna variable por defecto, tipado dinámico, y un sistema de objetos flexibles. Factor código se puede ejecutar en el intérprete interactivo, o compilado a un ejecutable nativo usando su función deploy
.
*-punto libre basado en pila funcional
VB 6 tiene la mayoría de que
No sé de cualquier lenguaje que tiene exactamente esas capacidades. Se me ocurren dos que tiene un subconjunto significativo, sin embargo:
- D tiene la inferencia de tipos, la recolección de basura, y poderosas instalaciones de metaprogramación, sin embargo, se compila a código de máquina eficiente. No tiene tipado dinámico, sin embargo.
- C # puede ser compilado directamente a código de máquina a través del proyecto mono. C # tiene un conjunto de características similares a D, pero de nuevo sin necesidad de escribir dinámico.
Python a C probablemente necesita estos criterios.
-
Escribir en Python.
-
Compilar Python para ejecutable. Ver para convertir simple script en Python a Windows ejecutable . También vea de Python a C?