occam es un lenguaje de programación concurrente que se basa en el álgebra de procesos de procesos secuenciales de comunicación (CSP), [1] y comparte muchas de sus características. Lleva el nombre del filósofo Guillermo de Ockham , que da nombre a la navaja de Occam .
occam es un lenguaje procesal imperativo (como Pascal ). Fue desarrollado por David May y otros en Inmos (marca registrada INMOS), asesorados por Tony Hoare , como lenguaje de programación nativo para sus microprocesadores transputer , pero hay implementaciones disponibles 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 .
En los siguientes ejemplos, la sangría y el formato son fundamentales para analizar el código: las expresiones terminan al final de la línea, las listas de expresiones deben estar en el mismo nivel de sangría. Esta característica, denominada regla de fuera de juego , también se encuentra en otros lenguajes como Haskell y Python .
La comunicación entre procesos funciona a través de canales nombrados . Un proceso envía datos a un canal !
mientras que otro ingresa datos con ?
. La entrada y salida no pueden continuar hasta que el otro extremo esté listo para aceptar u ofrecer datos. (En el caso de que no proceda, a menudo se dice que el proceso se bloquea en el canal. Sin embargo, el programa no girará ni sondeará; por lo tanto, términos como esperar , colgar o ceder también pueden transmitir el 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
introduce una lista de expresiones que se evalúan secuencialmente. Esto no está implícito como lo está en la mayoría de los otros lenguajes de programación. Ejemplo:
SEQ x := x + 1 y := x * x
PAR
comienza una lista de expresiones que pueden evaluarse simultáneamente. Ejemplo:
PAR pag() q()
ALT
Especifica una lista de comandos protegidos . Las guardias son una combinación de una condición booleana y una expresión de entrada, ambas opcionales. Cada guardia cuya condición es verdadera y el canal de entrada está listo es exitosa. Se selecciona una de las alternativas exitosas para su ejecución. Ejemplo:
ALTA cuenta1 <100 y c1? datos SEQ cuenta1:= cuenta1 + 1 fusionado! datos cuenta2 <100 y c2? datos SEQ cuenta2:= cuenta2 + 1 fusionado! datos estado ? pedido SEQ afuera ! contar1 afuera ! contar2
Esto leerá datos de los canales c1 o c2 (el que esté listo) y los pasará a un canal fusionado. Si countN llega a 100, las lecturas del canal correspondiente se desactivarán. Una solicitud en el canal de estado se responde enviando los recuentos a out
.
occam 1 [2] (lanzado en 1983) fue una versión preliminar del lenguaje tomado del trabajo de David May sobre EPL y CSP de Tony Hoare. Esto admitía únicamente el tipo de datos VAR, que era un tipo integral correspondiente a la longitud de la palabra nativa de la arquitectura de destino, y matrices de una sola dimensión.
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 distintos tamaños de números 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 que se podrían escribir programas útiles y de tamaño razonable en occam 1, a pesar de sus limitaciones).
occam 2.1 [1] fue el último de la serie de desarrollos del lenguaje occam aportados por Inmos. Definido en 1994, fue 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 los años 1990. Se distribuyó un manual de referencia revisado que describe 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 en occam 2, que incluyen:
Para obtener una lista completa de los cambios, consulte el Apéndice P del Manual de referencia de Inmos occam 2.1.
occam-π [6] es el nombre común para la variante de occam implementada por versiones posteriores del compilador de occam Kent Retargetable ( KRoC ). La adición del símbolo π (pi) al nombre de occam es una alusión a KRoC occam que incluye varias ideas inspiradas en el cálculo π . Contiene varias extensiones importantes para el compilador occam 2.1, por ejemplo:
{{cite journal}}
: Citar diario requiere |journal=
( ayuda )