stringtranslate.com

AA concurrente

El ML concurrente (CML) es un lenguaje de programación funcional , de alto nivel , de propósito general y de múltiples paradigmas . Es un dialecto del lenguaje de programación ML que es una extensión concurrente del lenguaje ML estándar , caracterizado por su capacidad de permitir la creación de abstracciones de comunicación componibles que son de primera clase en lugar de estar integradas en el lenguaje. El diseño de CML y sus operaciones primitivas se han adoptado en varios otros lenguajes de programación, como GNU Guile , [5] Racket , [6] y Manticore. [4]

Conceptos

Muchos lenguajes de programación que admiten la concurrencia ofrecen canales de comunicación que permiten el intercambio de valores entre procesos o subprocesos que se ejecutan simultáneamente en un sistema. Las comunicaciones establecidas entre procesos pueden seguir un protocolo específico, lo que requiere que el programador escriba funciones para establecer el patrón de comunicación requerido. Mientras tanto, un sistema de comunicación a menudo requiere establecer múltiples canales, como múltiples servidores , y luego elegir entre los canales disponibles cuando haya nuevos datos disponibles. Esto se puede lograr mediante sondeo , como con la operación de selección en sistemas Unix.

Combinar protocolos específicos de la aplicación y comunicación multipartita puede resultar complicado debido a la necesidad de introducir sondeos y comprobaciones de bloqueo dentro de un protocolo preexistente. El ML concurrente resuelve este problema reduciendo este acoplamiento de conceptos de programación mediante la introducción de eventos sincronizables . [7] Los eventos son una abstracción de primera clase que se puede utilizar con una operación de sincronización (llamada syncen CML y Racket) para bloquear potencialmente y luego producir algún valor resultante de la comunicación (por ejemplo, datos transmitidos en un canal).

En CML, los eventos se pueden combinar o manipular mediante una serie de operaciones primitivas. Cada operación primitiva construye un nuevo evento en lugar de modificar el evento en el lugar, lo que permite la construcción de eventos compuestos que representan el patrón de comunicación deseado. Por ejemplo, CML permite al programador combinar varios subeventos para crear un evento compuesto que luego puede realizar una elección no determinista de uno de los subeventos. Otra primitiva crea un nuevo evento que modificará el valor resultante de la sincronización con el evento original. Estos eventos incorporan patrones de comunicación que, en un lenguaje que no sea CML, normalmente se manejarían mediante un bucle de sondeo o una función con controladores para cada tipo de evento.

Hola Mundo

Aquí hay un "¡Hola mundo!" programa que imprime en la consola del sistema . Genera un hilo con un canal para cadenas y otro hilo que imprime una cadena recibida en el canal. Utiliza Standard ML de Nueva Jersey (SML/NJ) y CML. (En plataformas que no son Linux-x86, el nombre del montón será diferente; es posible que sea necesario cambiar la línea con "cml_test.x86-linux" a algo diferente).

enlaces externos

Referencias

  1. ^ Reppy, John H. (junio de 1991). CML: un lenguaje concurrente de orden superior . PLDI.
  2. ^ "¿Qué es el ML estándar de Nueva Jersey?" . Consultado el 5 de abril de 2021 .
  3. ^ "Implementación MLI simultánea" . Consultado el 5 de abril de 2021 .
  4. ^ ab Fluet, Mateo; Bergstrom, Lars; Ford, Nic; Rainey, Mike; Reppy, John; Shaw, Adán; Xiao, Yingqi (mayo de 2009). "Programación en Manticore, un lenguaje funcional paralelo heterogéneo" (PDF) . Consultado el 11 de julio de 2018 .
  5. ^ Wingo, Andy (29 de junio de 2017). "Un nuevo aprendizaje automático concurrente" . Consultado el 11 de julio de 2018 .
  6. ^ Flatt, Mateo; Findler, Robert Bruce (2004). "Abstracciones de sincronización seguras". Actas de la conferencia ACM SIGPLAN 2004 sobre diseño e implementación de lenguajes de programación . vol. 39. págs. 47–58. doi :10.1145/996841.996849. ISBN 1581138075. S2CID  5547460.
  7. ^ Reppy, John H. (1993). "ML concurrente: diseño, aplicación y semántica". Programación Funcional, Concurrencia, Simulación y Razonamiento Automatizado . Apuntes de conferencias sobre informática. vol. 693, págs. 165-198. CiteSeerX 10.1.1.50.7965 . doi :10.1007/3-540-56883-2_10. ISBN  978-3-540-56883-4.