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

2.1. Язык qcl (Омер)

В работах [Ome03a, Ome03b] описан императивный квантовый язык программирования QCL. Этот язык содержит полный набор классических операций (циклы, ветвление, элементарные и структурированные типы данных и т. д.), к которому добавлены квантовые типы данных.

Элементарным квантовым типом данных является квантовый регистр qureg. Он представляет собой ссылку на один или несколько кубитов, размещённых в так называемой квантовой куче (то есть во внешнем квантовом компьютере). Над этим типом данных можно производить элементарные операции: инициализацию, унитарные преобразования и измерения.

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

В дополнение к базовому квантовому типу данных имеются и несколько вариантов этого типа. Несмотря на то, что физическая интерпретация этих вариантов одинакова, на логическом уровне к различным типам квантовых регистров применяются различные операции. Константный регистр quconst подразумевает, что оператор не может его изменять (например, контролирующий кубит в гейте CNOT может быть константным). Пустой регистр quvoid гарантирует, что он пустой в начале выполнения оператора (например, при реализации классической функции f в виде |x>|y> |x>|y f(x)> предполагается, что второй квантовый регистр пуст). Вспомогательный регистр quscratch также в начале применения оператора должен быть пустым, но он также обязан быть пустым и после применения оператора.

Подход, при котором квантовые операторы написаны так же, как и обычные процедуры, имеет преимущество в том, что программы пишутся в очень однородном стиле: классические функции и квантовые операторы записываются при помощи одного и того же кода. При таком подходе также поддерживаются такие мощные конструкции, как квантовое ветвление программ (см. раздел 3.5).

Язык программирования QCL реализован и выпускается с эмулятором для тестирования. Программное обеспечение описано в [Ome].

2.2. Язык q (Беттелли, Каларко, Серафини)

В отличие от языка QCL (см. предыдущий раздел) язык программирования Q, описанный в работе [BCS03], не был разработан с нуля, но использует объектно-ориентированные особенности языка C++ для реализации квантовых регистров и операторов. Этот подход предоставляет преимущество в том, что могут быть использованы богатые и мощные классические возможности языка C++ и существующие библиотеки для языков C и C++, а также то, что не требуется разрабатывать специальный компилятор.

Квантовый регистр представляется классом Qreg, который, как и в случае языка QCL, представляет собой список ссылок на кубиты. Другой класс Qop представляет собой оператор, который может быть применён к регистрам. Над операторами имеется несколько операций: инверсия, композиция (последовательная) пересортировка входных и выходных кубитов, применение к регистрам, создание контролируемого оператора, создание оператора из классической функции и т. д. Поэтому из простых операторов можно создавать сложные. При этом необходимо указать на одну проблемы: операция создания оператора из классической функции (то есть конструирование оператора по форме |x>|y> |x>|y f(x)>) получает на вход указатель на функцию, то есть функция передаётся в виде чёрного ящика. Легко увидеть, что создание оператора даже для простых функций требует экспоненциальное количество вызовов этих функций.

Преимущество подхода, в котором сначала создаются операторы, а потом применяются к регистрам, заключается в следующем: более низкоуровневая библиотека может оптимизировать оператор во время его создания. Если оператор применяется много раз, его необходимо оптимизировать только единожды. Негативный аспектом этого подхода (в отличие от языка QPL) является то, что при программировании необходимо использовать более ограниченный стиль, имеющий сходство с созданием квантовых схем.

Язык программирования Q реализован вместе с эмулятором. Программное обеспечение может быть найдено в [Bet].