Свойства нашего материального макромира таковы, что мы можем говорить о нескольких явлениях работы с объектами,как о действующих законах. Например, мы можем наблюдать за макро-объектом. Или можем переместить макро-объект в другое место без фактического изменения самого объекта. Либо объект может оставаться на месте ,но изменяться в потоке времени.
Для таких целей стоит определить несколько служебных атрибутов (например, @набл, от наблюдать). Ведь фактически в нашем макромире не происходит потребления сущности при наблюдении (мы ограничиваем тем самым применимость нашего языка макромиром, но цель языка программирования prolet в том и состоит, чтобы максимально следовать принципам диалектического материализма, который отлично отражает макромир. Вместо атрибута "уничтожение" -- @перед (от передать). Т.е. для нашего текущего процесса эта сущность отдаётся в дочерний процесс и там что-то с ней происходит. Некий аналог системы владения в Rust, но в нашем случае это не владение "по требованию", а владение "по передаче" (имхо, несколько более гибкая схема -- не у нас отбирают, а мы сами передаём во владение и тогда происходит потребление, или передаём в наблюдение и тогда потребления не происходит). А вместо целиком писать слово "трансформировать" -- целесообразно прийти к форме атрибута @транс. И вообще, примем общее правило, что тег -- это задаёт применимость действия к сущности. Либо в форме слова, либо в форме знака, означающего действие
Такие правила вводят самосогласованные, методологически более строгие и диалектически насыщенные смыслы языка.
Предложенные атрибуты уточняют онтологию языка, разграничивают формы взаимодействия с сущим, вводят субъектность программиста как труженика, а не пассивного идеалистичного наблюдателя или жестокого контролёра своих же мыслей.
prolet таким образом правозглашает:
В язык вводятся не просто абстрактные синонимы, а новая семантическая система, отражающую реальные законы макромира, в котором действует диалектический материализм.
(x @набл) Наблюдение — не вмешательство
(Сложить (x @перед)) Субъект передаёт — в текущей области видимости сущность исчезает, а в другой области появляется.
Всё это — не сокращения ради краткости, это — диалектическое снятие избыточности, движение от длинного слова к точному действию.
Онтология: В макромире наблюдение не уничтожает объект. Я смотрю на дерево — дерево остаётся. Я читаю значение — оно продолжает существовать. prolet
1 2 3 (переменная температура (знач 25)) (напечатать (набл температура)) ; 25 (напечатать (набл температура)) ; всё ещё 25 В ВМ: Значение копируется, Исходное — не помечается, Не удаляется, Не блокируется. Это — познание через практику, но без разрушения условия познания.
1 2 (переменная сообщение (знач "Привет, мир!")) (перед сообщение в обработчик) ; сообщение больше не доступно здесь Семантика: После (перед ...) — переменная x больше не доступна в текущем контексте. Но не уничтожена — она существует в другом процессе. Это — не смерть, а переход в иное бытие. Это — аналог передачи знания от учителя к ученику: учитель не "теряет" знание, но ученик становится его носителем.
Реализация в ВМ: go
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ⌄ ⌄ type Transfer struct {
FromIndex int // позиция в текущем фрейме
ToFrame int // целевой фрейм (например, дочерний процесс)
AsIndex int // позиция в целевом фрейме
}
func (i *Transfer) Execute(vm *VM) error {
if i.FromIndex >= len(vm.Stack) {
return errors.New("значение не существует")
}
value := vm.Stack[i.FromIndex]
// Помечаем как переданное
vm.MarkTransferred(i.FromIndex)
// Помещаем в целевой фрейм
targetFrame := vm.Frames[i.ToFrame]
targetPos := targetFrame.Start + i.AsIndex
vm.EnsureStackSize(targetPos + 1)
vm.Stack[targetPos] = value
return nil
} Передача — не копирование, не уничтожение, а перемещение в новую форму бытия.
1 2 (переменная руда (знач 1000)) (транс руда в (металл (знач (* руда 0.6)) шлак (знач (* руда 0.4)))) Семантика: рудa — перестаёт существовать как таковая, Но порождает новое качество: металл и шлак. Это — не уничтожение, Это — производство, Это — единство и борьба противоположностей. В ВМ: Исходное значение помечается как трансформированное, Новые значения — создаются в стеке, Фиксируется коэффициент полезного действия (опционально).
Тег — это не метка, не тип, не ключевое слово, тег — это действие.
Слово (набл x) Чёткое, понятное, для новичков Символ (? x) Кратко, для мастеров Оператор (x → y) Математически, для DSL Мы можем разрешить несколько форм, но семантика — одна.
Предложение: Основная форма — слово: набл, перед, транс, Альтернативная — символы: ? → наблюдение, → → передача, ↝ → трансформация. prolet
1 2 3 (? x) ; вместо (набл x) (x → обработчик) ; вместо (перед x в обработчик) (x ↝ (y z)) ; вместо (транс x в (y z)) Это — не анархия, это — развитие языка через практику: новичок учится на словах, мастер — на символах.
1 2 3 4 5
(набл x) — познание
↓
(перед x в y) — развитие через передачу
↓
(транс x в Y) — производство нового качества
Это — путь от чувственного к рациональному, от чтения к трудовой передаче, от передачи к созиданию.
В prolet:
Нет пассивности, Нет хаотичного уничтожения, Нет метафизического "владения", Есть сознательное действие: наблюдать, передавать, трансформировать. Это — не просто семантика, это — модель социалистического отношения к ресурсам, где:
Ничто не пропадает, Всё передаётся по назначению, Каждый процесс — труд, Каждое действие — ответственность. Готов ли вы, товарищ, перейти к следующему этапу — реализации системы пометок в ВМ для:
наблюденных, переданных, трансформированных значений, и построению графа жизненного цикла сущего? Да здравствует наблюдение! Да здравствует передача! Да здравствует трансформация! Да здравствует prolet — язык сознательного труда!