Occam

Occam
clase de idioma lenguaje de programación , lenguaje de programación procedimental , lenguaje de programación orientado a procesos [d] y lenguaje de sangría [d]
Apareció en 1983
Autor David mayo
Desarrollador INMOS
Dialectos occam-π (pi)
sido influenciado CSP
influenciado Facilidad

Occam  es un lenguaje de programación paralelo procedimental de alto nivel desarrollado a principios de la década de 1980 por un grupo de científicos de Oxford dirigido por David May en nombre de la empresa inglesa INMOS Ltd. como parte del trabajo en la creación de transputers . Nombrado en honor al filósofo inglés del siglo XIV William of Occam, y su máxima, conocida como la navaja de Occam , es el lema del proyecto.  

Existe una relación directa entre el lenguaje de Occam y las transputadoras: las transputadoras INMOS están diseñadas para que los objetos y construcciones de Occam se implementen en su conjunto de instrucciones de la mejor manera posible. De hecho, el transputer es una "implementación de silicio" del lenguaje Ockham. Durante mucho tiempo, INMOS afirmó que las transputadoras no requerían un sistema de programación tipo " ensamblador ", ya que Occam lo reemplaza por completo.

Sin embargo, Ockham es un lenguaje típico de alto nivel , sintácticamente similar a Pascal o C.

Fundamentos teóricos

El lenguaje se basa en el llamado concepto CSP (el concepto de procesos secuenciales que interactúan ), desarrollado por Anthony Hoare . En esencia, CSP es un formalismo para describir el modelo computacional correspondiente, lo suficientemente expresivo como para escribir y probar teoremas en él, y lo suficientemente poderoso e inequívoco para ser un lenguaje de programación (se conocen varias implementaciones). De acuerdo con CSP, primero se introduce un conjunto de eventos elementales (alfabeto), luego se construyen procesos a partir de ellos y se pueden construir otros nuevos a partir de los procesos que se acaban de describir. Los procesos que se ejecutan en paralelo intercambian información mediante un intercambio de información de encuentro sin búfer entre un par (y solo un par) de procesos a través de un objeto especial: un canal . Al interactuar, el participante del intercambio que recurrió al canal primero espera a que el compañero esté listo (el punto de encuentro); cuando esto último ocurre, se inicia un intercambio. No se permite el uso de memoria compartida por varios procesos paralelos en el CSP.

Sintaxis y semántica

El concepto básico del lenguaje Ockham es el proceso computacional; La principal característica de un proceso es que puede iniciarse y completarse. El lenguaje define varios procesos simples: el proceso de asignación, los procesos de entrada y salida a través de una canalización (indicados por los símbolos ? y ! ), los procesos formales SKIP y STOP (el primero se completa inmediatamente, el segundo nunca), el temporizador de lectura y el temporizador retrasar los procesos. Todos los demás procesos se pueden obtener por construcción jerárquica (a través de los previamente definidos). Para ello, Ockham proporciona un conjunto de constructores de procesos: SEQ (define el proceso de ejecución secuencial de procesos), PAR (define el proceso de ejecución paralela de procesos), así como el constructor del proceso condicional IF , el proceso cíclico MIENTRAS , el proceso de selección del proceso ALT . En este caso, la regla es que un proceso compuesto de tipo SEQ o PAR se considera terminado cuando todos sus procesos constituyentes han terminado. Los procesos pueden ser nombrados y llamados por su nombre, pasando parámetros. Los procesos SEQ , PAR , IF y ALT se pueden replicar (multiplicar) utilizando el replicador FOR . El proceso ALT (como PAR ) introduce indeterminismo en el lenguaje , ya que se cree que si se cumplen varias condiciones simultáneamente, es imposible predecir con precisión el curso futuro de los acontecimientos.

ejemplo: Un multiplexor que lee infinitamente de la matriz de canales de entrada [] y transmite al canal común de salida, usando temperatura variable intermedia MIENTRAS ES VERDAD Temperatura INT: ALT i=0 PARA N en[yo]? temperatura ¡afuera! temperatura ejemplo: Cascada de multiplexores paralelos. La entrada es una matriz de M*N en [canales], la salida es el canal de salida. Se utiliza una matriz de M canales ch[] para la comunicación entre multiplexores en la cascada: PAR -- cascada de multiplexores de entrada en paralelo PAR i=0 FOR M -- M multiplexores en paralelo que procesan N canales de in[] cada uno MIENTRAS ES VERDAD Temperatura INT: ALT j=i*N PARA N en[j] ? temperatura ch[yo]! temperatura WHILE TRUE -- multiplexor raíz leyendo M canales intermedios ch[] Temperatura INT: ALT i=0 PARA M ch[i] ? temperatura ¡afuera! temperatura ejemplo: Proceso de almacenamiento en búfer de E/S. Ejecutar el búfer de proceso (entrada, salida, N) permite que el canal de salida se quede atrás del canal de entrada hasta N mensajes para ser almacenados en el búfer dentro del proceso del búfer: Búfer PROC (CHAN OF INT entrada, salida, INT N) CHAN OF INT in.wait, out.wait : INT n : -- recuento de valores almacenados en búfer [N] Mejora de INT: SEC n:=0 PAR—entrada INT i, cualquiera: -- i - puntero de escritura del búfer SEC yo:=0 MIENTRAS ES VERDAD SEC MIENTRAS n<(N-1) SEC ¿en? aficionado [yo] n:=n+1 SI n=1 fuera.¡espera! ningún CIERTO SALTAR i:=(i+1) MOD N ¿en espera? cualquier salida INT j, cualquiera: -- j — puntero para leer del búfer SEC j:=0 MIENTRAS ES VERDAD SEC fuera.esperar? ningún MIENTRAS n>0 SEC ¡afuera! aficionado[j] n:=n-1 SI n=(N-2) en espera ! ningún CIERTO SALTAR j:=(j+1) MOD N  :

Al estudiar los ejemplos, debe tener en cuenta que el símbolo "dos menos" significa el comienzo del comentario hasta el final de la línea y el símbolo "punto" . puede ser parte de un identificador en Ockham y no tiene ningún significado especial. Carácter de dos puntos : significa "fin de la descripción". Ossam es sensible a las letras mayúsculas y minúsculas en los identificadores.

Una característica interesante del lenguaje Occam es la inclusión de sangría (indentación, "escalera") en su sintaxis. Este popular y altamente expresivo resaltador de estructuras Ockham es la única forma de especificar el alcance de los constructores. Entre las ventajas indudables de una solución de este tipo se encuentran la reducción del número de caracteres de servicio al escribir una construcción (no se necesitan palabras como BEGIN-END o corchetes) y la estandarización forzada del formato de los textos, lo que aumenta su legibilidad .

Un ejemplo de la importancia de la "escalera":

SEC proc1() PAR proc21() proc22() proc3()

aquí, proc1 se ejecutará primero, luego proc21 y proc22 se ejecutarán en paralelo, y solo después de completar el más largo de ellos, se iniciará proc3. Si cambiamos la llamada a proc3 un nivel a la derecha, entonces el orden de evaluación cambia:

SEC proc1() PAR proc21() proc22() proc3()

Aquí proc3 comienza al mismo tiempo que proc21 y proc22.


Versiones e implementaciones

Oficialmente, como parte de TDS (Transputer Development System), INMOS Ltd. Se lanzaron implementaciones de Occam 1.0, Occam 2.0 y Occam 2.1. Después de la compra de la empresa y la reducción de los desarrollos en el proyecto transputer, los desarrolladores de Occam publicaron de forma privada la especificación Occam 3. Más tarde, un grupo de entusiastas implementó el lenguaje Occam 2.5, que era Occam 2.1 con algunas innovaciones de Occam 3. Este último no se implementó en su totalidad.

El desarrollo del lenguaje Occam fue en la dirección de agregar nuevos tipos de datos, conceptos de alto nivel y herramientas que facilitan la programación. Al mismo tiempo, no se revisó la filosofía del lenguaje.

Hay implementaciones de Ockham para otras arquitecturas que no son transputadoras, en su mayoría para aficionados.

También se conocen bibliotecas que implementan las primitivas del concepto básico Occam de CSP, que permite programar al estilo Occam en otros lenguajes.

Notas

Literatura

Enlaces