【Rust日报】2020-01-27 QIP:Rust中的量子计算模拟

  • 2020 年 2 月 20 日
  • 筆記

QIP:Rust中的量子计算模拟

量子计算库利用图形构建来构建有效的量子电路仿真。对于借口模型的量子计算,Rust是一种很棒的语言,因为借位检查器与无克隆定理非常相似。

请参阅Github仓库的examples目录中的所有示例。

范例(CSWAP)

这是一个小电路的示例,其中两组寄存器在第三个寄存器之间交换。该电路非常小,只有三个操作加上一个测量值,因此,与之相比,样板看起来会很大,但是这种设置能够在电路变大时轻松、安全地构造电路。

use qip::*;    // Make a new circuit builder.  let mut b = OpBuilder::new();    // Make three registers of sizes 1, 3, 3 (7 qubits total).  let q = b.qubit();  // Same as b.register(1)?;  let ra = b.register(3)?;  let rb = b.register(3)?;    // We will want to feed in some inputs later, hang on to the handles  // so we don't need to actually remember any indices.  let a_handle = ra.handle();  let b_handle = rb.handle();    // Define circuit  // First apply an H to r  let q = b.hadamard(q);  // Then swap ra and rb, conditioned on q.  let (q, _, _) = b.cswap(q, ra, rb)?;  // Finally apply H to q again.  let q = b.hadamard(q);    // Add a measurement to the first qubit, save a reference so we can get the result later.  let (q, m_handle) = b.measure(q);    // Now q is the end result of the above circuit, and we can run the circuit by referencing it.    // Make an initial state: |0,000,001> (default value for registers not mentioned is 0).  let initial_state = [a_handle.make_init_from_index(0b000)?,                       b_handle.make_init_from_index(0b001)?];  // Run circuit with a given precision.  let (_, measured) = run_local_with_init::<f64>(&q, &initial_state)?;    // Lookup the result of the measurement we performed using the handle, and the probability  // of getting that measurement.  let (result, p) = measured.get_measurement(&m_handle).unwrap();    // Print the measured result  println!("Measured: {:?} (with chance {:?})", result, p);  

Github仓库

博客文章

用Rust编写的Trello CLI客户端

首先,在path上创建一个配置文件~/.config/tro/config.toml。设置hostkeytoken的值:

host = "https://api.trello.com"  key = "<MYKEY>"  token = "<MYTOKEN>"  

该工具中的大多数子命令通过指定以下形式的一种或多种模式来工作:

<board> <list> <card>  

模式是简单的正则表达式模式匹配。您也可以指定简单的模式,例如子字符串。

然后,Trello-rs尝试使用此过程查找您请求的对象:

  • 如果该工具无法找到一个或多个指定项的匹配项,则它将: 显示适当的错误。
  • 如果该工具设法为指定的每个项目找到唯一的匹配项,则它将成功: 显示您请求的对象。
  • 如果一个或多个模式与多个可能的项目匹配,则该工具将失败: 检索您请求的对象,并尽力解释原因。

项目详情请访问GitHub仓库。

ureq HTTP客户端库的未来

该库提供一个方便的具有最小的依赖关系树和明显的API的请求库。

ureq来自以用户需求为中心(或者也许是“人体工程学”?)库的想法。SuperAgent是简单易用的API的一大灵感。这并不是说reqwest不容易使用,reqwest还是可以的。但是,面对简易API和高性能API之间的折衷,它又向“简易”迈进了多远呢?

Hyper是reqwest的主要支撑,其主要目标是“ 为Rust提供快速、正确的 HTTP 实现”。这有时会将重要信息“泄漏”给用户。

具有明确的“用户至上”理念的库可能仍然是一个好的出发点。将用户输入视为“让它起作用”的作用,而不是强制正确性。

前往GitHub阅读文章原文。

部署容器运行时的Shim:交互式容器

容器只是孤立的Linux进程的幻像。每个进程都有一个stdin流从stdout / stderr流中读取输入数据,并将产生的输出打印到该输出中。容器也是如此。

从前面的文章中我们了解到,当我们创建一个容器时,其stdoutstderr会受到相应的运行时填充程序进程的控制。通常,这些流的内容将转发到容器日志文件。读者还可以注意到,容器的标准输入流只是默默地设置为/dev/null

但是,如果我们想将一些数据发送到容器的stdin并在运行时将其stdout和/或stderr流返回该怎么办?至少在调试会话期间,这个工具就可能非常有用。

上面的图只是一个简化。由于Docker(或Kubernetes)分层设计,在流数据的方式上可能会有更多的中间组件,因此图上的容器管理器应被视为容器管理软件的相当高级的抽象。最接近图真实世界的设置将会是crictl(作为一个命令行客户端)与交互CRI-O (作为CRI兼容的容器管理器)。

至少在以下情况下,我们可以发现在第三方应用的相同的交互式容器技术:

# Docker  docker run -i   # or --interactive  docker attach   # interactive by default  docker exec -i  # or --interactive    # Kubernetes  kubectl run --stdin     # or -i  kubectl run --attach  kubectl attach --stdin  # or -i  kubectl exec --stdin    # or -i    # ctr (containerd CLI)  ctr run  # interactive by default    # CLI for kubelet CRI  crictl attach --stdin  

前往作者个人博客浏览更多信息。