Работа Кипит
При работе над компилятором LOMO проявляются тонкие моменты, которые не были очевидны на бумаге.
Например, регистру присваивают значение и в следующей инструкции используют в качестве значения в выражении. Какое значение регистра должно быть использовано?
UNIT Top
REG x INTEGER
VAR z INTEGER
PROCESS
x := x = 0 ? 1 :: x = 1 ? 2 :: 0
z := x
END Top
При последовательном исполнении должно быть использовано обновленное значение. Но при параллельном исполнении такое поведение приведет к неявной ошибке, если вдруг инструкция чтения выполнится раньше инструкции записи. Поэтому регистр получает обновленное значение, которое будет доступно только в следующем такте. Проблема в том, что последовательная запись инструкций присваивания может сбить с толку.
Такие вот тонкие моменты.