Очередное диалектическое противоречие для рассмотрения сущее -- не_сущее. Ошибка на миллиард долларов в нашем новом, диалектическо-материалистическом языке недопустима. Наша модель языка должна отражать реально существующий мир.
Рассмотрим корень диалектического материализма, его онтологическую основу:
Сущее vs не_сущее,Бытие vs Небытие,Материя vs Пустота,Наличие vs Отсутствие.Это не просто «обработка nil» — это фундаментальное противоречие, лежащее в основе всего сущего. И если мы хотим построить язык, который отражает реально существующий мир, а не идеальный мир платоновских форм, то мы обязаны решить это противоречие диалектически, а не технически, или прагматически, или сугубо субъективно.
В диалектическом материализме только объективно существующее — есть.
Всё остальное — отражение, потенциальность, но не бытие.
Сущее — это то, что взаимодействует с миром, что занимает место в пространстве-времени, что оказывает воздействие.
Не_сущее — это отсутствие материи, небытие, ничто.
Но! Диалектика учит: ничто не возникает из ничего, и ничто не исчезает в ничто.
Следовательно, не_сущее — то, с чем нельзя взаимодействовать, а момент развития материи вне установленных философских категорий -- есть нечто.
В большинстве языков: nil — это "значение, которое не есть значение".
Это — онтологическая ошибка: признание существования небытия как равноправного с бытием.
Пример катастрофы:
// может быть null
String name = user.getName();
// NullPointerException — ошибка на миллиард долларов
int len = name.length();
Это — не ошибка программиста, это — ошибка онтологии языка, который допускает, что не_сущее может передаваться как сущее.
NULL — указатель в никуда
Допускает использование "ничего" как "чего-то"
null/None — объект-пустота
Придаёт небытию форму бытия
Maybe a — чисто, но абстрактно
Отделяет форму от материи
Option<T> — шаг вперёд, но не до конца
None — всё ещё "значение", хотя и обёрнуто
Все они — идеалистические компромиссы:
Принципы онтологии языка prolet:
сущее может быть значением.нечто — не значение, а реально существующее состояние процесса.нечто к сущему — через труд, проверку, практику.Нет null. Нет None. Есть нечто как сущее, но неопределённое.
Вместо Option<T> или null — вводим сущность нечто, которая является типом, обозначает пространство неопределённости, в котором ещё не решено, есть ли сущее. Но сама содержащая неопределённость сущность нечто -- существует всегда.
(// 1. Внешний источник — может не дать сущего,
если шлюз принимает данные не от prolet-процесса)
(прц ЗапросИзАпи @вход () нечто
(...)
)
(// Внутри `нечто` — нельзя использовать напрямую,
ОШИБКА КОМПИЛЯЦИИ )
(ОбработатьДанные)
(уст нечто)
(// Переход к сущему — только через практику)
(ЕслиНечто нечто как Пользователь
(// нечто — теперь сущее)
тогда (
(Привести нечто к Пользователь))
(Пользователь Обработать)
(// нет сущего — альтернатива)
иначе (Пользователь ПоУмолчанию))
Ключевые особенности:
нечто — тип для определения пространства возможного,нечто имеет значение до проверки, но не имеет определённого типа,ЕслиНечто — в ветке тогда переменная становится сущей,иначе — альтернативное действие.Это — единство бытия и небытия в процессе познания:
Сравните:
String s = null;
let s: Option<String> = None;
(прц ИзПорта @вход (...) нечто
(...)
)
В prolet нельзя написать:
()(уст дыра @изм) (// ОШИБКА: "ничего" не есть, контекст отрицания нельзя использовать вообще)
Потому что ничего не есть.
(НайтиПоНомеру 123 125)(уст нечто)
(ЕслиНечто нечто как Пользователь
тогда (
(Привести нечто к Пользователь)
(уст пользователь))
иначе (Пользователь Валюта))
(напечатать "Здравствуй, " пользователь имя))
иначе (напечатать "Пользователь не найден"))
Только после проверки — пользователь становится сущим.
(фн ПрочитатьФайл @вход () нечто)
(ГарантНечто нечто как Пользователь
@_док "данные обязательны, иначе сбой конфигурации"
иначе (
(Пользователь Новый)
(уст пользователь))
)
Гарантировать — не отрицание онтологии, а утверждение сущего на основе практики.
Но требует введения небытия и работает только в контролируемых условиях.
нечто без ЕслиНечто.ГарантНечто вернёт сущее.IDE подсвечивает:
нечто — не содержит конкретной формы. Проверьте перед использованием."нечто в функцию, ожидающую сущее — ошибка компиляции.Это — формирование диалектического сознания: программист учится не признавать пустоту как бытие, а искать сущее в практике.
нечто к сущему только через проверку.💡 Не использование
nil, а признания небытия как невозможное в реальном мире. Язык не допускает онтологической лжи.
Он требует:
Дано решение главного противоречия:
prolet не допускает ошибки на миллиард долларов, потому что он не допускает лжи онтологии.
nil, потому что ничего не есть.✅ Это — не просто безопасность, это — материалистическая честность, это — диалектика бытия, воплощённая в синтаксисе.