|
|
@@ -0,0 +1,277 @@
|
|
|
+# Диалектическое развитие S-выражений
|
|
|
+
|
|
|
+Как было отмечено ранее, синтаксис предлагаемый с опорой на `Си` / `Rust` не поддерживает (сопротивляется) развитию семантических форм языка. Слишком много форм представления алгоритмов и структур.
|
|
|
+
|
|
|
+Более узкие семантические формы в духе S-выражений (ближе по сути к Лисп), позволяют создавать на единой базе S-выражений предсказуемые по форме выражения, но c широкой по содержанию семантикой.
|
|
|
+
|
|
|
+## Как совместить гибкость и простоту Лиспа с материалистической строгостью и безопасностью, не падая в хаос идеализма?
|
|
|
+
|
|
|
+`Rust` , как мы уже отметили, — это победа формы над мыслью в угоду безопасности.
|
|
|
+
|
|
|
+`Lisp` — победа мысли над формой, но в ущерб практике и педагогике.
|
|
|
+
|
|
|
+`Pascal` -- при хороших педагогических свойствах не обеспечивает требование развития языка.
|
|
|
+
|
|
|
+Нам же нужен синтез:
|
|
|
+
|
|
|
+-- Минимализм `Lisp` в синтаксисе,
|
|
|
+-- Материализм диалектики в семантике,
|
|
|
+-- Педагогика в структуре,
|
|
|
+-- Развитие — в самом языке.
|
|
|
+
|
|
|
+### Новый путь: `prolet` как диалектический минимализм
|
|
|
+
|
|
|
+Основной принцип:
|
|
|
+
|
|
|
+* Один синтаксис — множество смыслов.
|
|
|
+* Форма — минимальна,
|
|
|
+* Семантика — управляема контекстом,
|
|
|
+* Развитие — через метаязык.
|
|
|
+
|
|
|
+Это — не возврат к `Lisp` , а его диалектическое преодоление:
|
|
|
+
|
|
|
+* мы берём гомоиконичность (взаимность представления кода и данных)
|
|
|
+* макросы,
|
|
|
+
|
|
|
+но встраиваем их в рамки объективной реальности — памяти, времени, безопасности, готовности программиста.
|
|
|
+
|
|
|
+## Единая синтаксическая форма: S-выражения с семантической дисциплиной
|
|
|
+
|
|
|
+Вместо множества форм ( `struct` , `enum` , `fn` , `unsafe` , `impl` , `where` и т.д.) — одна базовая конструкция:
|
|
|
+
|
|
|
+```lisp
|
|
|
+(операция аргументы*)
|
|
|
+```
|
|
|
+
|
|
|
+**Но!** Семантика определяется _не формой_, а _контекстом_ и _метаинформацией_.
|
|
|
+
|
|
|
+Примеры:
|
|
|
+Функция (высокий уровень)
|
|
|
+
|
|
|
+```list
|
|
|
+(фн обработать (данные)
|
|
|
+ (фильтр данные (> 10) (* 2))
|
|
|
+)
|
|
|
+```
|
|
|
+
|
|
|
+Низкоуровневая операция
|
|
|
+
|
|
|
+```lisp
|
|
|
+(фн @система копировать (ист: сис.Адрес, цель: сис.Адрес, размер: Целое)
|
|
|
+ (асм "rep movsb"))
|
|
|
+```
|
|
|
+
|
|
|
+### Структура данных
|
|
|
+
|
|
|
+```lisp
|
|
|
+(структ Пользователь
|
|
|
+ имя: Строка,
|
|
|
+ возраст: Целое,
|
|
|
+ роль: Выбор (Админ, Пользователь, Гость)
|
|
|
+)
|
|
|
+```
|
|
|
+
|
|
|
+Интерфейсный тип
|
|
|
+
|
|
|
+```lisp
|
|
|
+(тип ИФайл
|
|
|
+ (Читать (имя:Строка)(Рез.Байты) @док "Читает файл с указанным именем")
|
|
|
+ (Писать (имя: Строка, права:ос.Права)(Опт.Ош) @док "Записывает файл с указанным именем и правами")
|
|
|
+)
|
|
|
+```
|
|
|
+
|
|
|
+Все конструкции — одного синтаксического вида, но семантика управляется _тегом в начале_:
|
|
|
+
|
|
|
+* `фн` (функция),
|
|
|
+* `структ` (структура),
|
|
|
+* `система` (низкоуровневый),
|
|
|
+* `тип`.
|
|
|
+
|
|
|
+## Узкие семантические формы: от простого к сложному
|
|
|
+
|
|
|
+ `Мы не устраняем сложность, но последовательно её раскрываем.`
|
|
|
+
|
|
|
+### Уровень 1: Новичок
|
|
|
+
|
|
|
+Доступны только:
|
|
|
+
|
|
|
+* (фн ...)
|
|
|
+* (спис ...),
|
|
|
+* (словарь ...),
|
|
|
+* (если ...),
|
|
|
+* (для ...)
|
|
|
+
|
|
|
+Нет доступа к:
|
|
|
+
|
|
|
+* (@система),
|
|
|
+* (асм),
|
|
|
+* (макро).
|
|
|
+
|
|
|
+```lisp
|
|
|
+(фн привет (имя)
|
|
|
+ (печать "Привет, " имя "!"))
|
|
|
+```
|
|
|
+
|
|
|
+Простота Лиспа, но в безопасной оболочке диалектического языка.
|
|
|
+
|
|
|
+### Уровень 2: Стажёр
|
|
|
+
|
|
|
+Открываются:
|
|
|
+
|
|
|
+* (структ ...)
|
|
|
+* (тип ...)
|
|
|
+* (макрос ...)
|
|
|
+
|
|
|
+```lisp
|
|
|
+(структ Точка (
|
|
|
+ x: Целое,
|
|
|
+ y: Целое, ))
|
|
|
+
|
|
|
+(макрос когда (условие тело)
|
|
|
+ (выраж если условие (выполнить тело))
|
|
|
+)
|
|
|
+```
|
|
|
+
|
|
|
+Язык начинает развиваться, но в рамках контролируемой системы.
|
|
|
+
|
|
|
+## Уровень 3: Мастер
|
|
|
+
|
|
|
+Разрешён:
|
|
|
+
|
|
|
+* (@система ...)
|
|
|
+* (асм ...)
|
|
|
+* (система-вызов ...)
|
|
|
+* (указ ...)
|
|
|
+
|
|
|
+```lisp
|
|
|
+(фн @система копировать-память (цель источник длина)
|
|
|
+ (асм
|
|
|
+ "mov rcx, {длина}"
|
|
|
+ "rep movsb"))
|
|
|
+```
|
|
|
+
|
|
|
+**Но!** Такой код не компилируется без:
|
|
|
+
|
|
|
+* одобрения ревью,
|
|
|
+* ссылки на стандарт (например, "интерфейс драйвера PCI"),
|
|
|
+* пометки обоснования @причина "взаимодействие с железом".
|
|
|
+
|
|
|
+## Семантическая экономия: один синтаксис — разный смысл по контексту
|
|
|
+
|
|
|
+```lisp
|
|
|
+(спис 1 2 3)
|
|
|
+(структ Пользователь)
|
|
|
+(выраж ...)
|
|
|
+(тип Проверятор)
|
|
|
+(Список Цел 1 2 3)
|
|
|
+(перем посетитель (= Пользователь @имя: "Анна",
|
|
|
+ @возраст: 28,
|
|
|
+ @роль: Админ))
|
|
|
+(знач ...) или (= ...)
|
|
|
+(<имя_функции>)
|
|
|
+(тип_провер посетитель как ИФайл)
|
|
|
+```
|
|
|
+
|
|
|
+Это — диалектическая гибкость: форма одна, но смысл возникает в практике применения, а не в синтаксической избыточности.
|
|
|
+
|
|
|
+## Макросы как средство развития языка (по образцу Лиспа, но с контролем)
|
|
|
+
|
|
|
+Макросы — не анархия, а организованное развитие.
|
|
|
+
|
|
|
+```lisp
|
|
|
+(макрос конкур (тело...)
|
|
|
+ (поток (тело))
|
|
|
+ @док "Запускает конкурентно тело выражения")
|
|
|
+
|
|
|
+(конкур
|
|
|
+ (загрузить-данные)
|
|
|
+ (обновить-интерфейс))
|
|
|
+```
|
|
|
+
|
|
|
+Но:
|
|
|
+
|
|
|
+* Макросы только в модулях уровня 2+,
|
|
|
+* Должны быть задокументированы,
|
|
|
+* Не могут переопределять базовые формы (`если`, `функция` и т.п.).
|
|
|
+
|
|
|
+Это — революционное преобразование старой формы со свободным содержанием, в новую форму с дисциплиной смысла.
|
|
|
+
|
|
|
+## Сужение контекста перехода: как программист "спускается"
|
|
|
+
|
|
|
+Переход на низкий уровень — не синтаксическое волшебство, а сознательный акт:
|
|
|
+
|
|
|
+prolet
|
|
|
+
|
|
|
+```lisp
|
|
|
+(фн @система сложить-указатели (a:сис.Указ, b:сис.Указ)
|
|
|
+ @обоснование: "оптимизация критического участка"
|
|
|
+ @требует-ревью
|
|
|
+ @уровень-доступа: 3
|
|
|
+ (сложить (сис.Извлечь a) (сис.Извлечь b))
|
|
|
+)
|
|
|
+```
|
|
|
+
|
|
|
+Что даёт такая форма:
|
|
|
+
|
|
|
+* Семантически сужает контекст: только указатели, только арифметика.
|
|
|
+* Фиксирует ответственность: обоснование, ревью, уровень.
|
|
|
+* Экономит мыслетопливо: нет лишних слов, только суть.
|
|
|
+* Педагогически настраивает: программист осознаёт, что делает.
|
|
|
+
|
|
|
+## Сравнение подходов: почему это диалектичнее
|
|
|
+
|
|
|
+### Синтаксическая сложность
|
|
|
+
|
|
|
+* `Lisp` Очень низкая
|
|
|
+* `Rust` Высокая
|
|
|
+* `prolet` Очень низкая
|
|
|
+
|
|
|
+### Семантическая ясность
|
|
|
+
|
|
|
+* `Lisp` Низкая (всё — список)
|
|
|
+* `Rust` Высокая (много форм)
|
|
|
+* `prolet` Высокая (контекст + тег)
|
|
|
+
|
|
|
+### Гибкость
|
|
|
+
|
|
|
+* `Lisp` Деструктивно высокая
|
|
|
+* `Rust` Ограниченная
|
|
|
+* `prolet` Высокая (макросы + уровни)
|
|
|
+
|
|
|
+### Безопасность
|
|
|
+
|
|
|
+* `Lisp` Нет
|
|
|
+* `Rust` Высокая
|
|
|
+* `prolet` (по уровням, от минимальной до высокой)
|
|
|
+
|
|
|
+### Развитие языка
|
|
|
+
|
|
|
+* `Lisp` доступно индивидуально
|
|
|
+* `Rust` Через RFC
|
|
|
+* `prolet` Через макросы + одобрение сверху
|
|
|
+
|
|
|
+### Экономия мыслетоплива
|
|
|
+
|
|
|
+* `Lisp` Высокая для экспертов, низкая для новичков
|
|
|
+* `Rust` Низкая (много правил)
|
|
|
+* `prolet` Высокая (одна форма; много фиксированных смыслов в конкретном контексте)
|
|
|
+
|
|
|
+### Педагогичность
|
|
|
+
|
|
|
+* `Lisp` Низкая
|
|
|
+* `Rust` Недостаточная
|
|
|
+* `prolet` Высокая (постепенное раскрытие)
|
|
|
+
|
|
|
+## Заключение: язык как диалектический инструмент
|
|
|
+
|
|
|
+Приведённый синтез формы из трёх языков, соответствует духу диалектического материализма:
|
|
|
+
|
|
|
+* Форма — лисп-подобная: одна, чистая, минимальная.
|
|
|
+* Семантика — материалистическая: определяется практикой, контекстом, уровнем развития.
|
|
|
+* Переход между уровнями — не скачок, а педагогически организованный процесс.
|
|
|
+* Язык — не замороженный объект, а развивающийся организм.
|
|
|
+
|
|
|
+Это — не упрощение, а углубление диалектики:
|
|
|
+
|
|
|
+* мы не множим формы,
|
|
|
+* мы углубляем понимание единства и борьбы противоположностей в самом акте программирования.
|