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