prolet-007.md 12 KB

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

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

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

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

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

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

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

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

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

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

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

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

Ядро (Базис)

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

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

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

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

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

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

(// Если не указан атрибут изменяемости -- по умолчанию @фикс)
(фн Cложить (a Час b Час)
    (СложитьЧас a b))

(структ Пользователь
    @имя ЧеловекИмя
    @возраст ЧеловекВозраст)

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

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

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

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

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

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

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

(макро параллельно
  (ЗагрузитьДанные)
  (ОбновитьИнтерфейс)
)

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

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

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

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

Формы ядра

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

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

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

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

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

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

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

(для задача в списокЗадач
    (СоздатьПоток задача))

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

(параллельно (Выполнить списокЗадач))

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

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

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

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

Для новичка:

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

Для мастера:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

(// === РАСШИРЕНИЕ === )
(структ ВебСервер
  @маршрут ВебОбработчик
  @порт    СетьПорт
)

(Печатать "Запуск сервера...")

Здесь:

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

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

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

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

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

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

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

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