Тип, гарантирующий уникальностьВ некоторых языках программирования применяется концепция типа, гарантирующего уникальность. Такие типы обеспечивают гарантию, что объект используется однопоточным способом, при этом ссылок на него — не более одной. Если значение имеет тип, гарантирующий уникальность, то применимая к нему функция в объектном коде может быть оптимизирована для обновления значения на месте. Такие обновления на месте повышают эффективность функциональных языков, сохраняя при этом ссылочную прозрачность. Типы с гарантией уникальности могут также использоваться для интеграции функционального и императивного программирования. ВведениеТипы с гарантией уникальности лучше всего объяснить с помощью примера. Рассмотрим функцию function readLine(File f) returns String return line where String line = doImperativeReadLineSystemCall(f) end end Теперь function readLine2(unique File f) returns (unique File, String) return (differentF, line) where String line = doImperativeReadLineSystemCall(f) File differentF = newFileFromExistingFile(f) end end Объявление В чистом языке программирования нет изменяемых переменных, а есть только именуемые неизменные значения. Если x' = f(x) компилятор гарантирует, что на Языки программированияТипы, гарантирующие уникальность, реализованы в языках функционального программирования Clean, Mercury и Idris. Иногда они используются для выполнения операций ввода-вывода в функциональных языках вместо монад. Было разработано расширение компилятора для языка программирования Scala, который использует аннотации для обработки уникальности в контексте передачи сообщений между объектами[2]. Связь с линейной типизациейТип, гарантирующий уникальность, очень похож на линейный тип[англ.], до такой степени, что используемые термины часто взаимозаменяемы. Но на самом деле существует различие: по факту линейная типизация позволяет привести линейное значение к линейной форме, сохраняя при этом несколько ссылок на него. Уникальность гарантирует, что значение не имеет других ссылок на себя[3]. Примечания
|
Portal di Ensiklopedia Dunia