Тип уникальности - Uniqueness type
Системы типов |
---|
Общие понятия |
Основные категории |
Второстепенные категории |
Смотрите также |
В вычисление, а уникальный тип гарантирует, что объект используется в однопоточный путь, максимум с одной ссылкой на него. Если значение имеет уникальный тип, функция, примененная к нему, может быть оптимизированный чтобы обновить значение на месте в объектный код. Такие обновления на месте повышают эффективность функциональные языки при сохранении ссылочная прозрачность. Уникальные типы также могут использоваться для интеграции функционального и императивного программирования.
Введение
Типизацию уникальности лучше всего пояснить на примере. Рассмотрим функцию readLine
который читает следующую строку текста из данного файла:
функция readLine(файл ж) возвращается Строка обратная линия где Строка линия = doImperativeReadLineSystemCall(ж) заканчивать
Сейчас же doImperativeReadLineSystemCall
читает следующую строку из файла, используя Операционные системы -уровень системный вызов который имеет побочный эффект изменения текущей позиции в файле. Но это нарушает ссылочную прозрачность, потому что вызов его несколько раз с одним и тем же аргументом будет возвращать разные результаты каждый раз, когда текущая позиция в файле перемещается. Это, в свою очередь, делает readLine
нарушает ссылочную прозрачность, потому что вызывает doImperativeReadLineSystemCall
.
Однако, используя типизацию уникальности, мы можем построить новую версию readLine
который является ссылочно прозрачным, даже если он построен поверх функции, которая не является ссылочно прозрачной:
функция readLine2(уникальный файл ж) возвращается (уникальный файл, Строка) вернуть (разныеF, линия) где Строка линия = doImperativeReadLineSystemCall(ж) файл разныеF = newFileFromExistingFile(ж) заканчивать
В уникальный
декларация указывает, что тип ж
уникален; то есть ж
никогда не может быть повторно использован вызывающим абонентом readLine2
после readLine2
возвращается, и это ограничение обеспечивается система типов. И с тех пор readLine2
не возвращается ж
сам, а скорее новый, другой файловый объект разныеF
, это означает, что невозможно readLine2
называться с ж
в качестве аргумента, что позволяет сохранить ссылочную прозрачность и одновременно допустить побочные эффекты.
Языки программирования
Типы уникальности реализованы в языках функционального программирования, таких как Чистый, Меркурий, SAC и Идрис. Иногда их используют для Ввод / вывод операции на функциональных языках вместо монады.
Расширение компилятора было разработано для Язык программирования Scala который использует аннотации для обработки уникальности в контексте передачи сообщений между участниками.[1]
Связь с линейной типизацией
Уникальный тип очень похож на линейный тип до такой степени, что термины часто используются как синонимы, но на самом деле есть различие: фактическая линейная типизация позволяет нелинейному значению быть приведение типов в линейную форму, сохраняя при этом несколько ссылок на нее. Уникальность гарантирует, что у значения нет других ссылок на него, в то время как линейность гарантирует, что на значение больше нельзя ссылаться.[2]
Смотрите также
использованная литература
- ^ Haller, P .; Одерский, М. (2010), «Возможности уникальности и заимствования», ECOOP 2010 - объектно-ориентированное программирование (PDF), стр. 354–378
- ^ Вадлер, Филипп (17–19 июня 1991 г.). Есть ли польза от линейной логики?. Симпозиум ACM SIGPLAN по частичному вычислению и управлению программами на основе семантики (PEPM '91). С. 255–273. CiteSeerX 10.1.1.26.4202. Дои:10.1145/115865.115894. ISBN 0-89791-433-3.
внешние ссылки
Эта статья использование внешние ссылки может не следовать политикам или рекомендациям Википедии.Февраль 2013) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
Обсуждение уникальности набора текста в языках программирования
- Живой линейный Лисп - «Смотри, мама, без мусора!»
- Стеки линейной логики и перестановок - четвертый должен быть первым
- Минимизация обновления счетчика ссылок с помощью отложенных и привязанных указателей для функциональных структур данных
- Одноразовые переменные и линейные объекты - управление хранилищем, отражение и многопоточность