programming languages programming-languages type-systems dynamic-typing static-typing

programming-languages - programming languages history



¿Qué idiomas se tipean y compilan dinámicamente(y cuáles están tipados e interpretados estáticamente)? (5)

En mis lecturas sobre tipeo dinámico y estático, sigo creyendo que se compilan los lenguajes tipados estáticamente, mientras que los idiomas tipados dinámicamente se interpretan. Sé que, en general, esto es cierto, pero estoy interesado en las excepciones.

Realmente me gustaría que alguien no solo brinde algunos ejemplos de estas excepciones, sino que trate de explicar por qué se decidió que estos idiomas deberían funcionar de esta manera.


Actionscript tiene tipado dinámico y compila a bytecode.

E incluso se compila hasta código de máquina nativo si desea lanzar una aplicación Flash en el iPhone.


Aquí hay una lista de algunos sistemas interesantes. ¡No es exhaustivo!

Tipeado dinámicamente y compilado

  1. El compilador Gambit Scheme, Chez Scheme , el compilador del Esquema de Larceny de Will Clinger, el compilador de Bigloo Scheme, y probablemente muchos otros.

    ¿Por qué?

    Mucha gente realmente me gusta Scheme. Programas como datos, buen sistema macro, 35 años de desarrollo, gran comunidad. Pero ellos quieren rendimiento. Por lo tanto, una serie de buenos compiladores de código nativo: Chez Scheme es incluso un producto comercial exitoso (los códigos interpretados por byte son gratuitos, los códigos nativos pagas).

  2. El compilador de LuaJIT justo a tiempo para Lua .

    ¿Por qué?

    Para mostrar que podría hacerse. Y luego, la gente comenzó a gustar obtener una aceleración de 3x en sus programas de Lua. Lua está en una gran cantidad de juegos, donde el rendimiento importa, además también se está infiltrando en otros productos. El 70% del código en Adobe Lightroom es Lua.

  3. El iconc Icon - iconc -C compiler.

    ¿Por qué?

    Las cincuenta personas que lo usaron amaron a Icon. Modelo de evaluación totalmente inusual, el más innovador (y en mi opinión, el mejor) sistema de procesamiento de cadenas jamás diseñado. Pero ese modelo de evaluación era realmente costoso, especialmente en las computadoras de finales de los ochenta. Al compilar Icon to C, Icon Project hizo posible que los grandes programas Icon se ejecutaran en menos horas.

Conclusión : las personas primero desarrollan un archivo adjunto a un lenguaje de tipado dinámico, y probablemente una base de código significativa. Finalmente, la comunidad escupe un compilador de código nativo para que pueda obtener un mejor rendimiento y resolver problemas más grandes.

Estáticamente tipado e interpretado

Esta categoría es menos común, pero ...

  1. Objetivo Caml . Dialecto de ML, vehículo para muchos experimentos innovadores en el diseño del lenguaje.

    ¿Por qué?

    Sistema muy portátil y tiempos de compilación muy rápidos. A la gente le gustan ambas propiedades, por lo que las nuevas ideas de diseño de idiomas se eliminan ampliamente.

  2. Moscú ML. ML estándar con algunas características adicionales del sistema de módulos.

    ¿Por qué?

    Tiempos de compilación portátiles y rápidos, fáciles de hacer un ciclo interactivo de lectura / evaluación / impresión. Se convirtió en un popular compilador de enseñanza.

  3. C-Terp. Un viejo producto, creo que tal vez de Gimpel Software. Sabre C-un producto. No creo que pueda comprar más.

    ¿Por qué?

    Depuración. Especialmente, la depuración en el hardware de 1980 en MS-DOS. Por muy pocos recursos, podría obtener una ayuda realmente buena para depurar el código C en hardware muy limitado (piense: procesador de 4.77MHz con un bus de 8 bits, 640K de RAM completamente cargados). Casi imposible obtener un buen depurador visual para el código nativo compilado, pero con el intérprete, bastante fácil.

  4. UCSD Pascal: el sistema que convirtió el "código P" en una palabra familiar.

    ¿Por qué?

    A los profesores les gustaba el diseño del lenguaje de Niklaus Wirth, y el compilador podía funcionar en máquinas muy pequeñas. El diseño limpio de Wirth y el sistema P de UCSD lograron una combinación insuperable, y Pascal fue el lenguaje de enseñanza estándar de los años setenta. A las personas más jóvenes les puede resultar difícil apreciar que en la década de 1970 no hubo debate sobre qué idioma enseñar en el primer curso. Hoy conozco programas que usan C, C ++, Haskell, Java, ML y Scheme. En la década de 1970 siempre fue Pascal, y el sistema P de UCSD fue una gran razón.

    En caso de que te lo estés preguntando, P significa portátil .

Resumen : Interpretar un lenguaje estáticamente tipado es una excelente manera de poner una implementación en manos de todos rápidamente. (También tenía ventajas para la depuración en hardware de la Edad de Bronce).


Java (un lenguaje estáticamente tipado) se compila en el bytecode de JVM, que se interpretó en versiones anteriores de la JVM, mientras que ahora usa la compilación Just In Time (JIT), lo que significa que el código de la máquina se genera en tiempo de ejecución. También creo que ML y sus dialectos pueden ser interpretados, y ML definitivamente está tipificado estáticamente.


Objective-C está compilado y es compatible con el tipado dinámico (sin duda, cuando se invocan métodos a través de la sintaxis [target doSomething] ). Es decir, puede enviar cualquier mensaje a un destino (usando la sintaxis de lenguaje ordinario, sin programar contra una API de reflexión), recibir solo una advertencia en tiempo de compilación que podría no ser manejada, y recibir una excepción solo en tiempo de ejecución si el objetivo no lo hace responda a ese selector (que es como una firma de método); y puede preguntar a cualquier objeto (que puede ser de tipo estático si su código no lo conoce mejor o no le importa) si respondsToSelector: a respondsToSelector: probar sus capacidades.


Python es un lenguaje dinámico que tiene compiladores.

Vea esta pregunta SO - Python - why compile? , por ejemplo.

En general, la compilación hace que el programa se ejecute mucho más rápido.