stringtranslate.com

Aprendizaje automático concurrente

El aprendizaje automático concurrente (CML) es un lenguaje de programación funcional , de alto nivel , de propósito general y multiparadigma . 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 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 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 que se comunica a menudo requiere establecer múltiples canales, como por ejemplo to multiple server , y luego elegir entre los canales disponibles cuando hay nuevos datos disponibles. Esto se puede lograr mediante sondeo , como con la operación select en sistemas Unix.

La combinación de protocolos específicos de la aplicación y comunicación entre múltiples partes puede resultar complicada debido a la necesidad de introducir sondeos y comprobaciones de bloqueo dentro de un protocolo preexistente. El aprendizaje automático concurrente resuelve este problema al reducir 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 utilizando 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 utilizando un bucle de sondeo o una función con controladores para cada tipo de evento.

Hola Mundo

Aquí hay un programa "¡Hola, mundo!" 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 ML estándar de Nueva Jersey (SML/NJ) y CML. (En plataformas que no sean Linux-x86, el nombre del montón será diferente; la línea con "cml_test.x86-linux" puede necesitar cambiarse por 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. ^ "ConcurrentMLImplementation" . Consultado el 5 de abril de 2021 .
  4. ^ ab Fluet, Matthew; Bergstrom, Lars; Ford, Nic; Rainey, Mike; Reppy, John; Shaw, Adam; 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, Matthew; Findler, Robert Bruce (2004). "Abstracciones de sincronización a prueba de muertes". 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 clase en 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.