programing programacion lenguaje languages programming-languages lisp scheme s-expression

programming languages - programacion - ¿Por qué la mayoría de los lenguajes S-Expression son tipificados dinámicamente?



lenguaje de programacion s (3)

¿Cómo es que la mayoría de los Lisps y los Esquemas se escriben dinámicamente? ¿La escritura estática no se mezcla con algunas de sus características comunes?


Cuando Lisp se inventó en los años 1958 a 1960, introdujo muchas características tanto como lenguaje como implementación (recolección de basura, compilador de hosting propio, ...). Algunas características se heredaron (con algunas mejoras) de otros idiomas (procesamiento de listas, ...). El lenguaje implementado computación con funciones. Las expresiones s eran más un detalle de implementación (en ese momento), que una característica de lenguaje. Un sistema de tipos no era parte del lenguaje. Usar el lenguaje de una manera interactiva también fue una característica de implementación temprana.

Los sistemas de tipos útiles para lenguajes funcionales aún no se habían inventado en ese momento. Aún hasta hoy, también es relativamente difícil utilizar lenguajes de escritura estática de forma interactiva. Existen muchas implementaciones de lenguajes de tipo estático que también proporcionan alguna interfaz interactiva, pero en su mayoría no ofrecen el mismo nivel de soporte de uso interactivo que un sistema Lisp típico. Programar en un sistema Lisp interactivo significa que muchas cosas pueden cambiarse sobre la marcha y podría ser problemático si los cambios de tipo tuvieran que propagarse a través de programas y datos completos en un sistema Lisp tan interactivo. tenga en cuenta que algunos Schemers tienen una opinión diferente sobre estas cosas. R6RS es en su mayoría un lenguaje por lotes en general, no tanto en el espíritu de Lisp ...

Los lenguajes funcionales que se inventaron más tarde con sistemas de tipo estático también obtuvieron una sintaxis sin expresión-s: no ofrecían soporte para macros o funciones relacionadas. más tarde, algunos de estos lenguajes / implementaciones usaron un preprocesador para extensiones sintácticas.


La escritura estática es léxica, lo que significa que toda la información sobre los tipos se puede inferir de la lectura del código fuente sin evaluar ninguna expresión o calcular cualquier cosa, siendo condicionales lo más importante aquí. Un lenguaje tipado estáticamente está diseñado para que esto pueda suceder, un término mejor sería ''tipificado léxicamente'', como en, un compilador puede probar, leyendo solo la fuente, que no se producirán errores de tipo.

En el caso de lisp, esto es muy diferente porque el código fuente de lisp en sí no es estático, lisp es homo-icónico, utiliza los datos como código y puede, hasta cierto punto, editar dinámicamente su propia fuente en ejecución.

Lisp fue el primer lenguaje tipificado dinámicamente, y probablemente por esta razón, el código del programa en sí ya no es léxico en Lisp.

Edición: una razón mucho más poderosa, en el caso de la escritura estática, tendrías que escribir listas. Puede tener tipos extremadamente complejos para cada lista que tengan en cuenta todos los elementos, o exigir que cada elemento tenga el mismo tipo y escribirlo como una lista de eso. La primera opción producirá el infierno con listas de listas. La última opción exige que el código fuente solo contenga el mismo tipo para cada dato, esto significa que ni siquiera se pueden construir expresiones como una lista, de cualquier manera es un tipo diferente a un entero.

Así que me atrevo a decir que es total y absolutamente imposible de realizar.


Se puede hacer que la escritura y las expresiones-s trabajen juntas, vea el esquema escrito .

En parte, es una coincidencia histórica que los lenguajes de expresión s sean tipificados dinámicamente. Estos lenguajes tienden a depender más de las macros , y la facilidad de análisis y coincidencia de patrones en las expresiones s hace que el procesamiento de macros sea mucho más fácil. La mayoría de las investigaciones sobre macros sofisticadas ocurren en lenguajes de expresión-s.

Las macros higiénicas mecanografiadas son difíciles.