Jump to content

Вызов по значению

В языков программирования теории вызов по значению (CBPV) — это промежуточный язык , в который встроены вызова по значению (CBV) и вызова по имени (CBN) стратегии оценки . CBPV структурирован как поляризованное λ-исчисление с двумя основными типами: «значения» (+) и «вычисления» (-). [1] Ограничения на взаимодействие между двумя типами обеспечивают контролируемый порядок вычислений, аналогичный монадам или CPS . Исчисление может включать в себя вычислительные эффекты, такие как отсутствие завершения, изменяемое состояние или недетерминизм. Существуют естественные, сохраняющие семантику переводы из CBV и CBN в CBPV. Это означает, что задание семантики CBPV и доказательство ее свойств неявно также устанавливает семантику и свойства CBV и CBN. Пол Блейн Леви сформулировал и развил CBPV в нескольких статьях и своей докторской диссертации. [2] [3] [4]

Определение

[ редактировать ]

Парадигма CBPV основана на лозунге «ценность есть, а вычисление делает». Одной из сложностей в представлении является различие между переменными типа, зависящими от типов значений, от переменных типов, зависящих от типов вычислений. Эта статья следует за Леви в использовании подчеркиваний для обозначения вычислений, поэтому является (произвольным) типом значения, но — это тип вычислений. [4] Некоторые авторы используют другие соглашения, например отдельные наборы букв. [5]

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

  • Лямбды λx.M представляют собой вычисления типа , где и . Лямбда-приложение F V или V'F представляет собой вычисление типа , где и . Конструкция let-binding let { x_1 = V_1; ... }. M связывает значения x_1 к ценностям V_1, совпадающих типов , внутри вычисления M : .
  • Громкий звук thunk M это значение типа построенный на основе вычислений M типа . Принуждение к мысли — это вычисление, force X : для размышления X : .
  • Также возможно обернуть значение V типа как вычисление return V : . Такое вычисление может использоваться внутри другого вычисления как M to x. N : , где M : , и N : это вычисление.
  • Значения также могут включать в себя алгебраические типы данных, созданные из тега и нуля или более подзначений, а вычисления включают в себя деконструкцию сопоставления с образцом. match V as { (1,...) in M_1, ... }. В зависимости от представления АТД могут быть ограничены двоичными суммами и произведениями, только логическими значениями или вообще отсутствовать.

Программа — это закрытое вычисление типа , где представляет собой наземный тип ADT. [4]

Комплексные значения

[ редактировать ]

Такие выражения, как not true : bool иметь смысл денотационно. Но, следуя приведенным выше правилам, not может быть закодировано только с использованием сопоставления с образцом, что делает его вычислением, и поэтому общее выражение также должно быть вычислением, что дает not true : F bool. Аналогично нет возможности получить 1 от (1,2) без построения вычислений. При моделировании CBPV в эквациональной теории или теории категорий такие конструкции незаменимы. Поэтому Леви определяет расширенный IR: «CBPV с комплексными значениями». Этот IR расширяет привязку let для привязки значений в выражении значения, а также для сопоставления значения с шаблоном, когда каждое предложение возвращает выражение значения. [3] Помимо моделирования, такие конструкции также делают написание программ на CBPV более естественным. [2]

Сложные значения усложняют операционную семантику, в частности, требуя произвольного решения о том, когда оценивать комплексное значение. Такое решение не имеет семантического значения, поскольку оценка сложных значений не имеет побочных эффектов. Кроме того, можно синтаксически преобразовать любое вычисление или замкнутое выражение в выражение того же типа и обозначения без сложных значений. [3] Поэтому во многих презентациях сложные значения опускаются. [4]

Трансляция CBV создает значения CBPV для каждого выражения. Функция CBV λx.M : переводится на thunk λx.Mv : . Приложение CBV M N : переводится в вычисление Mv to f in Nv to x in x'(force f) типа , делая порядок вычислений явным. Соответствие шаблону match V as { (1,...) in M_1, ... } переводится как Vv to z in match z as { (1,...) in M_1v, ... }. Значения заключены в return при необходимости, но в остальном остаются неизмененными. [2] В некоторых переводах может потребоваться секвенирование, например, при переводе inl M к M to x. return inl x. [4]

Трансляция CBN производит вычисления CBPV для каждого выражения. Функция CBN λx.M : переводится без изменений, λx.MN : . Приложение CBN M N : переводится в вычисление Mv (thunk Nv) типа . Соответствие шаблону match V as { (1,...) in M_1, ... } переводится аналогично CBN как Vn to z in match z as { (1,...) in M_1n, ... }. Значения ADT заключены в return, но force и thunk также необходимы по внутренней структуре. Перевод Леви предполагает, что M = force (thunk M), что действительно имеет место. [2]

Также возможно расширить CBPV до модели «вызов по мере необходимости», введя M need x. N конструкция, которая обеспечивает видимое совместное использование. Эта конструкция имеет семантику, аналогичную M name x. N = (λy.N[x ↦ (force y)])(thunk M), за исключением того, что с need конструкция, мысль о M оценивается не более одного раза. [6]

Модификации

[ редактировать ]

Некоторые авторы отмечают, что CBPV можно упростить, удалив либо конструктор типа U (thunks), либо конструктор типа U (thunks). [7] или конструктор типа F (вычисления, возвращающие значения). [8] Эггер и Могельберг оправдывают исключение U тем, что упрощают синтаксис и позволяют избежать беспорядка, связанного с необъяснимыми преобразованиями вычислений в значения. Этот выбор делает типы вычислений подмножеством типов значений, и тогда естественно расширять типы функций до полного функционального пространства между значениями. Они называют свое исчисление «исчислением расширенных эффектов». Это модифицированное исчисление эквивалентно расширенному набору CBPV посредством двунаправленного перевода, сохраняющего семантику. [7] Эрхард, напротив, опускает конструктор типа F, делая значения подмножеством вычислений. Эрхард переименовывает вычисления в «общие типы», чтобы лучше отражать их семантику. Это модифицированное исчисление, «полуполяризованное лямбда-исчисление», тесно связано с линейной логикой. [8] [9] Его можно двунаправленно перевести в подмножество полностью поляризованного варианта CBPV. [10]

См. также

[ редактировать ]
  1. ^ Каввос, Джорджия; Морхаус, Эдвард; Ликата, Дэниел Р.; Даннер, Норман (январь 2020 г.). «Извлечение повторений для функциональных программ посредством вызова по значению» . Труды ACM по языкам программирования . 4 (ПОПЛ): 1–31. arXiv : 1911.04588 . дои : 10.1145/3371083 . ISSN   2475-1421 .
  2. ^ Перейти обратно: а б с д и Блейн Леви, Пол (апрель 1999 г.). Вызов по значению push: парадигма включения (PDF) . Типизированное лямбда-исчисление и приложения, 4-я Международная конференция, TLCA'99, Л'Акуила, Италия. Конспекты лекций по информатике. Том. 1581. стр. 228–242.
  3. ^ Перейти обратно: а б с Леви, Пол Блейн (2003). Вызов по значению: функционально-императивный синтез (PDF) . Дордрехт ; Бостон: Академическое издательство Kluwer. ISBN  978-1-4020-1730-8 .
  4. ^ Перейти обратно: а б с д и ж Леви, Пол Блейн (апрель 2022 г.). «Вызов по значению нажатия». Новости ACM SIGLOG . 9 (2): 7–29. дои : 10.1145/3537668.3537670 .
  5. ^ Педро, Пьер-Мари; Табаро, Николя (январь 2020 г.). «Огненный треугольник: как сочетать замену, зависимое устранение и эффекты». Труды ACM по языкам программирования . 4 (ПОПЛ): 1–28. дои : 10.1145/3371126 .
  6. ^ Макдермотт, Дилан; Майкрофт, Алан (2019). «Расширенный вызов по значению push: рассуждения об эффективных программах и порядке оценки». Языки и системы программирования . Международное издательство Спрингер. стр. 235–262. дои : 10.1007/978-3-030-17184-1_9 . ISBN  978-3-030-17184-1 .
  7. ^ Перейти обратно: а б Эггер, Дж.; Могельберг, RE; Симпсон, А. (1 июня 2014 г.). «Расширенное исчисление эффектов: синтаксис и семантика» (PDF) . Журнал логики и вычислений . 24 (3): 615–654. дои : 10.1093/logcom/exs025 .
  8. ^ Перейти обратно: а б Эрхард, Томас (2016). «Вызов по значению с точки зрения линейной логики». Языки и системы программирования . Конспекты лекций по информатике. Том. 9632. стр. 202–228. дои : 10.1007/978-3-662-49498-1_9 . ISBN  978-3-662-49497-4 .
  9. ^ Шуке, Жюль; Тассон, Кристина (2020). Расширение Тейлора для Call-By-Push-Value . Лейбниц Международные труды по информатике. Том 152. Замок Дагштуль - Центр информатики Лейбница. стр. 16:1–16:16. doi : 10.4230/LIPIcs.CSL.2020.16 .
  10. ^ Эрхард, Томас (июль 2015 г.), FPC с вызовом по значению и его интерпретация в линейной логике
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 25da64451a27dec2a6ef48a5afbb65dc__1722188940
URL1:https://arc.ask3.ru/arc/aa/25/dc/25da64451a27dec2a6ef48a5afbb65dc.html
Заголовок, (Title) документа по адресу, URL1:
Call-by-push-value - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)