01_90.md 12 KB

pro.01_90 Диалектическая несостоятельность nil

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

Рассмотрим корень диалектического материализма, его онтологическую основу:

  • Сущее vs не_сущее,
  • Бытие vs Небытие,
  • Материя vs Пустота,
  • Наличие vs Отсутствие.

Это не просто «обработка nil» — это фундаментальное противоречие, лежащее в основе всего сущего. И если мы хотим построить язык, который отражает реально существующий мир, а не идеальный мир платоновских форм, то мы обязаны решить это противоречие диалектически, а не технически, или прагматически, или сугубо субъективно.

Философская основа: "сущее и не_сущее" в диалектическом материализме

Материя первична — сущее есть

В диалектическом материализме только объективно существующееесть.

Всё остальное — отражение, потенциальность, но не бытие.

Сущее — это то, что взаимодействует с миром, что занимает место в пространстве-времени, что оказывает воздействие.

Не_сущее — это отсутствие материи, небытие, ничто.

Но! Диалектика учит: ничто не возникает из ничего, и ничто не исчезает в ничто.

Следовательно, не_сущее — то, с чем нельзя взаимодействовать, а момент развития материи вне установленных философских категорий -- есть нечто.

Противоречие в программировании: null, undefined, None, nil

В большинстве языков: nil — это "значение, которое не есть значение".

Это — онтологическая ошибка: признание существования небытия как равноправного с бытием.

Пример катастрофы:

// может быть null
String name = user.getName();

// NullPointerException — ошибка на миллиард долларов
int len = name.length();

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

Идеалистические ошибки в типизации "сущее/не_сущее"

C/C++

NULL — указатель в никуда

Допускает использование "ничего" как "чего-то"

Java/Python

null/None — объект-пустота

Придаёт небытию форму бытия

Haskell

Maybe a — чисто, но абстрактно

Отделяет форму от материи

Rust

Option<T> — шаг вперёд, но не до конца

None — всё ещё "значение", хотя и обёрнуто

Все они — идеалистические компромиссы:

  • признают небытие как форму бытия,
  • вместо того, чтобы разрешить противоречие через практику.

Диалектическое решение: "сущее" и "нечто" как реально существующие противоположности в движении

Принципы онтологии языка prolet:

  • Только сущее может быть значением.
  • Если чего-то нет — оно не может быть передано, не может быть переменной, не может быть в вычислении.
  • нечто — не значение, а реально существующее состояние процесса.
  • Оно не существует само по себе, а возникает в практике получения сущего без формы.
  • Переход от нечто к сущему — через труд, проверку, практику.
  • Как в жизни: хлеб не берётся из воздуха — он выращивается, обрабатывается, доставляется.
  • Язык не допускает "пустоту" как объект — он требует решения.

Нет null. Нет None. Есть нечто как сущее, но неопределённое.

📔 Механизм: нечто — особая форма материи, как пространство поиска сущего

Вместо Option<T> или null — вводим сущность нечто, которая является типом, обозначает пространство неопределённости, в котором ещё не решено, есть ли сущее. Но сама содержащая неопределённость сущность нечто -- существует всегда.

(// 1. Внешний источник — может не дать сущего,
если шлюз принимает данные не от prolet-процесса)
(прц ЗапросИзАпи @вход () нечто
    (...)
)

(// Внутри `нечто` — нельзя использовать напрямую,
		ОШИБКА КОМПИЛЯЦИИ )
(ОбработатьДанные)
(уст нечто)

(// Переход к сущему — только через практику)
(ЕслиНечто нечто как Пользователь
		(// нечто — теперь сущее)
	тогда (
		(Привести нечто к Пользователь))
		(Пользователь Обработать)
		(// нет сущего — альтернатива)
    иначе (Пользователь ПоУмолчанию))

Ключевые особенности:

  • нечто — тип для определения пространства возможного,
  • Переменная нечто имеет значение до проверки, но не имеет определённого типа,
  • После контекста ЕслиНечто — в ветке тогда переменная становится сущей,
  • В ветке иначе — альтернативное действие.

Это — единство бытия и небытия в процессе познания:

  • пока не проверили — нечто, а не сущее,
  • после проверки — сущее возникает как результат практики.

Онтологическая строгость: никакого "значения-пустоты"

Сравните:

❎ Небытие-значение (ошибка)

String s = null;

⚠️ Небытие — обёрнуто, но существует (потенциальная ошибка)

let s: Option<String> = None;

✔️ Нечто — не значение, а состояние поиска

(прц ИзПорта @вход (...) нечто
	(...)
)

В prolet нельзя написать:

()(уст дыра @изм) (// ОШИБКА: "ничего" не есть, контекст отрицания нельзя использовать вообще)

Потому что ничего не есть.

Практическая реализация: три формы работы с не_сущим

Форма 1: Проверка (познание через практику)

(НайтиПоНомеру 123 125)(уст нечто)

(ЕслиНечто нечто как Пользователь
    тогда (
        (Привести нечто к Пользователь)
        (уст пользователь))
    иначе (Пользователь Валюта))
    (напечатать "Здравствуй, " пользователь имя))
    иначе (напечатать "Пользователь не найден"))

Только после проверки — пользователь становится сущим.

Форма 2: Принудительное извлечение (с ответственностью)

(фн ПрочитатьФайл @вход () нечто)

(ГарантНечто нечто как Пользователь
    @_док "данные обязательны, иначе сбой конфигурации"
    иначе (
        (Пользователь Новый)
        (уст пользователь))
)

Гарантировать — не отрицание онтологии, а утверждение сущего на основе практики.

Но требует введения небытия и работает только в контролируемых условиях.

Педагогический и психологический аспект

  • Новичок не может использовать нечто без ЕслиНечто.
  • ГарантНечто вернёт сущее.

IDE подсвечивает:

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

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

Философское обобщение: онтология языка

Бытие

  • Только то, что существует, имеет форму, действует;
  • Переход от нечто к сущему только через проверку.

Небытие

  • Не может иметь форму;
  • Нет возможности перехода к сущему, и даже к нечто.

Ошибка онтологии

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

Он требует:

  • Либо — сущее,
  • Либо — честное признание, что его ещё нет,
  • Либо — создание альтернативного сущего.

🎯 Заключение: язык как отражение реального мира

Дано решение главного противоречия:

prolet не допускает ошибки на миллиард долларов, потому что он не допускает лжи онтологии.

  • В нём нет места nil, потому что ничего не есть.
  • В нём есть место практике, потому что сущее рождается в труде.
  • В нём есть место неопределённости, но не как значению, а как пространству поиска.
  • В нём программист — не маг, а труженик, добывающий сущее из потенциально сущего.

✅ Это — не просто безопасность, это — материалистическая честность, это — диалектика бытия, воплощённая в синтаксисе.