如何評價微軟剛剛發布的量子編程語言 Q# ?

Quantum Development Kit | Microsoft

最好和IBM的QIS Kit Quantum Information Software Kit 進行一下對比


處於final考期,時間比較緊張,只能簡略回答。

寫過一些簡單的量子演算法,在ibmqx4和ibmqx5上跑過一點demo,主要就是IBM的qiskit,平台是python。

#被別人不那麼友善地指出了代碼並不是本人寫的,我必須承認我的回答很有誤導性。

初步看上去還是很激動人心的,這個主要是比較中產生的,我給從官網原封不動copy下來的代碼兩端代碼

operation BellTest (count : Int, initial: Result) : (Int,Int,Int)
{
body
{
mutable numOnes = 0;
mutable agree = 0;
using (qubits = Qubit[2])
{
for (test in 1..count)
{
Set (initial, qubits[0]);
Set (Zero, qubits[1]);

H(qubits[0]);
CNOT(qubits[0],qubits[1]);
let res = M (qubits[0]);

if (M (qubits[1]) == res)
{
set agree = agree + 1;
}

// Count the number of ones we saw:
if (res == One)
{
set numOnes = numOnes + 1;
}
}
Set(Zero, qubits[0]);
Set(Zero, qubits[1]);
}
// Return number of times we saw a |0&> and number of times we saw a |1&>
return (count-numOnes, numOnes, agree);
}
}

這是微軟的Q#。

再來看看IBM,

首先定義量子電路的基本結構

Q_SPECS = {

"circuits": [{

"name": "Circuit",

"quantum_registers": [{

"name": "qr",

"size": 4

}],

"classical_registers": [{

"name": "cr",

"size": 4

}]}],

}

生成量子程序,生成電路

qp = QuantumProgram(specs=Q_SPECS)

# Get the components.

# get the circuit by Name

circuit = qp.get_circuit("Circuit")

# get the Quantum Register by Name

quantum_r = qp.get_quantum_register("qr")

# get the Classical Register by Name

classical_r = qp.get_classical_register("cr")

定義電路行為:

# Pauli X gate to qubit 1 in the Quantum Register "qr"
circuit.x(quantum_r[1])

# Pauli Y gate to qubit 2 in the Quantum Register "qr"
circuit.y(quantum_r[2])

# Pauli Z gate to qubit 3 in the Quantum Register "qr"
circuit.z(quantum_r[3])

circuit.measure(quantum_r[0], classical_r[0])
circuit.measure(quantum_r[1], classical_r[1])
circuit.measure(quantum_r[2], classical_r[2])

最後編譯,列印電路(亮瞎了)

qobj=qp.compile(circuits, backend) # Compile your program

注意,當你完成編譯完後,實際上它會返回一個完整的電路信息,這個結構體叫QASM。按照我理解,QASM是一個更為低級的語言模式。所以這個架設在Python上的QISKIT到底在做什麼呢?

就是你按照需求用語言畫一個電路,然後利用python編譯,翻譯成更低級的電路語言,然後跑在虛擬機上或是他們的晶元上。每次我用它的語言寫程序時,我都覺得自己在寫verilog。實際上IBM現在開發的量子程序語言的等級應該在模擬電路的verilog和彙編層次之間。寫起來異常痛苦。

我也不是不理解其中緣由。因為現在的量子演算法,假如你看過的話,一般都是基於量子門電路,這是大家設計演算法的基礎。因此,語言的基本單位是門電路,這是合情合理的。但是不管怎麼說,如果量子演算法和量子程序要向前發展的話,就必須擺脫門電路的基本單元,採用更抽象的模塊,更自頂向下的設計思路。順便說一句現在的量子程序的思路,一般是經典控制+量子門運算。什麼時候,一款語言能使用量子模式(雖然我現在都不知道如何實現量子控制)+量子門運算,那麼可以說量子計算達到了新的高度。

不管怎麼說,至少看上去,Q#比IBM的那款語言更「抽象」,更「高級」一些。在IBM上,我在寫CNOT的時候,甚至要考慮ibmqx4這塊智障晶元的拓撲結構,因為0位和1位之間並沒有安裝CNOT......(亮瞎了)。要在1位和2位之間使用才行.......

希望final結束後,可以有機會嘗試使用Q#,到時候我會寫個更嚴格的對比。這會兒暫且放小弟一馬


有可能讓我入一門這樣的不貼近量子硬體的語言(新坑)?

而且我覺得現實可用的量子計算機可能還離我們有個30年(或許我太保守了)這麼急著發布各種語言是想要搶佔先機以及業內標準,大部分的語言還在測試和探索階段。而目前在大學裡還在學量子力學的我們是有可能在這個潮流中取得高地的(一切的前提是量子計算機造出來了)。

那你首先就應該說服我們這些已經手握著時間和才能的人嘛(給我個地方讀PhD好不好)。

------------------------------------------------------------------------------------

我平常用QuTiP(Quantum Toolbox in Python)是為了在個人計算機上模擬少量量子比特的各類門操作、門序列以及量子演算法。

大概連個線路長這種,取自QuTiP的Tutorials:

see here: Jupyter Notebook Viewer

在建立完量子線路之後,然後運行所謂的GRAPE演算法獲取用於量子計算硬體運行所需的最優化脈衝,最後聯繫某個實驗組來運行一下我們的脈衝(最後一步還沒能完成過 = =)

這就像一系列的「編譯」-&>"執行"操作了,我在IBMQ上體驗過的qiskit類似於這種.

而微軟的這套語言可能就是程序員友好型,物理考量可以更加更加少了。


要說語言本身的話,還是很常見的語法,感覺像是披著C#外皮的Swift。

這種東西,語言是其次的,語法怎麼樣都行,關鍵在於各家底層上有什麼區別。

這個就超出這個問題的範疇了……

給我個機器啊,給個機器我研究才能好好回答啊,口亨!


先要有個量子計算機虛擬機廠商我們才能實驗啊...


作為一個小白,在看到

Step 1: Create a Project and Solution

Open up Visual Studio 2017. Go to the File menu and select New &> Project.... In the project template explorer, under Installed &> Visual C#, select the Q# Application template. Give your project the name Bell.

……

Step 3: Enter the Q# Code

……

Visual Studio should have two files open: Driver.cs, which will hold the C# driver for your quantum code, and Operation.qs, which will hold the quantum code itself.

……

之後,對為什麼Q# Application要在放在Visual C#下面和為什麼qs要一個cs來當驅動(?這裡的driver是這個意思吧?)感到極度不解。


什麼時候出《21天精通Q#》,我要去買。


q sharp 今天一用,垃圾的一b。

同樣的代碼,每次報錯都不一樣,很神奇,反編譯看了 中間代碼,發現好多地方都是多線程。嘗試試了 上百次改動。發現是Set(Zero, qubits[0]); 我也不知道 為什麼要清零。

————————————

運行速度上來說,for (test in 1..count) count 100很快 10000有點慢

100000就是卡成狗了。

——————

本質還是 qsc.exe qs文件 轉碼成 g.cs 文件,再和C#一起編譯。

而且vs 沒有報錯,vs對qs 也沒有 智能提示,估計 要 等正式版的kit

每次都 要 清零Set(Zero, qubits[0]);

Set(Zero, qubits[1]);

Set(Zero, qubits[2]);

不然 運行就是報錯

總得來講 過幾年 再看看把


現在連通用量子計算機都沒有,語言都是verilog水平,搞這玩意有啥意思

C語言還能在彙編出現之前產生咯?

講道理要真的說能在通用量子計算機上運行的高級語言的話,我只看好lisp這類。ms還不如好好搞搞F#說不定有戲。


量子計算機應該能自定義基本邏輯吧,期待量子計算機的高級語言


推薦閱讀:

量子計算機在模擬模擬領域有優勢嗎?
量子計算量子物理等的phd申請前景如何?
量子計算機有沒有能力窮盡圍棋狀態搜索?
量子計算機出來之後比特幣會如何?
如何看待牛津大學突破量子邏輯門精度 99.9% 閾值?

TAG:量子計算機 | 量子編程 |