WikiSort.ru - Программирование

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

Concurrent ML (CML) — статически типизированный язык конкурентного программирования высшего порядка, встраиваемый в язык общего назначения[en] Standard ML[3][2].

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

Подробности

CML воплощает модель синхронной передачи сообщений, расширяя SML типизированными каналами и синхронными абстракциями первого класса, которые называются событиями. Этот механизм позволяет инкапсулировать сложные протоколы взаимодействия и синхронизации в виде объектов первого класса, поощряя сокрытие действительных каналов взаимодействия под абстрактными типами данных и улучшая за счёт этого модульность.[3][2]

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

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

Реализация

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

  • MLton использует значительно более агрессивную оптимизацию, изначально ориентируясь на производительность программ уровня Си/С++. При таких требованиях CPS-стратегия оказывается неприменима. Но без неё каждый вызов callcc требует временных затрат, пропорциональных размеру стека, что в данном случае тем более неприемлемо. Поэтому при портировании реализация CML была переключена с продолжений на «тонкие» потоки MLton, основанные на потоках операционные системы. Как следствие, исходный код на CML под MLton портируем за счёт абстракции, но скомпилированный код уже получается специфичным для данной платформы. Потоки MLton несколько тяжеловеснее, чем продолжения в SML/NJ, но разработчики полагают, что это исправимо. MLton предоставляет базовую функциональность CML, в основном повторяющую поведение имеющейся в SML/NJ[en], но не реализует потоко-безопасную обёртку над Базисной библиотекой и реактивные эквиваленты функциональности модулей IO и OS.

Применение

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

Пример кода

Программа «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

Примечания

Литература

  • 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.

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии