Двунаправленное преобразование
В компьютерном программировании двунаправленные преобразования (bx) — это программы, в которых один фрагмент кода может выполняться несколькими способами, например, одни и те же данные иногда рассматриваются как входные, а иногда как выходные данные. Например, запуск bx в прямом направлении может преобразовать вход I в выход O, в то время как тот же запуск bx назад будет принимать в качестве входных версий I и O и создавать новую версию I в качестве выхода.
Двунаправленные преобразования модели являются важным частным случаем, когда модель вводится в такую программу.
Некоторые двунаправленные языки являются биективными . Биективность языка — это жесткое ограничение его возможностей. [1] потому что биективный язык просто связывает два разных способа представления одной и той же информации.
Более общим является язык линз, в котором есть выделенное прямое направление («получить»), которое переводит конкретный ввод в абстрактный вывод, отбрасывая при этом некоторую информацию: конкретное состояние включает всю информацию, которая находится в абстрактном состоянии. и обычно еще немного. Обратное направление («пут») принимает конкретное состояние и абстрактное состояние и вычисляет новое конкретное состояние. Линзы должны соответствовать определенным условиям, чтобы обеспечить разумное поведение.
Наиболее общим случаем являются симметричные двунаправленные преобразования. Здесь два связанных состояния обычно имеют общую информацию, но каждое также включает в себя некоторую информацию, которая не включена в другое.
Использование [ править ]
Двунаправленные преобразования можно использовать для:
- Поддерживать согласованность нескольких источников информации. [2]
- Обеспечьте «абстрактное представление», чтобы легко манипулировать данными и записывать их обратно в источник.
Определение [ править ]
Двунаправленные преобразования делятся на различные хорошо изученные категории. [3]
Объектив – это пара функций , ссылка на источник и вид . Если эти функции подчиняются трем законам линзы:
- ПоставитьПолучить :
- ПолучитьПут :
- ПоставитьПоставить :
Это называется объективом с хорошим поведением . [4]
Связанное с этим понятие — призма , в которой сигнатуры функций вместо этого , . В отличие от линзы, призма не всегда может дать обзор; Кроме того, в отличие от линзы, если использовать призму, изображения достаточно , чтобы построить источник. Если линзы позволяют «фокусироваться» (просмотр, обновление) на части типа продукта , то призмы позволяют сфокусироваться (возможен просмотр, построение) на части типа суммы .
И линзы, и призмы, а также другие конструкции, такие как обходы , представляют собой более общее понятие двунаправленных преобразований, известных как оптика . [4]
Примеры реализации [ править ]
- Boomerang — это язык программирования , который позволяет писать линзы для двунаправленной обработки текстовых форматов данных.
- Augeas — это библиотека управления конфигурациями, язык линз которой вдохновлен проектом Boomerang.
- biXid — это язык программирования для обработки XML- данных. двунаправленной [5]
- XSugar позволяет переводить из XML в форматы, отличные от XML. [6]
См. также [ править ]
Ссылки [ править ]
- ^ Фостер, Нейт. «Семантика двунаправленных языков» (PDF) . Архивировано из оригинала (PDF) 26 июля 2011 года . Проверено 7 февраля 2011 г.
- ^ Чарнецкий, Кшиштоф; Фостер, Дж. Натан; Ху, Чжэньцзян; Ламмель, Ральф; Шюрр, Энди; Тервиллигер, Джеймс Ф. «Двунаправленные трансформации: междисциплинарная перспектива» (PDF) . Проверено 19 февраля 2024 г.
- ^ Фостер, Дж. Натан; Гринвальд, Майкл Б.; Мур, Джонатан Т.; Пирс, Бенджамин С .; Шмитт, Алан (май 2007 г.). «Комбинаторы для двунаправленных преобразований деревьев: лингвистический подход к проблеме представления-обновления» . Транзакции ACM в языках и системах программирования . 29 . дои : 10.1145/1232420.1232424 . S2CID 53234629 .
- ^ Jump up to: Перейти обратно: а б Райли, Митчелл (2018). «Категории оптики». arXiv : 1809.00738 [ мат.CT ].
- ^ КАВАНАКА, Шинья; ХОСОЯ, Харуо (2006). «biXid: язык двунаправленного преобразования XML» (PDF) . дои : 10.1145/1160074.1159830 . Архивировано из оригинала (PDF) 2 июля 2007 года . Проверено 7 февраля 2011 г.
- ^ «XSugar — двойной синтаксис для языков XML» . brics.dk . Проверено 19 февраля 2024 г.
Внешние ссылки [ править ]
- «Международная встреча GRACE по двунаправленным трансформациям» . Архивировано из оригинала 12 октября 2014 года.
- «Двунаправленные преобразования» . Bx вики . Проверено 19 февраля 2024 г.
- Пачеко, Хьюго; Кунья, Альсино (2012). Мультифокальный: стратегический язык двунаправленного преобразования для схем XML (PDF) . Международная конференция по теории и практике трансформаций моделей. Шпрингер, Берлин, Гейдельберг. дои : 10.1007/978-3-642-30476-7_6 .