prolet-dialect-up.md 12 KB

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

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

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

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

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

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

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

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

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

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

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

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

Ядро (Базис)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Формы ядра

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Для новичка:

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

Для мастера:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Здесь:

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

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

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

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

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

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

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

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