ISWIM ( If You See What I Mean ) es un lenguaje de programación de computadoras 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 Communications of the ACM en 1966. [1]
Aunque no se implementó, ha demostrado ser muy influyente en el desarrollo de lenguajes de programación, especialmente lenguajes de programación funcionales 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, que consiste en un azúcar sintáctico de cálculo lambda al que se agregan variables mutables y asignación y un poderoso mecanismo de control: el operador de punto de programa . Al estar basado en cálculo lambda, ISWIM tiene funciones de orden superior y variables de alcance léxico .
La semántica operativa 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 una notación matemática, por lo que Landin abandonó los puntos y comas de ALGOLbegin
entre declaraciones y ... end
bloques y los reemplazó con la regla de fuera de juego y el alcance basado en sangría .
Una característica notable distintiva de ISWIM es el uso de where
cláusulas. Un programa ISWIM es una expresión única calificada por cláusulas donde (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 utilizando una descripción de estilo de lenguaje natural algo detallada, pero aparte de la notación equivale exactamente a los tipos de datos algebraicos que se encuentran en los lenguajes funcionales modernos. [3] 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 tipificara 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 intentó una implementación directa de ISWIM, pero el lenguaje PAL de Art Evan , [4] y el lenguaje Gedanken de John C. Reynolds , [5] capturaron la mayoría de los conceptos de Landin, incluidas poderosas operaciones de transferencia de control. Ambos fueron escritos 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 descenso de ISWIM es eliminar las características imperativas (la tarea y el operador J) dejando un lenguaje puramente funcional. [6] Entonces es posible cambiar a una evaluación diferida . Este camino llevó a los lenguajes de programación SASL , Kent Recursive Calculator (KRC), Hope , Miranda , Haskell y Clean .
el artículo ISWIM también tiene la primera aparición de definiciones de tipos algebraicos utilizadas para definir estructuras. Esto se hace con palabras, pero la idea de la suma de productos está claramente ahí.