Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Grin_A_S_i_dr__Vvedenie_v_kvantovoe_program.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
102.44 Кб
Скачать

1.2. Язык Quipper как встроенный язык программирования

Язык Quipper был реализован в виде встроенного языка программирования, для которого основным языком является язык Haskell. Поэтому язык Quipper можно рассматривать как совокупность типов данных, комбинаторов и библиотек функций языка Haskell, однако совместно с дополнительной идиомой, то есть предпочтительным стилем написания программ на этом встроенном языке. В этой статье мы описываем язык Quipper так, как если бы это был язык программирования сам по себе, то есть мы не предполагаем никаких знаний языка Haskell у читателя.

В то время как подход с построением встроенного языка программирования имеет много преимуществ (см. [6, гл. 1.3], где представлено общее обсуждение вопроса), есть и определённые потенциальные ловушки, о которых должны знать программисты. Одной из них является искушение использовать основной языке, то есть в данном случае написание программ на языке Haskell, а не следование идиоме языка Quipper. Это может нарушить используемые абстракции и сделать программу менее переносимой в случае изменения реализации. Другой недостаток подхода встраиваемого языка заключается в том, что часто ошибки компиляции сложно расшифровать, потому что компилятор представляет их в терминах базового, а не встроенного языка. Наконец, в то время как язык Haskell во всех отношениях является прекрасным базовым языком программирования, в частности для модели квантовых вычислений есть действительно два важных недостатка: отсутствие линейных типов и отсутствие зависимых типов, поэтому мы должны проверять некоторые свойства программ во время выполнения, хотя они в принципе могли бы быть проверены системой типизации во время компиляции.

1.3. Схемная модель языка Quipper

Язык Quipper использует расширенную схемную модель в рамках квантовых вычислений. В рамках квантовой схемы позволена как квантовые, так и классические данные и операции над ними. Квантовыми операциями можно управлять с помощью классических данных, но не наоборот. Квантовые данные могут быть явно измерены, в результате чего будут созданы классические данные. Схемная модель языка Quipper также включает в себя явно определённые области действия вспомогательных кубитов, что позволяет для них быть использованными только в той части схемы, в которых они действительно используются. Это достигается путём позволяя явной инициализации и уничтожения кубита в цепи.

Использование схемной модели приводит к трём различным этапам выполнения программы: компиляция, время генерации схемы и время исполнения схемы. Это, в свою очередь, приводит к дополнительному различию между входными данными. Входные данные, значение которых известно на стадии генерации схемы, называются параметрами, тогда как входные данные, значение которых известно только во время исполнения схемы, будут так и называться входными данными. Чтобы сохранить это различие явным, в языке Quipper вводится три основных типа для битов и кубитов. Мы используем тип Bool для логического параметра, значение которого известно на стадии генерации схемы, тип Bit для классических булевских входных данных, а также тип Qubit для квантовых входных данных схемы. Параметр типа Bool может быть легко преобразован к входному значению типа Bit, но не наоборот. Кроме того, поскольку измерения могут происходить только во время исполнения схем, типом результата измерения является Bit, а не Bool.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]