Jump to content

Тип уникальности

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

Введение [ править ]

Типизацию уникальности лучше всего объяснить на примере. Рассмотрим функцию readLine который читает следующую строку текста из данного файла:

function readLine(File f) returns String
    return line where
        String line = doImperativeReadLineSystemCall(f)
    end
end

Сейчас doImperativeReadLineSystemCall считывает следующую строку из файла, используя ОС уровня системный вызов которого является , побочным эффектом изменение текущей позиции в файле. Но это нарушает ссылочную прозрачность, поскольку вызов этого метода несколько раз с одним и тем же аргументом каждый раз будет возвращать разные результаты при перемещении текущей позиции в файле. Это, в свою очередь, делает readLine нарушать ссылочную прозрачность, поскольку он вызывает doImperativeReadLineSystemCall.

Однако, используя типизацию уникальности, мы можем создать новую версию readLine это ссылочно прозрачно, даже если оно построено на основе функции, которая не является ссылочно прозрачной:

function readLine2(unique File f) returns (unique File, String)
    return (differentF, line) where
        String line = doImperativeReadLineSystemCall(f)
        File differentF = newFileFromExistingFile(f)
    end
end

The unique декларация указывает, что тип f является уникальным; то есть сказать, что f никогда больше не может быть упомянут вызывающим абонентом readLine2 после readLine2 возвращает, и это ограничение обеспечивается системой типов . И поскольку readLine2 не возвращается f сам по себе, а скорее новый, другой файловый объект differentF, это означает, что это невозможно для readLine2 быть вызванным с f в качестве аргумента, сохраняя тем самым ссылочную прозрачность и допуская возникновение побочных эффектов.

Языки программирования [ править ]

Типы уникальности реализованы в функциональных языках программирования, таких как Clean , Mercury , SAC и Idris . Иногда они используются для выполнения операций ввода-вывода в функциональных языках вместо монад .

было разработано расширение компилятора Для языка программирования Scala , которое использует аннотации для обеспечения уникальности в контексте передачи сообщений между участниками. [1]

Связь с линейной типизацией [ править ]

Уникальный тип очень похож на линейный тип нелинейное значение до такой степени, что эти термины часто используются как взаимозаменяемые, но на самом деле есть различие: фактическая линейная типизация позволяет привести к линейной форме, сохраняя при этом многочисленные ссылки на него. Уникальность гарантирует, что на значение не существует других ссылок, а линейность гарантирует, что на значение больше не может быть сделано никаких ссылок. [2]

Линейность и уникальность можно рассматривать как особенно различные по отношению к модальностям нелинейности и неединственности, но тогда они также могут быть объединены в систему одного типа. [3]

См. также [ править ]

Ссылки [ править ]

  1. ^ Халлер, П.; Одерский, М. (2010), «Возможности уникальности и заимствования», ECOOP 2010 — Объектно-ориентированное программирование (PDF) , стр. 354–378.
  2. ^ Уодлер, Филип (17–19 июня 1991 г.). Есть ли польза от линейной логики? . Симпозиум ACM SIGPLAN по частичной оценке и манипулированию программами на основе семантики (PEPM '91). стр. 255–273. CiteSeerX   10.1.1.26.4202 . дои : 10.1145/115865.115894 . ISBN  0-89791-433-3 .
  3. ^ Маршалл, Дэниел; Воллмер, Майкл; Орчард, Доминик (7 апреля 2022 г.). Линейность и уникальность: сердечное согласие . ESOP'22. дои : 10.1007/978-3-030-99336-8_13 .

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 3bcf644497a0dd15c34ba7b7f0c249e4__1675090620
URL1:https://arc.ask3.ru/arc/aa/3b/e4/3bcf644497a0dd15c34ba7b7f0c249e4.html
Заголовок, (Title) документа по адресу, URL1:
Uniqueness type - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)