Типы времени исполнения

Зачем выводить типы во время исполнения

Предположим, нам нужны типы для программы интернет-магазина. Если у вас были товары в картонных коробках, а стали в пластмассовых блистерах, это не повод перекомпилировать программу.

 

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

Аналогичные проблемы возникают практически в любой реальной задаче, начиная со строк переменной длины.

Как выводить типы

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

images

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

21590_st_plosh-800x800

МоноидA.свойство() === Любой_тип< МоноидA >.свойство().

Это не равенство значений, а идентичность функций.

Запись опубликована в рубрике ISI. Добавьте в закладки постоянную ссылку.