LINUX.ORG.RU

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

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

Refinement type — это когда ты объявляешь, что функция, принимающая векторы длиной M и N вернёт вектор длиной M + N, где M и N задаются в рантайме, а компилятор тебе в compile time проверяет доказательство, что твоя функция именно так себя ведёт.

Ну вообще-то я б не сказал. Вот допустим есть у нас функция concat(a,b), принимающая векторы a, b и возвращающая c. Если мы потом где-то в коде программы сравниваем veclen(a) <= veclen(c) то компилятор может эту проверку выкинуть, заменив на true т.к. из свойств функции concat и истории жизни переменных a, c следует, что сравнение veclen(a) <= veclen(c) обязательно вернет true. Это и будут частичные вычисления.

По-моему тут есть явная связь и есть смысл это совместить

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

Refinement type — это когда ты объявляешь, что функция, принимающая векторы длиной M и N вернёт вектор длиной M + N, где M и N задаются в рантайме, а компилятор тебе в compile time проверяет доказательство, что твоя функция именно так себя ведёт.

Ну вообще-то я б не сказал. Вот допустим есть у нас функция concat(a,b), принимающая векторы a, b и возвращающая c. Если мы потом где-то в коде программы сравниваем veclen(a) <= veclen(c) то компилятор может эту проверку выкинуть, заменив на true т.к. из свойств функции concat и истории жизни переменных a, c следует, что сравнение veclen(a) <= veclen(c) обязательно вернет true. Это и будут частичные вычисления