ISWIM ( If you See What I Mean ) es un lenguaje de programación abstracto (o una familia de lenguajes) ideado por Peter Landin y descrito por primera vez en su artículo "The Next 700 Programming Languages", publicado en Communications of the 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 .
Diseño
ISWIM es un lenguaje de programación imperativo con un núcleo funcional, que consiste en una simplificación sintáctica del cálculo lambda a la que se le añaden variables mutables y asignación, así como un potente mecanismo de control: el operador de punto de programa . Al estar basado en el cálculo lambda, ISWIM cuenta con funciones de orden superior y variables con ámbito léxico .
La semántica operacional de ISWIM se define utilizando la máquina SECD de Landin y utiliza paso por valor, es decir, evaluación inmediata . [ 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 sentencias y bloques begin... endy los reemplazó con la regla de lado fuera y el alcance basado en la indentación .
Una característica distintiva de la notación de ISWIM es el uso de wherecláusulas. Un programa ISWIM es una única expresión 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 de 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 de tipado dinámico, como LISP y a diferencia de ALGOL ; pero también es posible que pretendiera desarrollar alguna forma de inferencia de tipos .
Implementaciones y derivados
No se completó ninguna implementación directa de ISWIM, pero el lenguaje PAL de Art Evans [ 5 ] y el lenguaje Gedanken de John C. Reynolds [ 6 ] capturaron la mayoría de los conceptos de Landin , incluidas potentes operaciones de transferencia de control. Ambos fueron tipados dinámicamente . ML de Robin Milner puede considerarse equivalente a ISWIM sin el operador J y con inferencia de tipos .
Otra línea de derivación de ISWIM consiste en eliminar las características imperativas (asignación y el operador J), dejando un lenguaje puramente funcional. [ 7 ] Entonces es 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 .
Referencias
- ↑ Landin, PJ (marzo de 1966). "Los próximos 700 lenguajes de programación" (PDF) . Communications of the ACM . 9 (3). Association for Computing Machinery : 157–165 . doi : 10.1145/365230.365257 . S2CID 13409665 .
- ↑ Plotkin, Gordon (1975). Llamada por nombre, llamada por valor y el cálculo lambda (PDF) (Informe).
- ↑ Este artículo se basa en material tomado de ISWIM en el Diccionario en línea gratuito de informática antes del 1 de noviembre de 2008 e incorporado bajo los términos de "relicencia" de la GFDL , versión 1.3 o posterior.
- ↑ Turner, DA (2013), Some History of Functional Programming Languages , Lecture Notes in Computer Science, vol. 7829, Berlín, Heidelberg: Springer Berlin Heidelberg, pp. 1–20 , doi : 10.1007/978-3-642-40447-4_1 , ISBN 978-3-642-40446-7, recuperado el 28-01-2024 ,
El artículo de ISWIM también contiene la primera aparición de definiciones de tipos algebraicos utilizadas para definir estructuras. Esto se hace con palabras, pero la idea de suma de productos está claramente presente.
- ↑ Evans, Art (1968). "PAL: un lenguaje diseñado para enseñar lingüística de la programación". Actas de la Conferencia Nacional de la ACM . Conferencia Nacional de la ACM. Asociación para la Maquinaria de Computación .
- ↑ Reynolds, John C. (septiembre de 1969). Gedanken: un lenguaje simple sin tipado que permite estructuras de datos funcionales y corrutinas (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 .
- Lenguajes de programación creados en 1966
- Lenguajes de programación académica
- Lenguajes de programación experimentales
- Lenguajes funcionales
- Historia de la informática en el Reino Unido