Concurrent ML
Concurrent ML (CML) — статически типизированный язык конкурентного программирования высшего порядка, встраиваемый в язык общего назначения[англ.] Standard ML[3][2]. Реализован в виде библиотеки. Входит в стандартную поставку компиляторов SML/NJ[англ.] и MLton. С минимальными изменениями CML планируется ввести в стандарт будущего языка successor ML. ПодробностиCML воплощает модель синхронной передачи сообщений, расширяя SML типизированными каналами и синхронными абстракциями первого класса, которые называются событиями. Этот механизм позволяет инкапсулировать сложные протоколы взаимодействия и синхронизации в виде объектов первого класса, поощряя сокрытие действительных каналов взаимодействия под абстрактными типами данных и улучшая за счёт этого модульность.[3][2] CML разработан во времена, когда процессоры с поддержкой аппаратного параллелизма были роскошью, так что его ранние реализации ориентировались на физически последовательное исполнение. Впоследствии был разработан «Parallel Concurrent ML»[2], исполняемый на современных процессорах более эффективно. Своим созданием и развитием CML в основном обязан Джону Реппи (англ. John Reppy)[4]. РеализацияConcurrent ML выделяется среди большинства встраиваемых языков тем, что имеет не единственную реализацию, а две принципиально различные. Это обусловлено различиями между реализациями Standard ML по назначению и применяемым стратегиям компиляции:
ПрименениеНа CML написана библиотека Пример кодаПрограмма «Hello, world!» для консоли. Здесь порождается поток, который создаёт строковый канал. Этот поток сперва порождает другой поток, который напечатает в консоль первую строку, полученную на канале, а затем посылает на этот порождённый канал строку «hello, world!». structure Hello =
struct
open CML
fun hello () =
let
val c : string chan = channel ()
in
spawn ( fn () => TextIO.print (recv c) );
send ( c, "hello, world!\n" );
exit ()
end
fun main (name, argv) =
RunCML.doit ( fn () => ignore (spawn hello), NONE )
end
Примечания
Литература
Ссылки
|