Блог типа

О Системе Типов

Развитие Own/L встало на стабильные рельсы. Каждый элемент цепочки (компилятор, кодогенератор, рантайм) сейчас позволяют в рабочем режиме добавить новую фичу языка без проблем.

Появилось время подумать, куда двигаться дальше. Наибольшие опасения вызывает этап выбора системы типов. Про системы типов написано много умных слов, чем дальше, тем сильнее все эти слова сводятся к описанию имплементации системы типов в языке haskell, как будто ничего лучше человечество не придумало.

Если не брать от безысходности готовую систему типов Оберона, а немного подумать, то ситуация ещё больше ухудшается. Во-первых, есть определённый провал между простым определением типа и его математическим развитием, все эти декартовы произведения, мощности и прочее. Отдельная проблема это обратный переход, так как математику развили хорошо, уже непонятно, как спуститься на землю, к числам, спискам и объектам. Взять, например, дескрипционную логику, которая является формальной основой для систем онтологий. Да, концепции, роли, индивиды, это похоже на типы, свойства и объекты. Но как именно перейти к тому, что будет понятно говнокодеру - не сказано.

Опять же, Вирт в AD предлагает простые понятия, но он это всё предлагает с послезнанием, он уже знает всё это и говорит сразу правду, что не оставляет шанса дойти до всего самому.

Надо думать.

Пока что принимаем за отправную точку определение: тип данных — допустимое множество значений объекта.

Данное определение сразу предъявляет ряд требований ко всей системе - наличие объектов и значений, возможность определить множество этих значений.

Допустим, объекты это переменные и параметры процедур. Значения - это литералы и результат вычисления выражений, а так же константы (пока отсутствуют в языке).

Первый вывод - могут быть объекты, которые принимают любое значение, точнее, значение любого типа. То есть, формально это будет объект с нулевым типом, без типа, но в языке со строгой типизацией это будет объект с типом ANY. При этом, предполагается, что значение так же может быть не установлено, чему соответствует значение NONE.

Пока всё :(