software.wikisort.org - Язык_программирования

Search / Calendar

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

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

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


Подробности


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

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

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


Реализация


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


Применение


На 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

Примечания


  1. 110.79 Distribution Files (англ.)
  2. Reppy, 2009.
  3. 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 года.

Литература



Ссылки


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



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

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

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