【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  

前往作者個人部落格瀏覽更多資訊。