Occam es un lenguaje de programación concurrente que se basa en el álgebra de procesos secuenciales comunicantes (CSP) [ 1 ] y comparte muchas de sus características. Recibe su nombre del filósofo Guillermo de Ockham , de quien toma su nombre la navaja de Occam .
Occam es un lenguaje de programación procedimental imperativo (similar a Pascal ). Fue desarrollado por David May y otros en Inmos (marca registrada INMOS), con el asesoramiento de Tony Hoare , como lenguaje de programación nativo para sus microprocesadores transputer , aunque existen implementaciones para otras plataformas. La versión más conocida es occam 2; su manual de programación fue escrito por Steven Ericsson-Zenith y otros en Inmos .
Descripción general
En los siguientes ejemplos, la indentación y el formato son fundamentales para analizar el código: las expresiones terminan al final de la línea y las listas de expresiones deben estar al mismo nivel de indentación. Esta característica, denominada regla de indentación lateral , también se encuentra en otros lenguajes como Haskell y Python .
La comunicación entre procesos funciona a través de canales con nombre . Un proceso envía datos a un canal mediante , !mientras que otro los envía mediante ?. La entrada y la salida no pueden continuar hasta que el otro extremo esté listo para aceptar u ofrecer datos. (En el caso de que no continúe, a menudo se dice que el proceso se bloquea en el canal. Sin embargo, el programa no hará ni un bucle infinito ni un sondeo; por lo tanto, términos como wait , hang o yield también pueden describir este comportamiento; también en el contexto de que no bloqueará la ejecución de otros procesos independientes). Ejemplos (c es una variable):
teclado ? c
pantalla ! c
SEQ(secuencial) introduce una lista de expresiones que se evalúan secuencialmente. Esto no es implícito como en la mayoría de los demás lenguajes de programación. Ejemplo:
SEQ x := x + 1 y := x * x
PAR(paralelo) inicia una lista de expresiones que pueden evaluarse simultáneamente. Ejemplo:
PAR pag() q()
ALT(alternativa) especifica una lista de comandos protegidos . Los comandos protegidos son una combinación de una condición booleana y una expresión de entrada, ambas opcionales. Cada comando protegido cuya condición sea verdadera y cuyo canal de entrada esté listo se considera exitoso. Se selecciona una de las alternativas exitosas para su ejecución. Ejemplo:
ALT count1 < 100 y c1 ? datos SEQ contador1 := contador1 + 1 ¡Datos fusionados! count2 < 100 y c2 ? datos SEQ conteo2 := conteo2 + 1 ¡Datos fusionados! ¿Estado? Solicitud SEQ ¡fuera! recuento1 ¡fuera! count2
Esto leerá datos de los canales c1 o c2 (el que esté listo) y los pasará a un canal combinado. Si countN llega a 100, las lecturas del canal correspondiente se deshabilitarán. Una solicitud en el canal de estado se responde enviando los recuentos a out.
revisiones lingüísticas

occam 1
occam 1 [ 2 ] (lanzado en 1983) fue una versión preliminar del lenguaje que tomó prestado del trabajo de David May en EPL y del CSP de Tony Hoare. Este solo admitía el tipo de datos VAR , que era un tipo entero correspondiente a la longitud de palabra nativa de la arquitectura de destino, y matrices de una sola dimensión.
Occam 2
occam 2 [ 3 ] es una extensión producida por Inmos Ltd en 1987 que agrega soporte de punto flotante , funciones, matrices multidimensionales y más tipos de datos, como tamaños variables de enteros (INT16, INT32) y bytes.
Con esta revisión, occam se convirtió en un lenguaje capaz de expresar programas útiles, mientras que occam 1 era más adecuado para examinar algoritmos y explorar el nuevo lenguaje (sin embargo, el compilador de occam 1 fue escrito en occam 1, [ 4 ] por lo que existe una prueba de existencia de que se podían escribir programas útiles de tamaño razonable en occam 1, a pesar de sus limitaciones).
Occam 2.1
occam 2.1 [ 1 ] fue el último de la serie de desarrollos del lenguaje occam aportados por Inmos. Definido en 1994, estuvo influenciado por una propuesta anterior para un lenguaje occam 3 (también conocido como "occam91" durante su desarrollo inicial) creado por Geoff Barrett en Inmos a principios de la década de 1990. Se distribuyó un Manual de Referencia revisado que describía occam 3 para comentarios de la comunidad, [ 5 ] pero el lenguaje nunca se implementó completamente en un compilador.
occam 2.1 introdujo varias características nuevas con respecto a occam 2, entre ellas:
- Tipos de datos con nombre (DATA TYPE x IS y)
- Registros con nombre
- Discos abarrotados
- Relajación de algunas de las reglas de conversión de tipos .
- Nuevos operadores (por ejemplo, BYTESIN)
- Reescritura de canales y matrices de canales
- Capacidad para devolver un array de longitud fija desde una función.
Para obtener una lista completa de los cambios, consulte el Apéndice P del Manual de referencia de Inmos occam 2.1 .
occam-π
occam-π [ 6 ] es el nombre común de la variante de occam implementada por versiones posteriores del compilador occam reorientable de Kent ( KRoC ). La adición del símbolo π (pi) al nombre occam es una alusión a KRoC occam, que incluye varias ideas inspiradas en el cálculo π . Contiene varias extensiones significativas del compilador occam 2.1, por ejemplo:
- Protocolos anidados
- Creación de procesos en tiempo de ejecución
- Canales, datos y procesos móviles
- Recursión
- Herencia de protocolos
- Constructores de matrices
- Cita prolongada
Véase también
Referencias
- 1 2 occam 2.1 Manual de referencia (PDF) . SGS-Thomson Microelectronics Ltd. 12-05-1995.Documento Inmos 72 occ 45 03
- ↑ Manual de programación de occam . Prentice-Hall. 1984. ISBN 0-13-629296-8.
- ↑ Ericsson-Zenith, Steven (1988). Manual de referencia de occam 2. Prentice-Hall. ISBN 0-13-629312-3.
- ↑ Cook, Barry M; Peel, RMA (1999-04-11). "Occam en matrices de puertas programables en campo" . En Cook, Barry M. (ed.). Arquitecturas, lenguajes y técnicas para sistemas concurrentes . 22.ª Reunión Técnica Mundial del Grupo de Usuarios de Occam y Transputer. Keele, Reino Unido: IOS Press. pág. 219. ISBN 90-5199-480-X. Consultado el 28 de noviembre de 2016 .
- ↑ Barrett, Geoff; Ericsson-Zenith, Steven (1992-03-31). "Manual de referencia de occam 3" (PDF) . Inmos . Consultado el 24 de marzo de 2008 .
{{cite journal}}: Para citar una revista se requiere|journal=( ayuda ) - ↑ Barnes, Fred; Welch, Peter (14 de enero de 2006). "occam-pi: Combinando lo mejor de CSP y el cálculo pi" . cs.kent.ac.uk. Consultado el 24 de noviembre de 2006 .
Lecturas adicionales
- Arquitecturas de Procesos de Comunicación 2007 – WoTUG-30 . IOS Press. 2007. 513 páginas. ISBN 978-1-58603-767-3.
- Arquitecturas de Procesos de Comunicación 2006 – WoTUG-29 . IOS Press. 2006. 391 páginas. ISBN 978-1-58603-671-3.
- Arquitecturas de procesos comunicantes 2005 – WoTUG-28 . IOS Press. 2005. 405 páginas. ISBN 978-1-58603-561-7.
- Kerridge, Jon, ed. (1993). Transputer and Occam Research: New Directions . IOS Press. 253 páginas . ISBN 0-8247-0711-7.
- Roscoe, Andrew William ; Hoare, Charles Antony Richard (1986). Las leyes de la programación de Occam . Grupo de Investigación en Programación, Universidad de Oxford.
- Egorov, A., Universidad Técnica – Sofía, (1983–2011) Записки по Компютърни архитектури
Enlaces externos
- Información, compiladores, editores y utilidades en las páginas de WoTUG occam.
- Compiladores, documentación, ejemplos, proyectos y utilidades en el Archivo de Computación Paralela de Internet (ya no se mantiene).
- Libros de Occam en Transputer.net
- El lenguaje occam-pi .
- Compilador Tock occam – (traductor de occam a C de Kent) un compilador basado en Haskell para occam y lenguajes relacionados.
- Lenguajes de programación concurrentes
- Lenguajes de programación procedimental
- Lenguajes de programación creados en 1983