В теории типов типы сеансов используются для обеспечения корректности в параллельных программах. Они гарантируют, что сообщения, отправленные и полученные между параллельными программами, находятся в ожидаемом порядке и имеют ожидаемый тип . [1] [2] Системы типов сеансов были адаптированы как для систем каналов , так и для систем акторов . [3]
Типы сеансов используются для обеспечения желаемых свойств в параллельных и распределенных системах, т. е. отсутствия ошибок связи или взаимоблокировок, а также соответствия протоколам. [4]
Двоичные и многосторонние типы сеансов
Взаимодействие между двумя процессами можно проверить с помощью бинарных типов сеансов, в то время как взаимодействие между более чем двумя процессами можно проверить с помощью многосторонних типов сеансов. [5] В многосторонних типах сеансов взаимодействие между всеми участниками описывается с помощью глобального типа , который затем проецируется в локальные типы , которые описывают коммуникацию с локального представления каждого участника. Важно, что глобальный тип кодирует информацию о последовательности коммуникации, которая была бы потеряна, если бы мы использовали бинарные типы сеансов для кодирования той же коммуникации. [6]
Формальное определение типов бинарных сеансов
Типы двоичных сеансов можно описать с помощью операций отправки ( ), операций получения ( ), ветвлений ( ), выборок ( ), рекурсии ( ) и завершения ( ). [2]
Например, представляет собой тип сеанса , который сначала отправляет логическое значение ( ), затем получает целое число ( ) и, наконец, завершается ( ).
Реализации
Типы сеансов были адаптированы для нескольких существующих языков программирования, включая:
^ ab Ancona, Davide (2016). Поведенческие типы в языках программирования. Ганновер, Массачусетс: Now Publishers. ISBN978-1-68083-135-1. OCLC 1053840486.
^ Фаулер, Саймон; Линдли, Сэм; Уодлер, Филип (10 мая 2017 г.). «Смешивание метафор: актеры как каналы и каналы как актеры (расширенная версия)». arXiv : 1611.06276 [cs.PL].
^ Скалас, Альцесте; Ёсида, Нобуко (июнь 2018 г.). «Типы многосторонних сеансов, за пределами дуальности». Журнал логических и алгебраических методов в программировании . 97 : 55–84 . doi : 10.1016/j.jlamp.2018.01.001 . hdl : 10044/1/56777 . S2CID 48360420.
^ Хонда, Кохей; Ёсида, Нобуко; Карбоне, Марко (2008). «Типы многосторонних асинхронных сеансов». Труды 35-го ежегодного симпозиума ACM SIGPLAN-SIGACT по принципам языков программирования. стр. 273–284 . doi :10.1145/1328438.1328472. hdl :10044/1/26368. ISBN9781595936899. S2CID 53038488.
^ Ёсида, Нобуко; Гери, Лоренцо (2019). Очень деликатное введение в типы многосторонних сеансов . ICDCIT 2020. doi :10.1007/978-3-030-36987-3_5.
^ ab "Программирование сеансов в Scala". alcestes.github.io . Получено 2 ноября 2021 г. .
^ "STMonitor". chrisbartoloburlo.github.io . Получено 2 ноября 2021 г. .
^ Харви, Пол; Фаулер, Саймон; Дардха, Орнела; Гей, Саймон Дж. (2021). «Типы многосторонних сеансов для безопасной адаптации времени выполнения в языке акторов». 35-я Европейская конференция по объектно-ориентированному программированию (ECOOP 2021) . 194 : 10:1–10:30. doi : 10.4230/LIPIcs.ECOOP.2021.10 . S2CID 234681015.
^ Йесперсен, Томас Брахт Лауманн; Мунксгаард, Филип; Ларсен, Кен Фриис (30 августа 2015 г.). «Типы сессий для Rust». Материалы 11-го семинара ACM SIGPLAN по общему программированию . WGP 2015. Ассоциация вычислительной техники. стр. 13–22 . doi : 10.1145/2808098.2808100. ISBN9781450338103. S2CID 18320631.
^ Кокке, Вэнь (12 сентября 2019 г.). «Rusty Variation: Deadlock-free Sessions with Failure in Rust». Electronic Proceedings in Theoretical Computer Science . 304 : 48– 60. arXiv : 1909.05970 . doi : 10.4204/EPTCS.304.4. ISSN 2075-2180. S2CID 198166990.
^ Ёсида, Нобуко; Нейкова, Румяна (29 марта 2017 г.). «Акторы многопартийного сеанса». Логические методы в информатике . 13 (1). doi :10.23638/LMCS-13(1:17)2017. S2CID 65240382.
^ Фаулер, Саймон (10 августа 2016 г.). «Реализация многопартийных сеансовых актеров на языке Erlang». Электронные труды по теоретической информатике . 223 : 36–50 . arXiv : 1608.03321 . doi :10.4204/EPTCS.223.3. ISSN 2075-2180. S2CID 418549.
^ Имаи, Кейго; Ёсида, Нобуко; Юэн, Сёдзи (март 2019 г.). «Session-ocaml: библиотека на основе сеансов с полярностями и линзами». Science of Computer Programming . 172 : 135–159 . doi : 10.1016/j.scico.2018.08.005 . hdl : 10044/1/63748 . ISSN 0167-6423. S2CID 69673075.
^ Имаи, Кейго. "Session OCaml". www.ct.info.gifu-u.ac.jp . Получено 2 ноября 2021 г. .
^ Кокке, Вэнь; Дардха, Орнела (26 марта 2021 г.). «Типы сеансов без взаимоблокировок в линейном Haskell». arXiv : 2103.14481 [cs.PL].
^ Баккиани, Лоренцо; Браветти, Марио; Джунти, Марко; Мота, Жуан; Равара, Антониу (2022). «Проверка состояния типов Java, поддерживающая наследование». наук. Вычислить. Программа . 221 : 102844. doi : 10.1016/j.scico.2022.102844 . hdl : 10362/145315 . S2CID 250940803.
^ Мота, Жуан; Джунти, Марко; Равара, Антониу (2021). «Проверка состояния типов Java». Материалы КООРДИНАЦИИ 2021 . Конспекты лекций по информатике. Том. 12717. С. 121–133 . doi :10.1007/978-3-030-78142-2_8. ISBN978-3-030-78141-5. S2CID 235383301.
^ Рубичини, Алессио; Падовани, Лука (2023). «Swift Sessions: библиотечная реализация бинарных типов сеансов в Swift». GitHub .