# pro.02_80 Контексты вычислений

Ранее контексты встречались в примерах кода **prolet**: **макросы**, **функции**, спецификации и процессы. Теперь контексты будут обозначены явно, как тип вычислительных групп.

> 💡 В `prolet` больше нет «меток» или «аннотаций», висящих в воздухе.
Есть **контекст** — **материальная и логическая среда**, в которой возможны определённые **действия**.

## Почему «контекст» — правильное понятие

1. **Философски**
   Контекст — это **условие возможности действия**.
   Без контекста нет смысла, нет метода, нет преобразования.
   Это **материалистическая категория**: действие невозможно вне условий его осуществления.
2. **Практически**
   Когда программист пишет:

   ```prolet
   (Пользователь СтатусОбновить "онлайн")
   ```

   — программист не просто «применяет действие к атому», а **входит в контекст** `Пользователь`, где определены действия:

   - `СтатусОбновить`,
   - `Сохранить`,
   - `Удалить` и т.д.

   Вне этого контекста — эти действия **недопустимы**.
3. **Архитектурно**
   - Компилятор может **ограничить доступные действия** строго по текущему контексту,
   - **IDE** — показывать только валидные методы,
   - Безопасность — запрещать вызовы, не принадлежащие контексту.
4. **Отказ от идеализма «универсальных функций»**
   В `prolet` нет «голых функций», применимых везде.
   Есть **действия, привязанные к контексту** — как в реальном мире:
   - «писать» — в контексте атома «автор»,
   - «лечить» — в контексте атома «врач»,
   - «шифровать» — в контексте «Ключ» или «Сообщение».

## Примеры

```prolet
(Сообщение Шифровать ключ)
(Ключ Применить сообщение)
(БазаДанных Сохранить запись)
(Запись Удалить номер)
```

Здесь:

- `Сообщение` — не атом, а **контекст, в котором возможно действие** `Шифровать`,
- `Ключ` — **контекст, в котором можно** `Применить` что-то,
- попытка написать `(Ключ Шифровать ...)` — **ошибка**, потому что действие `Шифровать` не принадлежит контексту `Ключ`.

---

### Связь с @`рез`

Когда программист пишет:

```prolet
(СоздатьПользователя "Алексей")
(Пользователь СтатусОбновить @рез "онлайн")
```

— первое выражение даёт  `@рез` типа `Пользователь`,
— второе выражение **входит в контекст** `Пользователь`,
— и только в этом контексте разрешено действие `СтатусОбновить`.

Это — **естественная цепочка: результат → контекст → действие**.

## Вывод

В **prolet** не существует технократического «тип», есть **философски и практически насыщенное** понятие **«контекст»**.

`prolet` — это не язык с аннотациями, а **язык практики**, где:

> 💡 Каждое действие возможно только в своём контексте,
и контекст определяется материей, а не формой.

Это соответствует духу диалектического материализма и делает язык **ориентированным не на объекты, а на условия их преобразования**.

**prolet** поддерживает абстракции, но как **инструмент** освобождает от абстрактного мышления, которое не происходит из практики.
