Имитация побочных эффектов с потоками - PullRequest
3 голосов
/ 10 июля 2010

Я смотрел это выступление на 9 канале, и через 60 минут было сделано очень интересное заявление.

Он сказал, что даже с совершенно чистыми функциями, когда вы представляете потоки, выможет имитировать побочные эффекты.

То, как он обрисовал это, было с помощью нотации C-omega, с которой я не знаком, и для этого уже имеется соответствующая языковая поддержка.

у меня проблема в том, как реализовать обработчики сообщений get и set без присваиваний?Конечно, обработчики должны будут изменить значение, чтобы внутренний цикл потока мог записать новое значение?

Чего мне не хватает?Как мне реализовать это, например, в LISP, который не имеет специальных конструкций?

1 Ответ

6 голосов
/ 11 июля 2010

У меня проблема в том, как реализовать обработчики сообщений get и set без назначений? Конечно, обработчики должны будут изменить значение, чтобы внутренний цикл потока мог записать новое значение?

Да, вы правы. Эрик предполагает, что у каждого потока есть собственная очередь сообщений. Отправка сообщения с помощью Value(n) явно меняет состояние очереди сообщений. Он заставляет это звучать более загадочно, чем на самом деле: он просто обменивает задания на другую форму изменчивого состояния. Он использует особенность языка «предварительное условие», чтобы сделать его синтаксически чистым.

Как он говорит, вы можете использовать обычный IO (он упоминает консольный IO), чтобы сделать то же самое. Представьте, что Value(n) записывает n в файл, а предварительное условие Value(T t) проверяет, является ли текущее значение состояния t (в файле). Вуаля, изменяемое состояние без присваиваний (но теперь задействован IO!).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...