ISWIM ( If You See What I Mean ) es un lenguaje de programación informática 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]
Aunque no se ha implementado, 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 .
ISWIM es un lenguaje de programación imperativo con un núcleo funcional, formado por una sintaxis de cálculo lambda a la que se añaden variables mutables y de asignación y un potente mecanismo de control: el operador de punto de programa . Al estar basado en el cálculo lambda, ISWIM tiene funciones de orden superior y variables de alcance léxico .
La semántica operacional de ISWIM se define utilizando la máquina SECD de Landin y utiliza llamada por valor, es decir, 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 coma de ALGOLbegin
entre declaraciones y ... end
bloques y los reemplazó con la regla del fuera de juego y el alcance basado en la sangría .
Una característica distintiva de ISWIM en términos de notación 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 . [3]
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 utilizando una descripción de estilo de lenguaje natural algo verbosa, pero aparte de la notación equivale exactamente a los tipos de datos algebraicos que se encuentran en los lenguajes funcionales modernos. [4] Las variables ISWIM no tenían declaraciones de tipo explícitas y parece probable (aunque no se afirma explícitamente en el artículo de 1966) que Landin pretendiera que el lenguaje fuera tipificado dinámicamente, como LISP y a diferencia de ALGOL ; pero también es posible que pretendiera desarrollar alguna forma de inferencia de tipos .
No se completó ninguna implementación directa de ISWIM , pero el lenguaje PAL de Art Evan [5] y el lenguaje Gedanken de John C. Reynolds [6] capturaron la mayoría de los conceptos de Landin , incluidas las poderosas operaciones de transferencia de control. Ambos se tipificaron dinámicamente . El ML de Robin Milner puede considerarse equivalente a I SWIM sin el operador J y con inferencia de tipos .
Otra línea de descendencia de ISWIM es eliminar las características imperativas (asignación y el operador J) dejando un lenguaje puramente funcional. [7] Luego se hace posible cambiar a la evaluación perezosa . Este camino condujo a los lenguajes de programación SASL , Kent Recursive Calculator (KRC), Hope , Miranda , Haskell y Clean .
El artículo de ISWIM también tiene la primera aparición de definiciones de tipo algebraico utilizadas para definir estructuras. Esto se hace en palabras, pero la idea de suma de productos está claramente presente