Часто полезно иметь информацию, которая является общей для нескольких потоков или живых циклов. Например, тебе может понадобиться сделать общими значение текущей тональности, BMP или даже более отвлеченные понятия такие как текущая ‘сложность’ (которая может быть интерпретирована по-разному в разных потоках). Мы также не хотим при этом потерять имеющуюся у нас гарантию определенности. Другими словами, мы все еще хотели бы иметь возможность делиться кодом с другими и точно знать, что они услышат, когда запустят его. В конце Раздела 5.6 этого руководства мы кратко обсудили, почему мы не должны использовать переменные для обмена информацией между потоками чтобы не потерять фактор детерминизма (из-за гонки состояний).
Sonic Pi решает проблему доступности работы с глобальными переменными детерминистским способом через новаторскую систему, названную Time State (Состояние времени). Это может звучать сложно и трудно (и на самом деле, в Великобритании программирование с несколькими потоками и разделяемой памятью, как правило, является предметом университетского уровня). Однако, как вы увидите, что так же, как и сыграть вашу первую ноту, Sonic PI сделает обмен состоянием между потоками невероятно простым, в то же время сохраняя ваш код потоко-безопасными и детерминированными.
Встречайте get
и set
…