|
@@ -0,0 +1,24 @@
|
|
|
+---
|
|
|
+layout: post
|
|
|
+---
|
|
|
+
|
|
|
+Многие решения касаемо синтаксиса взяты из LEAF. Минимум разделителей, прямые заимствования из Оберона.
|
|
|
+
|
|
|
+Агентные системы тоже уже много где описаны.
|
|
|
+В данном случае агенту соответствует одна программная единица - модуль. Модуль может содержать набор переменных и правила вычисления их значений (инструкции).
|
|
|
+
|
|
|
+Так как язык декларативный, инструкций существует ровно одна - присвоение. При этом присвоение каждой переменной может быть выполнено лишь один раз. Неважен и порядок следования присвоений, так как предполагается, что они будут выполнены по сути одновременно.
|
|
|
+
|
|
|
+При этом, конечно, на реальных машинах будет задействована блокировка чтения значений из переменных до момента записи вычисленных значений, однако в работе с LOMO не стоит учитывать на этот факт, так как нарушается абстракция.
|
|
|
+
|
|
|
+При таком подходе иначе выглядит модульность. Модули всё так же представляют клиентам переменные для чтения и записи, но при этом все модули исполняются параллельно, а для клиентов модули представлены как экземпляры объектов, хранящиеся в переменных. Работа всех модулей начинается одновременно, и здесь действует то же правило доступа к переменным, что и внутри одного модуля, чтение значения возможно только после записи.
|
|
|
+
|
|
|
+Таким образом реализуется принцип *передачи сообщений* между агентами. В явном виде описывать передачу сообщений нет смысла, присвоение значения конкретной переменной конкретного модуля и есть передача сообщения. Такой способ также способствует унификации инструкций - передача вовне и локальное присвоение становятся единой инструкцией.
|
|
|
+
|
|
|
+При этом существенно разделяют переменные только для чтения и переменные только для записи.
|
|
|
+
|
|
|
+Таким образом реализуется *восприятие* и *активность* агента. Агент воспринимает входящие значения и порождает новых агентов и исходящие сообщения.
|
|
|
+
|
|
|
+Отдельным видом переменных является регистр. Если обычные переменные возникают при старте агента и пропадают при его исчезновении, то регистры способны запомнить информацию между циклами жизни агента. При этом принцип единственного присвоения распространяется и на регистры. А так же значение, присвоенное регистру станет доступно для чтения только в следующей жизненном цикле агента.
|
|
|
+
|
|
|
+Таким образом реализуется внутреннее состояние агента/системы агентов.
|