什麼是 Q#?

已完成

Q# 是開放原始碼的高階程式設計語言,可用於開發和執行量子演算法。 它是 Azure Quantum 開發工具包(新式 QDK)的一部分,其設計目的是無從驗證硬體、調整為完整的量子應用程式範圍,以及優化執行。

為何要使用量子程式設計語言?

有許多理由會讓您想要建置量子程式設計語言,但簡短的回答是:因為我們想要撰寫的是演算法,而不是電路。

在撰寫演算法時,我們應該符合下列有關語言、編譯器和執行階段的需求:

  • 抽象量子位: 量子演算法會使用未系結至特定硬體或配置的量子位。 編譯器和執行階段會處理程式量子位元與實體量子位元的對應。
  • 量子和傳統計算:在通用量子計算機中,執行傳統和量子計算的能力至關重要。
  • 物理規律: 量子演算法遵循量子物理的規則。 例如,它們無法直接複製或存取量子位狀態。

Q# 的特性

Q# 可用來撰寫量子演算法、在傳統電腦上加以模擬,然後在真正的量子電腦上執行。 Q# 也提供可用來操作量子位元並執行量子計算的內建量子運算 (例如量子閘和量子測量) 程式庫。

@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;
}

下列各節會說明 Q# 的一些主要功能。

網域特定程式庫

Q# 程式庫可讓您執行複雜的量子運算,而不必設計低階運算順序。

  • 標準程式庫會提供一組基本的函式和運算,以供您在 Q# 中撰寫量子程式時使用。
  • 量子數值連結庫提供各種數值功能的支援。

量子位元管理

在 Q# 中,量子位元是會在需要時從執行階段要求,不再使用時便歸還的資源。 此方法與傳統語言處理堆積記憶體的方式類似。

不限定的量子位元類型

Q# 語言不會指定程式中的量子位元是邏輯量子位元還是實體量子位元,也不會指定量子位元技術的類型。 執行階段會決定從程式中量子位元變數到實際邏輯或實體量子位元的對應。 該對應可以延後,直到已知目標裝置的拓撲和其他詳細資料之後。

編譯器產生的受控與共軛特製化

Q# 可以自動讓運算變得可逆且受控。 這項功能可讓撰寫演算法更容易,並允許編譯程式驅動的量子程式代碼優化。

一級運算

Q# 中的運算和函式可以傳遞至其他運算、指派給變數,並像任何其他值一樣地使用。 此功能可讓您輕鬆地表達通訊協定,例如振幅放大、相位估計等等。

傳統控制流程

Q# 在演算法執行期間支援一般的傳統控制流程。 例如,Grover 搜尋等概率演算法所需的迴圈可以輕鬆地以 Q# 表示。 使用這種類型的流程,您不需要返回傳統驅動程式來測試結果是否符合 Oracle,以及在不符合的情況下重新執行它。

混用傳統計算與量子計算

Q# 支援豐富的傳統計算和量子運算,讓自適性演算法的運算式更清楚,例如隨機漫步相位估計運算。 這類演算法很難直接以固定順序的量子閘電路模型來表示。