Spin Lang
  • Демонстрация
  • Документация
  • Манифест

Spin Lang — субъектно-ориентированный язык программирования

Spin Lang — субъектно-ориентированный, декларативный, реактивный язык программирования. Spin позволяет описывать приложения в виде иерархии взаимозависимых субъектов.

Субъектом называется список свойств, разделённых оператором ; (точка с запятой). Значения свойств определяется константой или формулой, никакой код извне не может на это повлиять, что исключает многие проблемы безопасности на уровне синтаксиса и упрощает отладку.

Все Spin-структуры данных вложены в абстрактный корневой сетевой субъект иерархии, что позволяет описывать приложение, как часть глобального графа взаимозависимых данных.

Синтаксис

Данные могут быть описаны в виде числа, текста, формулы, субъекта. Формулы описываются арифметическими операциями над данными. В Spin операторы не имеют приоритетов и вычисляются слева направо. Порядок вычислений можно явно указывать через выделение подвыражений в отдельный контекст скобками {}, (), []

Формула 2 + 2 * 2 вычислится, как 8
Результатом 2 + (2 * 2) будет 6.

Комментарии

  • "..." любые символы, заключенные в двойные кавычки - комментарий кода для разработчика, комментарии игнорируются при интерпретации.

Операторы:

~
Приведение типа
+
Добавление
-
Исключение
*
Повторение
/
Разделение
%
Остаток разделения
^
Возведение
#
Извлечение
&
И
|
ИЛИ
=
Сравнение
Если между явно разными операндами оператор отсутствует, применяется оператор по умолчанию - присваивание.

Типы данных

  • 0-9 цифровые символы позволяют описать числа в десятичном представлении
  • '...' любые символы, заключенные в одинарные кавычки, позволяют описать текст, если текст должен содержать символ одинарной кавычки, её экранируют дублированием
  • Все остальные символы допустимо использовать для описания текста без кавычек, но этот способ рекомендуется использовать только для алфавитных символов, так как другие могут в быть включены в синтаксис с развитием языка, как операторы.
  • Вычислимые значения описываются фломулами, аналогичными арифметическим, но операндами могут выступать любые типы, не только числа.
  • Структурный оператор ; позволяет описать субъект - сущность, объединяющая множество свойств. Если свойством субъекта описывается формулой, начинающейся с оператора, то в качестве первого операнда по умолчанию выступит сам субъект.

Циклические зависимости

Синтаксис позволяет описывать произвольные формулы зависимости, в том числе взаимные.

{
x{/y};
y{/x};
}

Такие и более сложные циклические ссылки не будут вызывать бесконечное обновление значений, распространение изменений ограничивается только одним проходом. Таким образом значение формулы не может быть пересчитано больше одного раза за одно изменение зависимого операнда. В примере, при изменении x будет выполнен пересчёт y, так как он зависим, но хотя x в свою очередь зависим от y, пересчёт выполнен не будет, так как он уже изменился в течении распространения оригинального изменения (в данном случае x - сам источник оригинального изменения).

Для программистов

Исходный код Spin Lang не позволяет описывать последовательность процедур, функции, циклы, условия - никакого исполняемого кода, вместо этого он ориентируется на данные. Смена парадигмы позволяет описать связанные данные более естественно. Вместо составления логики реагирования на изменения и пошаговых инструкций машине описываются формулы взаимодействия элементов системы, по аналогии с законами физики.

Схема взаимодействия субъектов в Spin Lang
©2026 spinlang.net spinlang.net@gmail.com