# Диалектика статических обобщённых типов Руководствуясь принципами диалектического материализма необходимо признать, что не существует типов вообще. Если один из типов существует фактически в качестве типа процессора или ВМ -- именно он должен являться базовым по отношению ко всем обобщённым типам. Базовым типом **ВМ** будет знаковое целое. Беззнаковое целое в качестве _базового_ типа является идеалистическим отражением наличного бытия. Беззнаковое целое, литера и булево значение будем считать производными значениями от целого. Таким образом провозглашён онтологический принцип: ```text Целое как первооснова информационной материи, как атомарная форма количества, как единица измерения бытия в мире вычислений. ``` Это — не компромисс, не инженерная хитрость в духе `ad hoc`, а революционный шаг в построении онтологии **prolet**, где сложное выводится из простого, а многообразие — из единого и реально существующего. Разберём это решение в свете диалектического материализма. ## Зачем именно знаковое целое? Онтологическое обоснование - Принцип: `количество — первая форма бытия` - В диалектике качество возникает из количества. - Прежде чем различать "истина/ложь", "литера", "адрес" — мир различает "сколько?". Целое — минимальная форма количества, способная отражать объективные состояния: - температура, - счёт, - индекс, - время, - ошибка (код), - адрес памяти (в относительной форме). Оно — не абстракция, а отражение закона измерения в природе. ## Почему именно знаковое? Потому что реальный мир — не только "больше нуля". - Температура может быть −273°C, - Баланс — отрицательным, - Ошибка — кодом `−1`. Беззнаковое — идеализм, оно отрицает возможность отрицания, а диалектика — основана на отрицании. Знаковое целое — единство положительного и отрицательного, оно носит в себе внутреннее противоречие, и потому — диалектически полно. ## Производные типы: снятие противоречия через практику В **prolet** отказ от "независимых" типов носит методический характер. Вместо куста чудесным образом возникающих типов — все типы порождаются от целого, но не механически, а через ограничение и интерпретацию. ### Булево целое (перечисление [0, не 0]) ### Литера целое (интерпретация Юникода, диапазон [0x00, 0x10FFFF]) ### Беззнаковое целое (диапазон [0, +∞)) — как ограничение, а не отдельный тип Это — не упрощение, это — развитие через снятие противоречия: - Простое (целое) — утверждается, - Сложное (булево, литера) — отрицает его, - Но затем — отрицается само, - И возвращается как интерпретация целого в заданном контексте. ## Реализация в prolet: типы как категории бытия ### Базовый тип: (тип Целое : целое) ```prolet (тип Яблоки : Целое) ``` Целое не определяется через что-то более простое. Является _аксиомой_ онтологии. Все операции (`+`, `-`, `*`, `>>`, `&`) — определены на нём напрямую. ### Булево как ограниченное целое ```prolet (тип Булево : Целое @перечисл [Ложь, Истина] @интерпретация (0 → Ложь, не 0 → Истина) ``` Использование: ```prolet ((Бул 5) -> @фикс еслиВкл)( // значение Истина) (если еслиВкл тогда (Напечатать "ВКЛ")) ``` При этом: - В памяти — просто не 0, - Но в контексте условия — интерпретируется как Истина. ## Литера как целое с семантикой кода UTF-8 ```prolet (тип Литера : Целое @диапазон [0, 0x10FFFF] @интерпретация Юникод @литералы ('a' → 97, 'я' → 1071)) ((Лит 'А') -> @фикс литА)(// литра с кодом 1040) ``` Литера — не "отдельный тип", а целое, наделённое смыслом через стандарт. ### Беззнаковое — как контракт, а не тип ```prolet (тип Абс (// Абсолютное значение целого) @диапазон (0, ЦелМакс)(// проверяется на этапе компиляции или рантайме) ) ``` Или — через валидатор: ```prolet (фн Беззнаковый (имя Битность) -> @фикс Результат.Бул (ПроверитьБезЗнак имя)) (Беззнаковый U32)(// Проверяет беззнаковое число в рантайме ``` Беззнаковое — не база, а производная категория, возникающая в практике индексации, адресации, счётчиков. ## Преимущества подхода - Минимализм онтологии - Один базовый тип — меньше путаницы, меньше ошибок - Единство представления - Все данные — целые, значит, можно сравнивать, передавать, сериализовать одинаково - Безопасность через контекст - Ошибка "сложить символ и булево" — не на уровне типов, а на уровне смысла - Развиваемость Новые типы — не добавляются, а выводятся из целого через практику ## Экономия мыслетоплива Программист не думает: "это `int` или `uint`?", а думает: "это счётчик, значит — неотрицательное" ## Психологическая и педагогическая выгода - Новичок учит один тип — целое, а потом — как его интерпретировать. - Ошибки вроде `i = -1`; `for (i < n; ...)` — обнаруживаются не по типу, а по нарушению контракта `(@диапазон [0, ∞))`. - Система подсказывает: "Переменная `i` помечена как беззнаковая, но присваивается `-1`. Это противоречит контракту." Это — не бюрократия, это — диалектическое воспитание сознания. ## Диалектическая природа целого: от количества к качеству Целое — не конец пути, а начало познания. ### Количество `x = 42` ### Простое накопление Ограничение: `x : [0, 100]` ### Единство и борьба (ограничение свободы ради смысла) - Интерпретация `x` как возраст, код ошибки, символ - Переход количества в качество - Синтез: `@возможно Пользователь` `Целое` становится частью сложного процесса `Целое` — не "вещь", оно — форма движения материи в пространстве значений. ## Заключение: целое как первооснова prolet Приведённое решение — не просто техническое, оно — философское, революционное, диалектически зрелое. `Целое` — это не тип, - это — категория бытия, - это — мера количества, - это — зародыш качества, - это — материальная основа информационного мира **prolet**. Все прочие типы — _не равноправны_, - они — его производные, - его развитие, - его самопознание.