stringtranslate.com

Programación extensible

Programación extensible es un término utilizado en informática para describir un estilo de programación informática que se centra en mecanismos para ampliar el lenguaje de programación , el compilador y el entorno de ejecución . Los lenguajes de programación extensibles, que apoyaban este estilo de programación, fueron un área de trabajo activa en la década de 1960, pero el movimiento quedó marginado en la década de 1970. [1] La programación extensible se ha convertido en un tema de renovado interés en el siglo XXI. [2]

Movimiento historico

El primer artículo generalmente [1] [3] asociado con el movimiento de lenguajes de programación extensibles es el artículo de 1960 de M. Douglas McIlroy sobre macros para lenguajes de programación de nivel superior. [4] Otra descripción temprana del principio de extensibilidad aparece en el artículo de Brooker y Morris de 1960 sobre el Compilador-Compilador . [5] El pico del movimiento estuvo marcado por dos simposios académicos, en 1969 y 1971. [6] [7] En 1975, un artículo de estudio sobre el movimiento escrito por Thomas A. Standish [1] era esencialmente una autopsia. El lenguaje de programación Forth fue una excepción, pero pasó prácticamente desapercibido.

Carácter del movimiento histórico.

Como se suele imaginar, un lenguaje de programación extensible constaba de un lenguaje base que proporcionaba funciones informáticas elementales y un metalenguaje capaz de modificar el lenguaje base. Luego, un programa consistía en modificaciones del metalenguaje y código en el lenguaje base modificado.

La técnica de extensión del lenguaje más destacada utilizada en el movimiento fue la macrodefinición. La modificación gramatical también estuvo estrechamente asociada con el movimiento, lo que resultó en el eventual desarrollo de formalismos gramaticales adaptativos . La comunidad lingüística Lisp permaneció separada de la comunidad lingüística extensible, aparentemente porque, como observó un investigador,

cualquier lenguaje de programación en el que los programas y los datos sean esencialmente intercambiables puede considerarse un lenguaje extensible [sic]. ... esto se puede ver muy fácilmente por el hecho de que Lisp se ha utilizado como lenguaje extensible durante años. [8]

En la conferencia de 1969, Simula se presentó como un lenguaje de programación extensible.

Standish describió tres clases de extensión del lenguaje, a las que llamó paráfrasis , ortofrase y metafrase (de lo contrario, paráfrasis y metafrase son términos de traducción ).

Muerte del movimiento histórico.

Standish atribuyó el fracaso del movimiento de extensibilidad a la dificultad de programar extensiones sucesivas. Un programador común podría construir un único shell de macros alrededor de un lenguaje base, pero si se fuera a construir un segundo shell de macros alrededor de ese, el programador tendría que estar íntimamente familiarizado tanto con el lenguaje base como con el primer shell; un tercer caparazón requeriría familiaridad con la base y tanto con el primer como con el segundo caparazón; etcétera. (Tenga en cuenta que proteger al programador de los detalles de nivel inferior es la intención del movimiento de abstracción que suplantó al movimiento de extensibilidad).

A pesar de la presentación anterior de Simula como extensible, en 1975, el estudio de Standish no parece haber incluido en la práctica las tecnologías más nuevas basadas en la abstracción (aunque utilizó una definición muy general de extensibilidad que técnicamente podría haberlas incluido). Una historia de 1978 sobre la abstracción de la programación desde la invención de la computadora hasta el (entonces) presente no hizo mención de las macros y no dio ningún indicio de que el movimiento de los lenguajes extensibles hubiera ocurrido alguna vez. [9] Las macros fueron admitidas tentativamente en el movimiento de abstracción a finales de la década de 1980 (quizás debido a la llegada de las macros higiénicas ), al concederles el seudónimo de abstracciones sintácticas . [10]

movimiento moderno

En el sentido moderno, un sistema que admita programación extensible proporcionará todas las características que se describen a continuación [ cita necesaria ] .

Sintaxis extensible

Esto simplemente significa que los idiomas fuente que se van a compilar no deben ser cerrados, fijos ni estáticos. Debe ser posible agregar nuevas palabras clave, conceptos y estructuras al idioma(s) de origen. Los lenguajes que permiten la adición de construcciones con sintaxis definida por el usuario incluyen Coq , [11] Racket , Camlp4 , OpenC++, Seed7 , [12] Red , Rebol y Felix. Si bien es aceptable que algunas características fundamentales e intrínsecas del lenguaje sean inmutables, el sistema no debe depender únicamente de esas características del lenguaje. Debe ser posible agregar otros nuevos.

Compilador extensible

En programación extensible, un compilador no es un programa monolítico que convierte la entrada del código fuente en una salida ejecutable binaria. El compilador en sí debe ser extensible hasta el punto de que sea en realidad una colección de complementos que ayudan con la traducción de la entrada del idioma fuente a cualquier cosa . Por ejemplo, un compilador extensible admitirá la generación de código objeto, documentación de código, código fuente reformateado o cualquier otro resultado deseado. La arquitectura del compilador debe permitir a sus usuarios "entrar" en el proceso de compilación y proporcionar tareas de procesamiento alternativas en cada paso razonable del proceso de compilación.

Sólo para la tarea de traducir el código fuente a algo que pueda ejecutarse en una computadora, un compilador extensible debería:

Tiempo de ejecución extensible

En tiempo de ejecución, los sistemas de programación extensibles deben permitir que los lenguajes extiendan el conjunto de operaciones que permiten. Por ejemplo, si el sistema utiliza un intérprete de código de bytes , debe permitir que se definan nuevos valores de código de bytes. Al igual que con la sintaxis extensible, es aceptable que haya algún conjunto (pequeño) de operaciones fundamentales o intrínsecas que sean inmutables. Sin embargo, debe ser posible sobrecargar o aumentar esas operaciones intrínsecas para que se pueda soportar un comportamiento nuevo o adicional.

Contenido separado del formulario

Los sistemas de programación extensibles deberían considerar los programas como datos a procesar. Esos programas deberían estar completamente desprovistos de cualquier tipo de información de formato. La visualización y edición de programas para los usuarios debe ser una función de traducción, respaldada por el compilador extensible, que traduce los datos del programa a formas más adecuadas para su visualización o edición. Naturalmente, esta debería ser una traducción bidireccional. Esto es importante porque debe ser posible procesar fácilmente programas extensibles de diversas formas. Es inaceptable que los únicos usos de la entrada del idioma fuente sean la edición, visualización y traducción a código de máquina. El procesamiento arbitrario de programas se facilita al desacoplar la entrada fuente de las especificaciones de cómo debe procesarse (formateado, almacenado, mostrado, editado, etc.).

Soporte de depuración del idioma fuente

Los sistemas de programación extensibles deben soportar la depuración de programas utilizando las construcciones del lenguaje fuente original, independientemente de las extensiones o transformaciones que haya experimentado el programa para hacerlo ejecutable. En particular, no se puede asumir que la única forma de mostrar datos en tiempo de ejecución sea en estructuras o matrices . El depurador, o más correctamente el 'inspector de programas', debe permitir la visualización de datos en tiempo de ejecución en formatos adecuados al idioma fuente. Por ejemplo, si el lenguaje admite una estructura de datos para un proceso de negocio o flujo de trabajo , el depurador debe poder mostrar esa estructura de datos como un gráfico de espina de pescado u otra forma proporcionada por un complemento.


Ejemplos

Ver también

Referencias

  1. ^ abc Standish, Thomas A., "Extensibilidad en el diseño de lenguajes de programación", Avisos SIGPLAN 10 no. 7 (julio de 1975), págs. 18-21.
  2. ^ Gregory V. Wilson, "Programación extensible para el siglo XXI", ACM Queue 2 no. 9 (diciembre/enero de 2004-2005).
  3. ^ Sammet, Jean E., Lenguajes de programación: historia y fundamentos , Prentice-Hall, 1969, sección III.7.2
  4. ^ McIlroy, MD, "Extensiones de instrucciones macro de lenguajes compiladores", Comunicaciones del ACM 3 no. 4 (abril de 1960), págs. 214-220.
  5. ^ Brooker, RA y Morris, D., "Un programa de traducción general para lenguajes de estructura de frases", Journal of the ACM 9 no. 1 (enero de 1962), págs. 1-10. El documento se recibió en 1960.
  6. ^ Christensen, C. y Shaw, CJ, eds., Actas del Simposio de Lenguas Extensible, Avisos SIGPLAN 4 no. 8 (agosto de 1969).
  7. ^ Schuman, SA, ed., Actas del Simposio internacional sobre lenguajes extensibles, Avisos SIGPLAN 6 no. 12 (diciembre de 1971).
  8. ^ Harrison, MC, en "Panel sobre el concepto de extensibilidad", págs. 53-54 del simposio de 1969.
  9. ^ Guarino, LR, "La evolución de la abstracción en los lenguajes de programación [ enlace muerto ] ", CMU-CS-78-120 , Departamento de Ciencias de la Computación, Universidad Carnegie-Mellon, Pensilvania, 22 de mayo de 1978.
  10. ^ Gabriel, Richard P., ed., "Proyecto de informe sobre los requisitos para un sistema común de creación de prototipos", Avisos SIGPLAN 24 no. 3 (marzo de 1989), págs. 93 y siguientes.
  11. ^ "Extensiones de sintaxis y alcances de notación: documentación de Coq 8.17.0". coq.inria.fr . Consultado el 25 de mayo de 2023 .
  12. ^ Zingaro, Daniel, "Lenguajes extensibles modernos", Informe SQRL 47 Universidad McMaster (octubre de 2007), página 16.

enlaces externos

General

  1. Artículo de Greg Wilson en ACM Queue
  2. Discusión sobre barra diagonal
  3. Lenguajes extensibles modernos: un artículo de Daniel Zingaro

Herramientas

  1. MetaL: implementación de un motor compilador de programación extensible
  2. XPS: sistema de programación extensible (en desarrollo)
  3. MPS: sistema de metaprogramación JetBrains

Lenguajes de programación con sintaxis extensible.

  1. AbrirZz
  2. xtc — extensible C
  3. guión en inglés
  4. Macros de Nemerle
  5. Macros sintácticas Boo
  6. Compilador de formato intermedio de la Universidad de Stanford
  7. Seed7: el lenguaje de programación extensible
  8. Katahdin: un lenguaje de programación con sintaxis y semántica mutables en tiempo de ejecución
  9. π: otro lenguaje de programación con sintaxis extensible, implementado mediante un analizador Earley