|
@@ -1,46 +1,43 @@
|
|
---
|
|
---
|
|
published: true
|
|
published: true
|
|
---
|
|
---
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
|
|
+
|
|
## Изучая Lola
|
|
## Изучая Lola
|
|
|
|
|
|
Поизучал описание языка [Lola](http://www.inf.ethz.ch/personal/wirth/Lola/index.html), в итоге понял, что MODULE это такая радиодеталь с ножками, вход/выход, внутренние преобразования по заданным функциям, вот это всё.
|
|
Поизучал описание языка [Lola](http://www.inf.ethz.ch/personal/wirth/Lola/index.html), в итоге понял, что MODULE это такая радиодеталь с ножками, вход/выход, внутренние преобразования по заданным функциям, вот это всё.
|
|
Подумал над применением в программировании акторов или агентов, ведь агент это та же радиодеталь, датчики как входы, манипуляторы, как выходы. На программном урове, это всё, конечно, укладывается в понятия направленного канала сообщений и сообщения. Сообщением в LEAF можно сделать любой тип данных, передавать можно значения, или даже указатели, если они будут защищены от записи.
|
|
Подумал над применением в программировании акторов или агентов, ведь агент это та же радиодеталь, датчики как входы, манипуляторы, как выходы. На программном урове, это всё, конечно, укладывается в понятия направленного канала сообщений и сообщения. Сообщением в LEAF можно сделать любой тип данных, передавать можно значения, или даже указатели, если они будут защищены от записи.
|
|
|
|
|
|
Придумалось тут:
|
|
Придумалось тут:
|
|
-```oberon
|
|
|
|
-UNIT Fib
|
|
|
|
- VAR res+, n- INTEGER
|
|
|
|
- VAR f Fib
|
|
|
|
-PROCESS
|
|
|
|
- f.n <- n - 1
|
|
|
|
- res <- IF n # 0 THEN n + f.res ELSE 1 END
|
|
|
|
-END Fib
|
|
|
|
-
|
|
|
|
-UNIT Fact
|
|
|
|
- VAR res+, n- INTEGER
|
|
|
|
- REG x INTEGER
|
|
|
|
-INIT
|
|
|
|
- x <- 1
|
|
|
|
-PROCESS
|
|
|
|
- res <- IF n = 0 THEN x END
|
|
|
|
- x <- IF n # 0 THEN x*n ELSE 1 END
|
|
|
|
- n <- IF n # 0 THEN n - 1 END
|
|
|
|
-END Fact
|
|
|
|
|
|
|
|
-UNIT Top
|
|
|
|
- REG x, y INTEGER
|
|
|
|
- VAR fi Fib
|
|
|
|
- VAR fa Fact
|
|
|
|
-PROCESS
|
|
|
|
- fi.n <- 10
|
|
|
|
- x <- IF x = 0 THEN fi.res END
|
|
|
|
- fa.n <- 10
|
|
|
|
- y <- IF y = 0 THEN fa.res END
|
|
|
|
-END Top
|
|
|
|
-```
|
|
|
|
|
|
+ UNIT Fib
|
|
|
|
+ VAR res+, n- INTEGER
|
|
|
|
+ VAR f Fib
|
|
|
|
+ PROCESS
|
|
|
|
+ f.n <- n - 1
|
|
|
|
+ res <- IF n # 0 THEN n + f.res ELSE 1 END
|
|
|
|
+ END Fib
|
|
|
|
+
|
|
|
|
+ UNIT Fact
|
|
|
|
+ VAR res+, n- INTEGER
|
|
|
|
+ REG x INTEGER
|
|
|
|
+ INIT
|
|
|
|
+ x <- 1
|
|
|
|
+ PROCESS
|
|
|
|
+ res <- IF n = 0 THEN x END
|
|
|
|
+ x <- IF n # 0 THEN x*n ELSE 1 END
|
|
|
|
+ n <- IF n # 0 THEN n - 1 END
|
|
|
|
+ END Fact
|
|
|
|
+
|
|
|
|
+ UNIT Top
|
|
|
|
+ REG x, y INTEGER
|
|
|
|
+ VAR fi Fib
|
|
|
|
+ VAR fa Fact
|
|
|
|
+ PROCESS
|
|
|
|
+ fi.n <- 10
|
|
|
|
+ x <- IF x = 0 THEN fi.res END
|
|
|
|
+ fa.n <- 10
|
|
|
|
+ y <- IF y = 0 THEN fa.res END
|
|
|
|
+ END Top
|
|
|
|
|
|
В целом, как и в Lola, есть только инструкция присваивания. Точнее даже не присваивания, а ожидания. Вся активность модулей определяется итерациями инструкций внутри секции PROCESS. Формально, это статичное описание состояния, а не итерации, но исполнять иначе не получится. По завершению первой итерации модуль `Top` ожидает от `Fib` и `Fact` сообщений из выходного канала `res`, так как условие `x = 0` истинно.
|
|
В целом, как и в Lola, есть только инструкция присваивания. Точнее даже не присваивания, а ожидания. Вся активность модулей определяется итерациями инструкций внутри секции PROCESS. Формально, это статичное описание состояния, а не итерации, но исполнять иначе не получится. По завершению первой итерации модуль `Top` ожидает от `Fib` и `Fact` сообщений из выходного канала `res`, так как условие `x = 0` истинно.
|
|
Наверное, так устроены все декларативные языки.
|
|
Наверное, так устроены все декларативные языки.
|