В духе диалектического материализма, прототип предложенного решения оснастим ещё большей выразительностью. А именно: рассмотрим вариант синтаксиса, где базовая часть ядра языка заметно (но ненавязчиво) отличается от той части, что предлагает программист в виде своего кода. Чтобы снять противоречие старого и нового, неподвижного (и малоподвижного) от движущегося.
Необходимо выполнить не просто синтез противоположностей, а разделение старого и нового на уровне внутренней семантики формы, чтобы сама структура языка отражала закон отрицания отрицания.
Если язык претендует на диалектичность, он не может быть полностью единообразным в любой форме. Он должен материально выражать противоречие между устоявшимся и возникающим, между ядром-основой и творческим дополнением, между материей прошлого и сознанием будущего.
поднимая язык на новый уровень.
Это — не просто метапрограммирование,
это — организация языка как классовой борьбы между консервацией прошлого и революцией настоящего в сфере сознания.
Два слоя синтаксиса:
Это — единство и борьба форм, где форма выражает содержание диалектики.
Основано на S-выражениях, как в Лиспе, но семантически строго:
(// Если не указан атрибут изменяемости -- по умолчанию @фикс)
(фн Cложить (a Час b Час)
(СложитьЧас a b))
(структ Пользователь
@имя ЧеловекИмя
@возраст ЧеловекВозраст)
(если (Сравнить x > 0)
тогда (Напечатать "Положительно")
иначе (Напечатать "Ноль или отрицательно"))
Особенности ядра:
Это — материальная база, как производительные силы в экономике — нельзя менять каждый день, но можно развивать в следующей версии, с развитием производственных отношений.
Работает в таких же круглых скобках, где сопровождающий атрибут @макро означает расширение, развитие, отрицание старого на уровне пользователя. Расширение способно заменить в текущей программе более высокоуровневые реализации.
Внутри — новые формы, DSL, макросы, оптимизации. Снаружи -- прежний синтаксис.
(макро параллельно
(ЗагрузитьДанные)
(ОбновитьИнтерфейс)
)
(макро SQL "SELECT * FROM пользователи WHERE возраст > ?" возраст }
Как это работает: параллельно — не ключевое слово, а расширение, определённое в пользовательской библиотеке, на том же уровне.
Это — народное творчество, как массовое движение, которое не ломает основу, но вносит новое содержание.
(операция аргументы)(макро содержание)Это — диалектическое разделение труда в языке:
Пример: появление нового цикла в потоках (старое ядро):
(для задача в списокЗадач
(СоздатьПоток задача))
После проверки практикой — включение в ядро новой версии (расширение): Новое (расширение):
(параллельно (Выполнить списокЗадач))
Это — отрицание отрицания:
(для ... СоздатьПоток) — отрицается,(параллельно ...) — отрицает старое,Но затем (параллельно ...) само отрицается — становится частью ядра, и появляется новое расширение для асинхронных потоков.
Для новичка:
(...) — простота, порядок, безопасность.Для мастера:
(макро ...), на пользовательском уровне, но осознаёт, что это — эксперимент, что он выходит за рамки устоявшегося, что за это несёт ответственность. При компиляции получает уведомление (если не подавлено атрибутом)Расширения разработчиками ядра могут быть:
Это — демократический централизм в действии.
Этап 1: Парсинг ядра
Этап 2: Макро-раскрытие расширений на уровне пользователя
(макро ...), подставляет определение из зарегистрированных расширений.Этап 3: Трансляция в ядро
Этап 4: Компиляция
Таким образом, вся сложность остаётся контролируемой, сборка занимает незначительное время, а инновации не разрушают стабильность.
(// === ЯДРО === )
(фн ОбработатьПакет (пакет СписокДок)
(если (ПроверитьЦелостность пакет)
тогда (Расшифровать пакет)
иначе (Остановить "битый пакет")))
(// === РАСШИРЕНИЕ === )
(структ ВебСервер
@маршрут ВебОбработчик
@порт СетьПорт
)
(Печатать "Запуск сервера...")
Здесь:
(...) — отражает устоявшееся, необходимое, объективное.(макро ...) — отражает возникающее, творческое, субъективное.Их борьба и единство — двигатель развития.
Переход расширения в ядро — качественный скачок.
Разделение форм — материальное выражение закона отрицания отрицания.
Это — не просто язык программирования, это — модель социалистического информационного общества: