LLVM Frontend 量子拡張 (1. Qlang を考える)

@k_yamaz 蛙 は, 量子コンピュータのための量子プログラミング言語や, 量子コンパイラを開発するための
OSSコミュニティ「OpenQL Project」を運営しております.
量子プログラミング言語, 量子コンパイラを開発するための調査, 検討を書いています.
OpenQL は, OpenMP や OpenCL の仕様を参考にして, 仕様を検討しています.

“A Software Methodology for Compiling Quantum Programs arXiv:1604.01401 “ による提案や
QuTechQuEST * , EPiQCによるLLVM ベースで量子拡張を目指した実装 ScaffCC など,
世界の研究機関でも同様の研究がされております.

LLVM Frontend の拡張

LLVM Frontend である clang の量子拡張を考えます.
Frontend の名前は, 単純に qlang としておきます.

例えば, 次のようなC言語拡張を行った場合の構文解析を行えるようにしたいと考えています.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

int x = 0; // 古典変数
int a, b, c, d; // qint 型のような primitive な型を拡張する案もあるが,
// #pragma で量子変数を指定するような方法でよいのではないか

#pragma oql quantum private(a, b, c, d)
{ // プラグマによって拡張

a = 10; // initialize q-register
b = a; // 量子テレポーテーションで変数代入の処理を実現, a は破壊的
c = b; // b は破壊的
d = a; // no-cloning theorem violation ... コンパイルエラー

}
// #pragma のブロックを抜けたときに, 暗黙の測定が行われ, 測定した値が c に得られる.

x = c; // c は通常のint型として扱う.