Почему реализации CSP охватывают только каналы?
В книге о взаимодействии последовательных процессов много времени уделяется определению событий, которые не имеют направления и могут включать несколько независимых процессов.
Только в главе 4 представлены каналы, которые направлены и включают 2 процесса.
Все же все реализации CSP, включая occam, Go, LuaCSP и clojure.core.async, реализуют только каналы.
Хотя большинство практических проблем можно решить с помощью (вещательных) каналов, я удивляюсь, почему книга тратит на них так много времени, пока их никто не использует.
2 ответа
В Occam-pi барьеры являются важным дополнением к каналам. При наличии барьера каждый зарегистрированный процесс ожидает на барьере, пока все они не сделали этого. На данный момент они все освобождены. Это пример неканальной формы события CSP.
Occam-pi также имеет расширенное рандеву с использованием каналов. Это совершенно другая схема использования каналов, очень похожая на рандеву в Аде.
Ну, прежде всего, книга произошла до реализации. Поэтому ваш вопрос лучше сформулировать так:
Почему ни одна из реализаций CSP не уделяет серьезного внимания событиям, хотя в книге они особо подчеркиваются.
По сути, превращение событий в первоклассного гражданина языка придает ему определенную специфику использования, которая, вероятно, будет слишком узкой для языка программирования общего назначения.
Кроме того, вы можете легко реализовывать события на каналах (и других конструкциях), если вы занимаетесь программированием на основе событий.