stringtranslate.com

Двунаправленное преобразование

В компьютерном программировании двунаправленные преобразования (bx) — это программы, в которых один фрагмент кода может быть запущен несколькими способами, так что одни и те же данные иногда рассматриваются как входные данные, а иногда как выходные данные. Например, bx, запущенный в прямом направлении, может преобразовать входные данные I в выходные данные O, в то время как тот же bx, запущенный в обратном направлении, будет принимать в качестве входных данных версии I и O и создавать новую версию I в качестве выходных данных.

Двунаправленные преобразования моделей представляют собой важный особый случай, когда модель является входными данными для такой программы.

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

Более общим является язык линз, в котором есть выделенное прямое направление («get»), которое принимает конкретный вход в абстрактный выход, отбрасывая некоторую информацию в процессе: конкретное состояние включает всю информацию, которая находится в абстрактном состоянии, и обычно немного больше. Обратное направление («put») принимает конкретное состояние и абстрактное состояние и вычисляет новое конкретное состояние. Линзы должны подчиняться определенным условиям, чтобы гарантировать разумное поведение.

Наиболее общим случаем является случай симметричных двунаправленных преобразований. Здесь два состояния, которые связаны, как правило, разделяют некоторую информацию, но каждое также включает некоторую информацию, которая не включена в другое.

Использование

Двунаправленные преобразования можно использовать для:

Определение

Двунаправленные преобразования делятся на различные хорошо изученные категории. [3]

Линза это пара функций , связывающих источник и вид . Если эти функции подчиняются трем законам линз:

Это называется хорошо себя ведущим объективом . [4]

Связанное понятие — это понятие призмы , в котором сигнатуры функций вместо этого , . В отличие от линзы, призма не всегда может давать вид; также в отличие от линзы, при наличии призмы вид достаточен для построения источника. Если линзы позволяют «фокусироваться» (просматривать, обновлять) на части типа продукта , призмы позволяют фокусироваться (возможный просмотр, построение) на части типа суммы .

И линзы, и призмы, а также другие конструкции, такие как обходы , являются более общим понятием двунаправленных преобразований, известных как оптика . [4]

Примеры реализации

Смотрите также

Ссылки

  1. ^ Фостер, Нейт. "Семантика двунаправленных языков" (PDF) . Архивировано из оригинала (PDF) 26 июля 2011 г. . Получено 7 февраля 2011 г. .
  2. ^ Чарнецкий, Кшиштоф; Фостер, Дж. Натан; Ху, Чжэньцзян; Ламмель, Ральф; Шюрр, Энди; Тервиллигер, Джеймс Ф. «Двунаправленные трансформации: междисциплинарная перспектива» (PDF) . Проверено 19 февраля 2024 г.
  3. ^ Фостер, Дж. Натан; Гринвальд, Майкл Б.; Мур, Джонатан Т.; Пирс, Бенджамин К .; Шмитт, Алан (май 2007 г.). «Комбинаторы для двунаправленных преобразований деревьев: лингвистический подход к проблеме обновления представления». Труды ACM по языкам и системам программирования . 29. doi : 10.1145 /1232420.1232424 . S2CID  53234629.
  4. ^ ab Райли, Митчелл (2018). «Категории оптики». arXiv : 1809.00738 [math.CT].
  5. ^ КАВАНАКА, Шинья; ХОСОЯ, Харуо (2006). "biXid: язык двунаправленного преобразования для XML" (PDF) . doi :10.1145/1160074.1159830. Архивировано из оригинала (PDF) 2 июля 2007 г. Получено 7 февраля 2011 г.
  6. ^ "XSugar - Двойной синтаксис для языков XML". brics.dk . Получено 19 февраля 2024 г. .

Внешние ссылки