与 Q# 相比,Silq 需要更少的代码,并使用更少的内置函数,注释和入口。
为了将 Silq 与 Q# 进行比较,我们用 Silq 解决了 Microsoft Q# 2018 夏季和 2019 冬季编码竞赛的全部 28 项任务。 我们将 Silq 解决方案与语言设计师从 2018 年至 2019 年提供的 Q# 参考解决方案进行了比较。
# 实例
根据对参赛者代码的人工调查,我们认为他们可以在 Silq 中更好地编码其预期的解决方案。 在下文中,我们展示了两种常见的模式。
# 控制前翻转 (Flip Before Control)
// Q# code snippet | |
X(qs[0]); X(qs[1]); | |
(Controlled X)(qs, a[0]); | |
X(qs[0]); X(qs[1]); |
在上述 Q# 代码段中,如果 qs[0]
和 qs[1]
均为 0
,则程序员希望翻转 a[0]
的位。在 Q# 中,这要求(i)翻转 qs[0]
和 qs [1]
,(ii)应用以 qs
为条件的 X
,以及(iii)反转步骤(i)。
相比之下,Silq 利用自动计算功能将该代码段表达为:
// Silq code snippet corresponding to the above Q# code snippet | |
if !qs[0] && !qs[1] { | |
a[0] := X(a[0]); | |
} |
# 初始化量子位
// Q# code snippet (some parts omitted) | |
operation Set(des:Result,q:Qubit):(){ | |
... // omitted | |
} | |
operation Solve(qs:Qubit[]):(){ body{ | |
for (i in 0..Length(qs)-1){ | |
Set(Zero,qs[i]); | |
} | |
... // omitted | |
}} |
在上述 Q# 代码片段中,程序员希望将 k 位整数 qs
初始化为零,对其进行运算,然后返回结果。但是,由于 Q# 不允许分配和返回量子位,因此该代码必须采用预先分配的 qs
,并将其显式设置为零。
相反,Silq 只是将 qs
初始化为零:
// Silq code snippet corresponding to the above Q# code snippet | |
def solve(k:!ℕ){ | |
qs:=0:int[k]; | |
... // omitted | |
} |