LINUX.ORG.RU

История изменений

Исправление korvin_, (текущая версия) :

Так их бесконечность. Потому что для каждого значения существует тип из одного элемента, а значений у Real счётная бесконечность (если предположить, что оперативная память не ограничена).
По-моему, плохая идея.

Это в Racket есть типы из одного значения и прочее такое, а в остальных языках --- нет.

Кроме того, мономорфизация применяется только для реально задействованных типов в программе, а не для вообще всех существующих, во время компиляции.

Если у тебя объявлена такая функция, и фактически в коде применяется только к каким-нибудь double и rational, то и сгенерированы специализации будут только для double и rational.

Ну и для типов из одного значения можно генерировать код соответствующего типа-множества, например, для unit double генерировать как для double. А то и вообще свёртывать, раз значение известно из типа.

Исходная версия korvin_, :

Так их бесконечность. Потому что для каждого значения существует тип из одного элемента, а значений у Real счётная бесконечность (если предположить, что оперативная память не ограничена).
По-моему, плохая идея.

Это в Racket есть типы из одного значения и прочее такое, а в остальных языках --- нет.

Кроме того, мономорфизация применяется только для реально задействованных типов в программе, а не для вообще всех существующих, во время компиляции.

Если у тебя объявлена такая функция, и фактически в коде применяется только к каким-нибудь double и rational, то и сгенерированы специализации будут только для double и rational.

Ну и для типов из одного значения можно генерировать код соответствующего типа-множества, например.