# Диалектика развития языка

В духе диалектического материализма, прототип предложенного решения оснастим ещё большей выразительностью. А именно: рассмотрим вариант синтаксиса, где базовая часть ядра языка заметно (но ненавязчиво) отличается от той части, что предлагает программист в виде своего кода. Чтобы снять противоречие старого и нового, неподвижного (и малоподвижного) от движущегося.

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

## Единообразие внешней формы и разделение по внутренней форме

Если язык претендует на диалектичность, он не может быть полностью единообразным в любой форме. Он должен материально выражать противоречие между устоявшимся и возникающим, между ядром-основой и творческим дополнением, между материей прошлого и сознанием будущего.

### Диалектический принцип

- Ядро языка — неподвижно (в пределах версии), но совместимо (в пределах всех версий)
- Расширение — подвижно,
- Но движущееся порождается из неподвижного, отрицает его,
- И в своём развитии — отрицает отрицание,

поднимая язык на новый уровень.

Это — не просто метапрограммирование,

это — организация языка как классовой борьбы между консервацией прошлого и революцией настоящего в сфере сознания.

## Новый проект: prolet с разделённой формой существующего и нового

Два слоя синтаксиса:

### Ядро (Базис)

- Устойчивая основа: типы, управление, память, вызовы
- Последовательная разработка ядра на основе реальных потребностей
- Объективный подход ко всем аспектам языка

### Расширение (Творчество)

- Развитие: новые парадигмы, DSL, оптимизации, замена частей ядра
- Частные расширения синтаксиса но основе текущих потребностей
- Субъективная инициатива

Это — единство и борьба форм,
где форма выражает содержание диалектики.

## Ядро: стабильное, проверенное, материалистическое

Основано на S-выражениях, как в Лиспе, но семантически строго:

```lisp
(фн сложить (a b)
    (+ a b))

(структ Пользователь
    @имя: Строка
    @возраст: Целое)

(если (x > 0)
  тогда (напечатать "Положительно")
  иначе (напечатать "Ноль или отрицательно"))
```

Особенности ядра:

- Неизменно в рамках версии 1.x.
- Компилируется во внутреннее представление напрямую.
- Не может быть переопределено, но может быть перекрыто частным определением.
- Создаётся централизованно на основе теории и практики.

Это — материальная база, как производительные силы в экономике — нельзя менять каждый день,
но можно развивать в следующей версии, с развитием производственных отношений.

## Расширение: творческое, подвижное, диалектическое

Работает в таких же круглых скобках, где сопровождающий атрибут `@макро` означает расширение, развитие, отрицание старого на уровне пользователя. Расширение способно заменить в текущей программе более высокоуровневые реализации.

Внутри — новые формы, DSL, макросы, оптимизации. Снаружи -- прежний синтаксис.

```lisp
(@макро параллельно
  (загрузить-данные)
  (обновить-интерфейс)
)

(@макро SQL "SELECT * FROM пользователи WHERE возраст > ?" возраст }
```

Как это работает: `параллельно` — не ключевое слово, а расширение, определённое в пользовательской библиотеке, на том же уровне.

Это — народное творчество, как массовое движение, которое не ломает основу, но вносит новое содержание.

## Разделение форм: философская и практическая необходимость

### Формы ядра

- Форма: `(операция аргументы)`
- Изменяемость: Запрещена в версии
- Компиляция: На этапе 1
- Авторство: разработчики ядра
- Ответственность: Гарантирована
- Жизненный цикл: Долгий (версии 1.0, 2.0)

### Формы пользователя

- Форма: `(@макро содержание)`
- Изменяемость: Разрешена, по согласованию
- Компиляция: На этапе 2 (после ядра)
- Авторство: Сообщество, отдельные разработчики
- Ответственность: На авторе расширения
- Жизненный цикл: Краткий (пробный, экспериментальный))

Это — диалектическое разделение труда в языке:

- Ядро — закон,
- Расширение — инициатива,
- Их единство — развитие.

## Переход от старого к новому: процесс отрицания

Пример: появление нового цикла в потоках (старое ядро):

```list
(для задача в список-задач
    (выполнить задача))
```

После проверки практикой — включение в ядро новой версии (расширение):
Новое (расширение):

```list
(в-потоках список-задач)
```

Это — отрицание отрицания:

- Старое `(для ... создать-поток)` — отрицается,
- Новое `(в-потоках ...)` — отрицает старое,

Но затем `(в-потоках ...)` само отрицается — становится частью ядра, и появляется новое расширение для асинхронных потоков.

## Психологическая и педагогическая выгода

Для новичка:

- Видит только `(...)` — простота, порядок, безопасность.
- Расширения скрыты или отключены.

Для мастера:

- Может писать `(@макро ...)`, на пользовательском уровне, но осознаёт, что это — эксперимент, что он выходит за рамки устоявшегося, что за это несёт ответственность. При компиляции получает уведомление (если не подавлено атрибутом)

Расширения разработчиками ядра могут быть:

- Одобрены,
- Отклонены,
- Включены в следующую версию ядра.

Это — демократический централизм в действии.

## Реализация на уровне компилятора

Этап 1: Парсинг ядра

- Обрабатывает только системные библиотеки, строит **AST**.
- выполняет предварительную компиляцию ядра (однократно)

Этап 2: Макро-раскрытие расширений на уровне пользователя

- Находит `(@макро ...)`, подставляет определение из зарегистрированных расширений.

Этап 3: Трансляция в ядро

- Все пользовательские макросы интегрируются в ядро.

Этап 4: Компиляция

- только изменившийся код.
- сборка готовых модулей.

Таким образом, вся сложность остаётся контролируемой, сборка занимает незначительное время, а инновации не разрушают стабильность.

## Пример полного кода

```lisp
(// === ЯДРО === )
(фн обработать-пакет (пакет)
    (если (проверить-целостность пакет)
        тогда (расшифровать пакет)
        иначе (ошибка "битый пакет")))

(// === РАСШИРЕНИЕ === )
(HTTP-сервер
  @маршрут: ("/api/данные" обработать-пакет)
  @порт: 8080
)

(лог "Запуск сервера...")
```

Здесь:

- (фн ...) — ядро, стабильно,
- (HTTP-сервер ...) — использование результатов творчества, может измениться,
- (лог ...) — может быть переопределён под нужды среды, вместо реализации ядра

## Заключение: язык как диалектическая система

- Форма ядра `( )` — отражает устоявшееся, необходимое, объективное.
- Форма расширения — `(@макро ...)` — отражает возникающее, творческое, субъективное.

Их борьба и единство — двигатель развития.

Переход расширения в ядро — качественный скачок.

Разделение форм — материальное выражение закона отрицания отрицания.

Это — не просто язык программирования, это — модель социалистического информационного общества:

- стабильный базис,
- свободное изменение по необходимости,
- и путь от частного к общему через практику.
