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