ISWIM ( acrónimo de If you See What I Mean ) es un lenguaje de programación informático abstracto (o una familia de lenguajes) ideado por Peter Landin y descrito por primera vez en su artículo "Los próximos 700 lenguajes de programación", publicado en las Comunicaciones de la ACM en 1966. [1]
Paradigma | Imperativo , funcional |
---|---|
Diseñada por | Peter Landin |
Apareció por primera vez | 1966 |
Influenciado por | |
ALGOL 60 , Lisp | |
Influenciado | |
SASL , Miranda , ML , Haskell , limpio , lúcido |
Aunque no se implementó, ha demostrado ser muy influyente en el desarrollo de lenguajes de programación, especialmente lenguajes de programación funcional como SASL , Miranda , ML , Haskell y sus sucesores, y lenguajes de programación de flujo de datos como Lucid .
Diseño
ISWIM es un lenguaje de programación imperativo con un núcleo funcional, que consiste en un enriquecimiento sintáctico del cálculo lambda al que se agregan variables mutables y asignación y un poderoso mecanismo de control: el operador de puntos de programa . Al estar basado en el cálculo lambda, ISWIM tiene funciones de orden superior y variables de ámbito léxico .
La semántica operativa de ISWIM se define usando la máquina SECD de Landin y usa llamada por valor, que es una evaluación entusiasta . [2] Un objetivo de ISWIM era parecerse más a la notación matemática, por lo que Landin abandonó los puntos y comas de ALGOL entre declaraciones y begin
... end
bloques y los reemplazó con la regla de fuera de juego y el alcance basado en sangría .
Una característica notablemente distintiva de ISWIM es el uso de where
cláusulas. Un programa ISWIM es una expresión única calificada por cláusulas where (definiciones auxiliares que incluyen ecuaciones entre variables), expresiones condicionales y definiciones de funciones. Junto con CPL , ISWIM fue uno de los primeros lenguajes de programación en utilizar cláusulas where .
Una característica semántica notable fue la capacidad de definir nuevos tipos de datos, como una suma (posiblemente recursiva) de productos. Esto se hizo usando una descripción de estilo de lenguaje natural algo prolijo, pero aparte de la notación equivale exactamente a los tipos de datos algebraicos que se encuentran en los lenguajes funcionales modernos. [ cita requerida ] Las variables ISWIM no tenían declaraciones de tipo explícitas y parece probable (aunque no se indica explícitamente en el artículo de 1966) que Landin pretendía que el lenguaje se escribiera dinámicamente, como LISP ya diferencia de ALGOL ; pero también es posible que tuviera la intención de desarrollar alguna forma de inferencia de tipos .
Implementaciones y derivados
No se intentó una implementación directa de ISWIM, pero el lenguaje PAL de Art Evan , [3] y el lenguaje de John C. Reynolds , Gedanken , [4] capturaron la mayoría de los conceptos de Landin, incluyendo poderosas operaciones de transferencia de control. Ambos se escribieron dinámicamente . El ML de Milner puede considerarse equivalente a I SWIM sin el operador J y con inferencia de tipo .
Otra línea de descendencia de ISWIM es eliminar las características imperativas (asignación y el operador J) dejando un lenguaje puramente funcional. [5] Entonces es posible cambiar a la evaluación perezosa . Este camino llevó a los lenguajes de programación SASL , Kent Recursive Calculator (KRC), Hope , Miranda , Haskell y Clean .
Referencias
- ^ Landin, PJ (marzo de 1966). "Los próximos 700 lenguajes de programación" (PDF) . Comunicaciones de la ACM . Asociación de Maquinaria Informática . 9 (3): 157-165. doi : 10.1145 / 365230.365257 . S2CID 13409665 .
- ^ Plotkin, Gordon (1975). Call-by-Name, Call-by Value y el cálculo Lambda (PDF) (Informe).
- ^ Evans, Arte (1968). "PAL: un lenguaje diseñado para la enseñanza de la lingüística de programación". Actas de la Conferencia Nacional ACM . Conferencia Nacional ACM. Asociación de Maquinaria Informática .
- ^ Reynolds, John C. (septiembre de 1969). GEDANKEN: un lenguaje simple sin tipos que permite estructuras de datos funcionales y co-rutinas (Informe). Laboratorio Nacional Argonne.
- ^ Ivanović, Mirjana; Budimac, Zoran (abril de 1993). "Una definición de un lenguaje similar a ISWIM a través de Scheme". Avisos ACM SIGPLAN . 28 (4): 29–38. doi : 10.1145 / 152739.152743 . S2CID 14379260 .
Este artículo se basa en material extraído del Diccionario gratuito de informática en línea antes del 1 de noviembre de 2008 e incorporado bajo los términos de "renovación de licencias" de la GFDL , versión 1.3 o posterior.