Q Sharp

維基百科,自由的百科全書
跳至導覽 跳至搜尋
Q#
編程範型多範式量子函數式指令式
設計者微軟研究院(量子架構與計算組,QuArC)
實作者微軟
面市時間2017年12月11日,​8年前​(2017-12-11
當前版本
    Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
    型態系統靜態強類型
    系統平台通用語言架構
    文件擴展名.qs
    網站Microsoft Quantum (GitHub)
    受影響於
    C♯, F♯

    Q#(發音為Q sharp)是一種用於表達量子算法的特定領域程式語言。[1] 它最初作為量子開發套件的一部分由微軟公開發布。[2]

    歷史[編輯]

    在2017年9月26日的Microsoft Ignite主題演講中,微軟宣布他們將發布一種專門針對量子電腦的新程式語言。[3] 2017年12月11日,微軟將Q#作為量子開發套件的一部分正式發布。

    用法[編輯]

    Q#僅可作為Visual Studio的單獨下載的擴展名提供。[4] Quantum開發套件附帶一個能夠運行Q#的量子模擬器。

    為了調用量子模擬器,使用另一種.NET框架,它為模擬器提供(經典)輸入數據,並從模擬器中讀取(經典)輸出數據。

    設計[編輯]

    Q#的設計目的是爲了擺脫傳統計算機語言對於暢通電子電腦編程模型的思維模式,轉而通過更加專注算法的方式來對量子電腦能夠擁有更爲良好的適配,而且傳統語言一般不支援對於量子位元的控制。Q#的針對目標是大量使用量子計算的應用程式的高效率開發,而不是簡單算法的固定實現。[5]

    功能[編輯]

    Q#的一個主要特徵是能夠為算法創建並且能夠使用量子位元,因此Q#的能力中最爲突出的就是能夠通過受控反閘阿達馬變換進行量子纏結並且引入量子位元的疊加。個別地來説,有托佛利閘包立矩陣等,更多內容詳見量子閘

    Q#等編譯運行特徵:[編輯]

    • 基於抽象量子位元而不是物理量子位元;
    • 允許集成使用量子計算經典計算
    • 能夠表達例如量子相位估計算法(Quantum Phase Estimation Algorithm)、幅度放大(Amplitude Amplification)等高階算法;
    • 採用操作伴隨的高階變換可被原生表達;
    • 可以被位圖編譯器委託的邏輯閘編輯、序列優化、輔助管理等;
    • 算法遵守物理法則,例如不能複製量子位元、除了模擬器調試的模擬狀態,實際物理環境下不能監視量子狀態。

    最終能夠與Q#結合的硬體堆棧有望能夠將量子位元實現在量子拓樸計算中。當前量子開發套件附帶的量子模擬器能夠在使用者機器上處理多達32個量子位元,在Azure上可處理多達40個量子位元。

    檔案以及資源[編輯]

    目前,可用於Q#的資源很少,但官方文檔已發佈有Microsoft Developer Network:Q#頁面存檔備份,存於網際網路檔案館)、Microsoft Quantum Github頁面存檔備份,存於網際網路檔案館)。其中在Github上的項目也是一個大型示例項目程式的集合,其實現了各種量子算法以及調試模型。

    微軟在Codeforces上也主持過一場量子編碼競賽,並在當時提供了相關材料以幫助回答部落格文章中所提到的問題,以及教程中問題的詳細解決方案。

    微軟提供了一系列的學習練習頁面存檔備份,存於網際網路檔案館),以幫助學習Q#。其中包含各種資源的鏈接以及問題的解決方案。

    語法[編輯]

    Q#在語法上與C#F#類似,但也有一些顯著差異。

    與C#的相似之處:[編輯]

    • 使用namespace來隔離程式碼;
    • 所有語句均使用分號;來結尾;
    • 均使用大括弧{}來限定範圍;
    • 使用連續的雙斜綫//來添加單行注釋;
    • 一些基元變量數據類型相同,例如:Int、Double、String、Bool等,但是在Q#中全部使用大寫字母開頭,而在C#中使用關鍵字來聲明時為小寫字母開頭,不過在C#中使用FCL類型名稱時可以表示為大寫開頭,而且C#中的int為32位元,而Q#中為64位元[6]
    • 量子比特的分配被放置在using語句塊當中;
    • 使用return關鍵字返回結果。

    與F#的相似之處:[編輯]

    • 使用let或mutable來聲明變量[1]
    • 使用頭等函數模式;
    • 使用open關鍵字導入模塊;
    • 數據類型在變量名稱之後聲明;
    • 使用連續的兩個英文半角句號..來進行範圍運算;
    • 使用for..in循環;
    • 每個操作和函數都必須有一個返回值,沒有void類型。相對應的,使用放回一個空元組()來取代void;
    • 記錄數據類型的定義。

    差異:[編輯]

    • 使用function關鍵字聲明函數;
    • 使用operation關鍵字聲明在量子計算機上的作業;
    • 沒有多行注釋;
    • 使用斷言來檢查和報告錯誤,而不是擲出例外;
    • 文檔使用Markdown編寫,而不是基於XML的文檔標記。

    參考文獻[編輯]

    1. ^ 1.0 1.1 QuantumWriter. Intent and product brand in a unique string of 43-59 chars including spaces. docs.microsoft.com. [2017-12-11]. (原始內容存檔於2017-12-12) (en-us). 
    2. ^ Announcing the Microsoft Quantum Development Kit. [2017-12-11]. (原始內容存檔於2017-12-11) (en-US). 
    3. ^ Microsoft announces quantum computing programming language. [2017-12-14]. (原始內容存檔於2017-12-14) (en-US). 
    4. ^ QuantumWriter. Setting up the Q# development environment. [2017-12-14]. (原始內容存檔於2017-12-14) (en-us). 
    5. ^ Why do we need Q#?. [2018-11-23]. (原始內容存檔於2018-11-23) (en-US). 
    6. ^ QuantumWriter. Q# type model. docs.microsoft.com. [2018-11-23]. (原始內容存檔於2018-11-16) (en-us). 

    外部連結[編輯]