- •Уважаемый читатель!
- •1. Мотивация
- •2. Практические языки программирования
- •2.1. Язык qcl (Омер)
- •2.2. Язык q (Беттелли, Каларко, Серафини)
- •3. Формальные языки программирования
- •3.1. Императивные и функциональные языки
- •3.2. Языки для параллельных процессов
- •3.3. Физическая модель
- •3.4. Расширение классических языков
- •3.5. Полезные особенности и вызовы
- •3.6. Предлагаемые языки
- •4. Заключение
- •Список источников
2. Практические языки программирования
Для экспериментального анализа алгоритмов, а также, возможно, для актуального использования квантовых компьютеров требуется архитектура программного обеспечения, которая облегчает процесс проектирования и исполнения квантовых алгоритмов.
С точки зрения разработчика программного обеспечения язык программирования должен иметь следующие особенности:
Язык программирования должен быть одновременно простым и мощным. Простота требуется для того, чтобы никакое дополнительное обучение не требовалось бы для использования языка, а также для того, чтобы сделать код более читабельным. Мощный язык должен гарантировать, что программист сможет сконцентрироваться на главных алгоритмических проблемах без необходимости заботиться о технических нюансах.
Язык программирования должен быть независим от технологии (подразумевается технология используемого квантового компьютера, например, ионные ловушки). По крайней мере сегодня ещё неизвестно, какая технология построения квантового компьютера покажет себя наиболее жизнеспособной. Возможно, что смогут сосуществовать несколько технологий. В этом случае у программиста должна быть возможность написать код, который затем транслируется в набор инструкций, зависящий от технологии (как, например, применения лазерного импульса к иону).
Язык программирования должен прозрачно реализовывать техники оптимизации и исправления ошибок. Это сложные, но автоматизируемые процессы. Если программисту приходится реализовывать их вручную, то даже простая программа станет слишком сложной и нечитаемой. Во-вторых, техники оптимизации и коррекции ошибок обычно зависят от технологии (обычно стоимость операции и проявляющиеся в работе ошибки различаются). Так что независимый от технологии язык программирования должен прозрачно применять эти техники.
Должно быть возможным исполнять квантовые программы на классических компьютерах при помощи эмулятора. Это даёт две возможности. Во-первых, до разработки квантовых компьютеров это позволяет протестировать разработанные программы. Во-вторых, даже тогда, когда появятся большие и мощные квантовые компьютеры, всё ещё будет потребность в эмуляции: из-за деструктивности процесса измерения невозможно получать значение внутреннего состояния квантового компьютера для поиска ошибок. В противоположность этому эмулятор может позволять проводить нефизические операции, такие как изучение внутреннего состояния, насильное получение заданного выходного значения и т. д., что позволяет осуществить комфортную и более эффективную отладку программы.
Потенциальная архитектура программного обеспечения для квантового компьютера была предложена в работе [SCA+04]: первоначально имеется независимый от технологии высокойровневый квантовый язык программирования, при помощи которого реализуются квантовые алгоритмы. Эта программа затем транслируется фронт-ендом системы в промежуточное квантовой представление (ПКП). Это ПКП всё ещё является независимым от технологии. ПКП должно быть простым и позволяющим осуществлять автоматический анализ и преобразование. Возможным выбором для представления ПКП является опичание на основе квантовых схем. На следующем уровне предлагаемой архитектуры находится независящий от технологии оптимизатор. Он преобразует ПКП в независимое от технологии низкоуровневое описание операций, которые должны быть исполнены, на квантовом языке ассемблера (КЯА). Задачей этого оптимизатора является выполнение всех возможных оптимизаций кода, которые не зависят от использования технологий (например, удаление двух последовательных гейта Адамара). На следующем шаге зависящий от технологии оптимизатор преобразует программу на КЯА в язык физических операций квантовых вычислений (ЯФОКВ). На этом языке записыватся актуальные инструкции для физического вычислительного устройства. Задачей этого оптимизатора является выполнение вычислений как можно быстро и надёжно. Наконец, результирующий набор инструкций на ЯФОКВ скармливается либо квантовому компьютеру, либо эмулятору для исполнения.
Такая архитектура позволяет осуществить независимую разработку каждого слоя. Так что разные квантовые языки программирования могут использовать различные фронт-енды, но тот же самый оптимизатор кода. А изменение технологии квантовых вычислений приведёт лишь к замене зависящего от технологии оптимизатора. Далее, такое разделение позволит подключить различные группы учёных независимо проектировать инструментарий для различных слоёв, но тем не менее гарантирует интероперабельность.
Сейчас мы опишем два квантовых языка программирования, которые акцентируются на практическом использовании и поставляются с фреймворком для исполнения и эмуляции.
