Mi az a Q#?
A Q# egy nyílt forráskódú, magas szintű programozási nyelv kvantum-algoritmusok fejlesztéséhez és futtatásához. Ez az Azure Quantum Development Kit (Modern QDK) része, és úgy lett kialakítva, hogy hardveres agnosztikus legyen, skálázható a kvantumalkalmazások teljes körére, és optimalizálja a végrehajtást.
Miért érdemes kvantumprogramozási nyelvet létrehozni?
A kvantumprogramozási nyelv felépítésének számos oka van, de a rövid válasz az lenne, hogy algoritmusokat szeretnénk írni, nem áramköröket.
Algoritmusok írásakor a nyelvre, a fordítóra és a futtatókörnyezetre vonatkozó alábbi követelményeknek kell megfelelnünk:
- Az absztrakt qubitek A kvantum-algoritmusok olyan qubiteket használnak, amelyek nincsenek adott hardverhez vagy elrendezéshez kötve. A fordító és a futtatókörnyezet kezeli a program qubitjeiről a fizikai qubitekre való leképezést.
- Kvantum- és klasszikus számítások. A klasszikus és kvantumszámítások végrehajtásának képessége alapvető fontosságú egy univerzális kvantumszámítógépen.
- A fizika törvényei A kvantum-algoritmusok a kvantumfizika szabályait követik. Például nem tudnak közvetlenül qubit állapotot másolni vagy elérni.
A Q jellemzői#
A Q# kvantum-algoritmusok írására, klasszikus számítógépeken való szimulálására, majd tényleges kvantumszámítógépeken való futtatására használható. A Q# emellett beépített kvantumműveletek, például kvantumkapuk és mérések könyvtárát is biztosítja, amelyek qubitek manipulálására és kvantumszámítások végrehajtására szolgálnak.
@EntryPoint()
operation MeasureOneQubit() : Result {
// The following using block creates a fresh qubit and initializes it
// in the |0 state.
use qubit = Qubit();
// We apply a Hadamard operation to the state, thereby preparing the
// state 1 / sqrt(2) (|0> + |1>).
H(qubit);
// Now we measure the qubit in Z-basis.
let result = M(qubit);
// As the qubit is now in an eigenstate of the measurement operator,
// we reset the qubit before releasing it.
if result == One { X(qubit); }
// Finally, we return the result of the measurement.
return result;
}
A következő szakaszok a Q#néhány fő funkcióját ismertetik.
Tartományspecifikus kódtárak
A Q#-kódtárakkal összetett kvantumműveleteket futtathat anélkül, hogy alacsony szintű műveletsorozatokat kellene írnia.
- A standard kódtár olyan alapvető függvényeket és műveleteket biztosít, amelyek kvantumprogramok Q#-ban való írásához használhatók.
- A kvantum numerikus kódtár számos numerikus funkciót támogat.
Qubit-kezelés
A Q#-ban a qubitek olyan erőforrások, amelyeket szükség esetén a futtatókörnyezetből kérnek, és ha már nincs használatban, visszaadják. Ez a módszer hasonló ahhoz, ahogyan a klasszikus nyelvek kezelik a halommemóriát.
Agnosztikus qubit típusa
A Q#-nyelv nem határozza meg, hogy a program qubitjei logikai vagy fizikai jellegűek-e, vagy a qubit technológia típusa. A futtatókörnyezet dönti el, hogy egy program qubit változója egy tényleges logikai vagy fizikai qubitre van-e megfeleltetve. Ez a leképezés elhalasztható, amíg a topológia és a céleszköz egyéb adatai nem ismertek.
Fordító által generált szabályozott és szomszédos specializációk
A Q# automatikusan visszafordíthatóvá és szabályozhatóvá teheti a műveleteket. Ez a képesség megkönnyíti az algoritmusok írását, és lehetővé teszi a kvantumkód fordítóalapú optimalizálását.
Első osztályú műveletek
A Q# műveletei és függvényei átadhatók más műveleteknek, hozzárendelhetők változókhoz, és bármely más értékhez hasonlóan használhatók. Ez a képesség megkönnyíti az olyan protokollok kifejezését, mint az amplitúdóerősítés, a fázisbecslés és más.
Klasszikus vezérlési folyamat
A Q# támogatja az általános klasszikus vezérlési folyamatot egy algoritmus végrehajtása során. A valószínűségi algoritmusokhoz, például a Grover kereséséhez szükséges hurok például egyszerűen kifejezhető Q#-ban. Ilyen típusú folyamat esetén nem kell visszatérnie a klasszikus illesztőprogramhoz annak ellenőrzéséhez, hogy az eredmény megfelel-e az oracle-nek, majd újrafuttathatja, ha nem.
Vegyes klasszikus és kvantumszámítás
A Q# támogatja a gazdag klasszikus számításokat és kvantumműveleteket, lehetővé téve az adaptív algoritmusok, például a véletlenszerű sétafázis becslési műveletének tiszta kifejezését. Az ilyen algoritmusokat nehéz közvetlenül kifejezni a rögzített kvantumkapuk sorozatának áramköri modelljében.