Concurrent ML

Материал из Википедии — свободной энциклопедии
Concurrent ML
Семантика Синхронная передача сообщений
Класс языка
конкурентный
Тип исполнения
встраиваемый
Автор John H. Reppy
Выпуск
Система типов
Хиндли—Милнера
Испытал влияние Standard ML
Повлиял на конкурентные расширения для
Scheme, Java
Лицензия открытая
Сайт cml.cs.uchicago.edu
Платформа Standard ML
ОС кроссплатформенный

Concurrent ML (CML) —

.

Реализован в виде библиотеки. Входит в стандартную поставку компиляторов SML/NJ[англ.] и MLton. С минимальными изменениями CML планируется ввести в стандарт будущего языка successor ML.

Подробности

CML воплощает модель синхронной передачи сообщений,

модульность.[3][2]

CML разработан во времена, когда процессоры с поддержкой аппаратного параллелизма были роскошью, так что его ранние реализации ориентировались на физически последовательное исполнение. Впоследствии был разработан «Parallel Concurrent ML»[2], исполняемый на современных процессорах более эффективно.

Своим созданием и развитием CML в основном обязан Джону Реппи (англ. John Reppy)[4].

Реализация

Concurrent ML выделяется среди большинства

встраиваемых языков тем, что имеет не единственную реализацию, а две принципиально различные. Это обусловлено различиями между реализациями Standard ML
по назначению и применяемым стратегиям компиляции:

Применение

На CML написана библиотека eXene[5], реализующая параллельную реактивную модель графического интерфейса пользователя под X Window System.

Пример кода

Программа «

строковый
канал. Этот поток сперва порождает другой поток, который напечатает в консоль первую строку, полученную на канале, а затем посылает на этот порождённый канал строку «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

Примечания

  1. 110.79 Distribution Files (англ.)
  2. 1 2 3 4 Reppy, 2009.
  3. 1 2 Reppy, Xiao, 2007.
  4. John Reppy’s homepage. Дата обращения: 24 июля 2015. Архивировано 27 июля 2015 года.
  5. eXene — multi-threaded X-Window System toolkit written in ConcurrentML. Дата обращения: 24 июля 2015. Архивировано 22 февраля 2012 года.

Литература

  • John Reppy, Claudio V. Russo, Yingqi Xiao. Parallel Concurrent ML. — International Conference on Functional Programming (ICFP), 2009.

Ссылки

Norman Ramsey. Concurrent Programming in ML // Technical Report CS-TR-262-90. — Princeton University, 1990.