occam es un lenguaje de programación que es concurrente y se basa en el álgebra de procesos de comunicación de procesos secuenciales (CSP), [1] y comparte muchas de sus características. Lleva el nombre del filósofo William de Ockham, que da nombre a la navaja de Occam .
Paradigma | Imperativo , procedimental , concurrente |
---|---|
Diseñada por | David mayo |
Desarrollador | Inmos |
Apareció por primera vez | 1983 |
Lanzamiento estable | 2.1 (oficial), 2.5 (no oficial), 3 (no implementado completamente) / 1994 |
Dialectos | |
occam-π (pi) | |
Influenciado por | |
Comunicando procesos secuenciales | |
Influenciado | |
Fácil , listo , Python |
occam es un lenguaje procedimental imperativo (como Pascal ). Fue desarrollado por David May y otros en Inmos (marca comercial INMOS), asesorado por Tony Hoare , como el lenguaje de programación nativo para sus microprocesadores transputadores , 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 .
Descripción general
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 vía !
mientras que otro ingresa datos con ?
. 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 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 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 al mismo tiempo. Ejemplo:
PAR pag() q ()
ALT
especifica una lista de comandos protegidos . Los guardias son una combinación de una condición booleana y una expresión de entrada, ambas opcionales. Cada guardia para la cual la condición es verdadera y el canal de entrada está listo tiene éxito. Se selecciona una de las alternativas exitosas para su ejecución. Ejemplo:
ALT count1 <100 & c1? datos SEQ count1: = count1 + 1 fusionados! datos count2 <100 & c2? datos SEQ count2: = count2 + 1 fusionados! datos estado ? pedido SEQ fuera ! count1 fuera ! count2
Esto leerá los datos de los canales c1 o c2 (el que esté listo) y los pasará a un canal combinado. Si countN llega a 100, se deshabilitarán las lecturas del canal correspondiente. Una solicitud en el canal de estado se responde enviando los recuentos a out
.
Revisiones de idioma
occam 1
occam 1 [2] (publicado en 1983) era una versión preliminar del lenguaje que tomó prestado del trabajo de David May sobre EPL y CSP de Tony Hoare. Esto solo admitía 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
occam 2 [3] es una extensión producida por Inmos Ltd en 1987 que agrega soporte de punto flotante , funciones, arreglos 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 occam 1 fue escrito en occam 1, [4] por lo que hay una prueba de existencia que programas útiles de tamaño razonable podrían escribirse en occam 1, a pesar de sus límites).
occam 2.1
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 temprano) creado por Geoff Barrett en Inmos a principios de la década de 1990. Se distribuyó un Manual de referencia revisado que describe occam 3 para recibir comentarios de la comunidad, [5] pero el lenguaje nunca se implementó por completo en un compilador.
occam 2.1 introdujo varias funciones nuevas en occam 2, que incluyen:
- Tipos de datos con nombre (TIPO DE DATOS x IS y)
- Registros nombrados
- Registros empaquetados
- Relajación de algunas de las reglas de conversión de tipos
- Nuevos operadores (por ejemplo, BYTESIN)
- Reescritura de canales y matrices de canales
- Posibilidad de devolver una matriz de longitud fija desde la 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 para la variante occam implementada por versiones posteriores del Compilador occam de 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 del compilador occam 2.1, por ejemplo:
Ver también
- El lenguaje de programación XC , que se basa en occam pero con sintaxis de estilo C.
- Lenguajes de programación concurrentes
- Lista de lenguajes de programación simultáneos y paralelos
Referencias
- ^ a b Manual de referencia de occam 2.1 (PDF) . SGS-Thomson Microelectronics Ltd. 1995-05-12. Documento inmos 72 occ 45 03
- ^ Manual de programación 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 (11 de abril de 1999). "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 del Grupo Mundial de Usuarios de Occam y Transputer. Keele, Reino Unido: IOS Press. pag. 219. ISBN 90-5199-480-X. Consultado el 28 de noviembre de 2016 .
- ^ Barrett, Geoff; Ericsson-Zenith, Steven (31 de marzo de 1992). "Manual de referencia de occam 3" (PDF) . Inmos . Consultado el 24 de marzo de 2008 . Cite journal requiere
|journal=
( ayuda ) - ^ Barnes, Fred; Welch, Peter (14 de enero de 2006). "occam-pi: mezcla de lo mejor de CSP y pi-cálculo" . Consultado el 24 de noviembre de 2006 .
Otras lecturas
- Comunicación de arquitecturas de procesos 2007 - WoTUG-30 . IOS Press. 2007. pp. 513 páginas. ISBN 978-1-58603-767-3. [1]
- Comunicación de arquitecturas de procesos 2006 - WoTUG-29 . IOS Press. 2006. pp. 391 páginas. ISBN 978-1-58603-671-3. [2]
- Comunicación de arquitecturas de procesos 2005 - WoTUG-28 . IOS Press. 2005. pp. 405 páginas. ISBN 978-1-58603-561-7. [3]
- Kerridge, Jon, ed. (1993). Transputer and Occam Research: New Directions . IOS Press. pp. 253 páginas . ISBN 0-8247-0711-7.
- Roscoe, Andrew William ; Hoare, Charles Antony Richard (1986). Las leyes de la programación 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 occam de WoTUG
- Compiladores, documentación, ejemplos, proyectos y utilidades en Internet Parallel Computing Archive (ya no se mantiene)
- Libros de Occam en Transputer.net
- El lenguaje occam-pi .
- Compilador Tock occam - (traductor de occam a C desde Kent) un compilador basado en Haskell para occam y lenguajes relacionados.