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 воплощает модель синхронной передачи сообщений,
CML разработан во времена, когда процессоры с поддержкой аппаратного параллелизма были роскошью, так что его ранние реализации ориентировались на физически последовательное исполнение. Впоследствии был разработан «Parallel Concurrent ML»[2], исполняемый на современных процессорах более эффективно.
Своим созданием и развитием CML в основном обязан Джону Реппи (англ. John Reppy)[4].
Реализация
Concurrent ML выделяется среди большинства
- В компиляторе оптимизацию хвостовых вызовов (Tail Call Optimisation, TCO), то из результирующего кода полностью устраняется динамический стек, и распараллеленные программы получаются весьма эффективными.
- callcc требует временных затрат, пропорциональных размеру стека, что в данном случае тем более неприемлемо. Поэтому при портировании реализация CML была переключена с продолжений на «тонкие» потоки MLton, основанные на потоках операционные системы. Как следствие, исходный код на CML под MLton портируем за счёт абстракции, но скомпилированный код уже получается специфичным для данной платформы. Потоки MLton несколько тяжеловеснее, чем продолжения в SML/NJ, но разработчики полагают, что это исправимо. MLton предоставляет базовую функциональность CML, в основном повторяющую поведение имеющейся в SML/NJ[англ.], но не реализует потоко-безопасную обёртку над Базисной библиотекой и реактивныеэквиваленты функциональности модулей
IO
иOS
.
Применение
На CML написана библиотека eXene
[5], реализующая параллельную реактивную модель графического интерфейса пользователя под X Window System.
Пример кода
Программа «
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
Примечания
- ↑ 110.79 Distribution Files (англ.)
- ↑ 1 2 3 4 Reppy, 2009.
- ↑ 1 2 Reppy, Xiao, 2007.
- ↑ John Reppy’s homepage . Дата обращения: 24 июля 2015. Архивировано 27 июля 2015 года.
- ↑ eXene — multi-threaded X-Window System toolkit written in ConcurrentML . Дата обращения: 24 июля 2015. Архивировано 22 февраля 2012 года.
Литература
- John Reppy. Synchronous Operations as First-Class Values. — Conference on Programming Language Design and Implementation (PLDI), 1988.
- John Reppy. Concurrent Programming in ML. — Cambridge University Press, 1999. — ISBN 0521480892. (недоступная ссылка)
- Emden Gansner, John Reppy. A Multi-Threaded Higher-order User Interface Toolkit.. — User Interface Software, 1993.
- Riccardo Puccella. Reactive Programming in Standard ML. — IEEE International Conference on Computer Languages (ICCL), 1998.
- Simon Marlow, Simon Peyton Jones, Andy Moran, John Reppy. Asynchronous Exceptions in Haskell. — Conference on Programming Language Design and Implementation (PLDI), 2001. Архивировано 14 мая 2025 года.
- Matthew Flatt and Robert Bruce Findler. Kill-Safe Synchronization Abstractions. — Conference on Programming Language Design and Implementation (PLDI), 2004.
- John Reppy, Yingqi Xiao. Specialization of CML message-passing primitives. — Symposium on Principles of Programming Languages (POPL), 2007. — С. 315–326.
- John Reppy, Claudio V. Russo, Yingqi Xiao. Parallel Concurrent ML. — International Conference on Functional Programming (ICFP), 2009.
Ссылки
- Concurrent ML в SML/NJ
- Concurrent ML Implementation in MLton
- MLton Threads
- альтернативный подход к многопоточности в ML:
- Norman Ramsey. Concurrent Programming in ML // Technical Report CS-TR-262-90. — Princeton University, 1990.