August 2020-days

2021-02-14 呼叫地瓜
August 2020-daysrustRust 1.46穩定版發布const fn提升

這個版本主要是對 const fn 的提升: https://github.com/rust-lang/rust/pull/72437/

現在已經支持:

if, if let, and match

while, while let, and loop

the && and || operators

不過 if true 和while true 的問題還是沒解決?

fn main() {
let x;
if true { x = 1; }
println!("{}", x); // error : use of possibly-uninitialized `x`
}

博客中介紹了這個庫 const-sha1 : https://github.com/rylev/const-sha1,該庫允許你在編譯期計算 sha1。

穩定了#[track_caller]屬性

#[track_caller]是一個很有用的屬性,使用這個屬性標記了的函數中發生panic之後,異常堆棧中可以很詳細的得知panic的地點(比如文件、行數、列數)。以前的版本調用Option和Result的unwrap()函數如果發生panic,錯誤堆棧裡不會顯示具體panic的地點,直到1.42版Option和Result的unwrap()函數使用#[track_caller]標記之後解決了這個問題。現在#[track_caller]穩定之後,開發者可以給任何可能發生panic的函數採用#[track_caller]標記了。

#[track_caller]
pub fn unwrap(self) -> T {
match self {
Some(val) => val,
None => panic!("called `Option::unwrap()` on a `None` value"),
}
}

官方博客:https://blog.rust-lang.org/2020/08/27/Rust-1.46.0.html

Conflict-free Replicated Data Type (CRDT)的Rust實現

作者參考了這篇論文用Rust實現了CRDT算法。

CRDT是Conflict-free Replicated Data Type的簡稱,也稱為a passive synchronisation,即 免衝突的可複製的數據類型,這種數據類型可以用於數據跨網絡複製並且可以自動解決衝突達到一致,非常適合使用AP架構的系統在各個partition之間複製數據時使用;

連結:https://github.com/maidsafe/crdt_tree

參考資料:https://segmentfault.com/a/1190000019109149

Pre-RFC: Safe(r) Transmutation

Transmutation 推進:

https://internals.rust-lang.org/t/pre-rfc-safer-transmutation/12926

Oxigraph - 實現了SPARQL標準的圖資料庫

Oxigraph is a graph database implementing the SPARQL standard.

Official website: https://github.com/oxigraph/oxigraph

Oxigraph是一個實現了SPARQL標準的圖資料庫。宗旨是為了實現一個基於RockDB和Sled的K/V倉庫的兼容的,安全的,快速的圖資料庫。由Rust語言實現,Oxigraph同時也提供很多讀,寫和處理RDF文件的工具功能。

Oxigraph目前正在重度活躍的開發中,很多SPARQL的查詢評估還沒有經過優化。

Oxigraph的組件:

lib

python

js

server

wikibase

安裝和使用:

需要最新的穩定版本的Rust和Cargo安裝 同時也需要clang編譯RockDB。直接安裝就可以:

$ cargo install oxigraph_server

### build the fat binary at target/release/oxigraph_server
$ cargo build --release

### 用Docker Image
$ docker run --rm oxigraph/oxigraph --help

### run the docker webserver on port# 7878
### save the local data at /data
$ docker run --init --rm -v $PWD/data:/data -p 7878:7878 oxigraph/oxigraph -b 0.0.0.0:7878 -f /data

### build and run the wikibase server
$ cargo install oxigraph_wikibase
$ cargo build --release
$ cd target/release/
$ ./oxigraph_wikibase --mediawiki-api https://test.wikidata.org/w/api.php --mediawiki-base-url https://test.wikidata.org/wiki/ --namespaces 0,120 --file test.wikidata

## wikibase server from docker image
$ docker run --rm oxigraph/oxigraph-wikibase --help
$ docker run --init --rm -v $PWD/wikibase_data:/wikibase_data -p 7878:7878 oxigraph/oxigraph-wikibase -b 0.0.0.0:7878 -f /wikibase_data --mediawiki-api http://some.wikibase.instance/w/api.php --mediawiki-base-url http://some.wikibase.instance/wiki/

基於Rust-vmm實現Kubernetes運行時

隨著容器及K8s的廣泛使用,越來越多的容器安全與隔離問題被暴露出來,如:容器逃逸、水平攻擊、DDos攻擊等嚴重威脅了辦公和生產環境的安全與穩定,影響了業務的正常運行。安全容器技術孕育而生,產生了kata、gVisor、unikernel等多種安全容器方案。本文旨在介紹各種安全容器方案,分析各方案特點,結合騰訊在容器安全領域的實踐,幫助讀者選擇適合自身特性的容器運行時。同時引入Rust-VMM項目,介紹 Rust-VMM 技術和生態,演示如何使用K8s調度和啟用Rust-VMM安全容器運行時,展望以Rust語言實現的容器運行時的廣闊前景。

原文:https://mp.weixin.qq.com/s/UHZVX28rh0b12AdbRkPYiQ

現在 Rust Nightly 標準庫文檔已涵蓋了每個關鍵字

截止到今天,Rust 中每個關鍵字的初始文檔已經完成並且內容充實,為了完整性,這些文檔還包括 unsafe 以及原始類型的關鍵字。詳細可查看這三個連結:

標準庫:https://doc.rust-lang.org/stable/std/#keywords

unsafe 關鍵字:https://github.com/rust-lang/rust/pull/73943

原始類型關鍵字:https://github.com/rust-lang/rust/issues/34601

學習Rust,沮喪?

還記得之前關於Rust中字符串的長文嗎?這是 Amos 最新的又一篇長文,內容包括Rust的特性,生命周期等。

更多參見文章,https://fasterthanli.me/articles/frustrated-its-not-you-its-rust

Sana: 更簡單的詞法生成器

Sana是Rust的詞法生成器,提供了一種簡單的方法來為語言創建詞法分析器。

https://github.com/suhr/sana

1Password Linux版本

#rust

1Password Linux版本,後端完全使用Rust重寫,並且項目中使用了ring crypto庫。使用下面的命令可以在ubuntu上安裝1Password。

sudo apt-get install 1password

小編已經嚴重依賴1Password了,前不久1Password的瀏覽器插件,也使用了Rust開發的wasm模塊進行了重構。

polling 項目

stjepang 最近剛剛開源的新項目, Portable interface to epoll, kqueue, and wepoll。地址:https://github.com/stjepang/polling

使用 Rust 編寫的 Lambdas 在 AWS IoT 和 SQS 隊列之間傳遞消息

AWS IoT Core 提供了一種方便的方式將 ESP32 等 IoT 設備連接到雲。通常,使用 MQTT 協議。我們在使用 Rust 將那些 MQTT 消息傳輸到其他實際上可以對它們有用的服務,如 AWS SQS 隊列,這樣我們就可以實現監測樓層溫度等等。詳細實現請看原文:https://andres.svbtle.com/passing-messages-between-aws-iot-and-sqs-queue-using-lambdas-written-in-rust

Google工程師提交了新的LLVM優化思路,平均可提高2.33%的性能

reddit:https://www.reddit.com/r/rust/comments/i44ahg/google_engineers_just_submitted_a_new_llvm/

llvm.org:https://lists.llvm.org/pipermail/llvm-dev/2020-August/144012.html

如何在2020年進一步加快 Rust 編譯器的速度

LLVM 的速度直接影響 rustc 的速度,因為rustc使用LLVM作為後端。

詳情請見:https://blog.mozilla.org/nnethercote/2020/08/05/how-to-speed-up-the-rust-compiler-some-more-in-2020/

Rust 調試器庫 Headcrab 7月進度報告

Headcrab 項目的目標是為 Rust 提供一個新的模塊化且可組合的調試器庫。從 Delve 和 MDB 等項目中汲取了靈感,大約3周前開始的一個新項目,在不到4周的時間裡,已經看到了令人激動的進步!

詳情可看項目的7月份進度報告,連結,https://headcrab-rs.github.io/2020/07/31/july-update.html

++++++learningeasy_rust 正式完成了

Rust 已經有了很多不錯的教科書來幫助大家學習, 但是有時候閱讀這些教科書都比較困難, 因為他們大多數是為母語是英語的人準備的. 作者使用更簡單的英語來寫這本書, 目的是為了讓那些母語不是英語的人能夠更快的學習 Rust.

現在 easy_rust 已經正式完成了,大家可以查看下面連結來觀摩學習.

https://github.com/Dhghomon/easy_rust/blob/master/README.md

【從零到生產】 3.5 HTML表單處理, 資料庫操作 和 集成測試

【從零到生產】是一系列聚焦於使用 Rust 來開發雲原生應用的教程. 本篇為第三章後半部分, 講述如何處理 HTML 的表單, 資料庫連接的建立和使用, 以及如何進行集成測試.

感興趣的同學可以從第一章開始看起.

Read more

生產環境選哪個 Rust 序列化庫?

序列化一直是 Rust 的強項,序列化庫既成熟又快速。

特別是 Serde 在 Rust 1.0.0 發布之前就已經可用,其背後的理念是使用 trait 解耦對象,並從序列化格式中進行序列化/反序列化,這是一個非常強大的思想。格式編寫者只需實現 Serde 的 trait 即可,而用戶通過#[derive(Serialize,Deserialize)]對其對象進行序列化,而無需考慮格式。

當然有各種特定格式的庫,這篇博客文章中,將在考慮 API 可用性和性能的情況下比較一些庫。

博客文章連結,https://blog.logrocket.com/rust-serialization-whats-ready-for-production-today/

學一點Rust內存模型會發生什麼呢(2)

這是CrLF0710在知乎連載的一系列討論Rust內存模型的專欄,講得淺顯易懂,推薦一看。

連結:https://zhuanlan.zhihu.com/p/201220495

Contributing to the Intellij-Rust plugin: writing an intention from scratch

作者在自己博客連載他給Intellij-Rust插件貢獻的經歷,這是第二篇文章。

連結:https://kobzol.github.io/rust/intellij/2020/08/25/contributing-2-subst-assoc-type-int.html

Constany:將任何rust函數轉換為const函數的crate

庫的介紹文檔有提到了這個庫的一些原理。

地址:https://github.com/moelife-coder/constany

Bevy源碼學習筆記-001

最近在看Bevy的源碼,有些有趣的地方分享給大家。

看的比較少,所以只找到一些簡短的地方。

因為對Bevy的資產處理不是太熟悉,所以優先看了這部分的源碼。

// Properties這個宏的部分沒看,不過當初看Bevy引擎介紹的時候
// 有說到這個是為了在Rust中實現類似其他語言中反射這種功能而特
// 意設計的
#[derive(Properties)]
pub struct Handle<T>
where
T: 'static,
{
// pub struct HandleId(pub Uuid);
pub id: HandleId,
#[property(ignore)]
marker: PhantomData<T>,
}

這部分源碼我覺得是比較有意思的,因為除了Handle結構體之外,在這部分源碼中還實現了另一個結構體:

#[derive(Hash, Copy, Clone, Eq, PartialEq, Debug)]
pub struct HandleUntyped {
pub id: HandleId,
pub type_id: TypeId,
}

大部分對Handle的操作方法都是實現在了Handle裡的,那實現HandleUntyped的意義在哪裡呢?源碼自帶的注釋很好的解釋了這一點:This allows handles to be mingled in a cross asset context. For example, storing Handle<A> and Handle<B> in the same HashSet<HandleUntyped>.

目前我也就只看了資產的部分,比較複雜的處理應該是AssetServer這部分,不過基本都是正常的代碼,沒有上面這種取巧的地方了。

推介一個B站Up主

前幾天無聊的時候刷到B站一個用Rust刷力扣題目的Up主,視頻質量槓槓的。

但是一個視頻的播放量低的可憐,有興趣的觀眾可以關注一波

地址:https://space.bilibili.com/202107274/

建議從力扣刷題的部分看,我個人認為這是他系列裡做的最好的。

理解 Rust 的切片

在遷移一些 C/C++ 代碼到 Rust 過程中, 你是否也對切片的所有權如何從 Rust 中傳遞給 C 感到困惑 ? 亦或是對切片的內存布局感到困惑, 從而擔心是否會造成內存洩露 ?

作者開始有同樣的不解, 在深入了解以後,寫下該篇文章幫助有同樣疑惑的人.

Read more

Julia 的 Rust 綁定庫

jlrs 的目標是對 Julia C API 提供一個簡單安全的接口. 目前該 crate 只在 Linux和Windows上測試通過, 且只支持 Julia 1.5.0, 不兼容之前版本的 Julia.

有興趣同學可以訪問其 Github

Easy_Rust 文檔進入進入審校階段

Rust的官方文檔對於非英語母語的開發者來說理解起來有點難,因此作者用更加通俗易懂的語言解釋了Rust官方文檔,目前已經完成內容進入審校階段。

Read More

Rust 內存容器備忘錄

#rust #memory

Read More

使用rust在內核print

print是很重要的。如果某些東西不工作,您想知道為什麼(例如,通過查看控制臺輸出)。當我第一次為內核驅動程序編寫日誌宏時,我沒有考慮太多安全性問題。我只是想:「肯定沒有人會用錯誤的格式說明符或錯誤的參數數量調用它,因為它的用法簡單而直接」。

文章連結,https://not-matthias.github.io/kernel-printing-with-rust/

視頻系列: 使用Rust和Rocket構建一個智能書籤工具

我在6月份寫的文章2的基礎上創建了一個視頻系列2,在文章2中,我們使用Rust和Rocket創建了一個智能書籤工具。它是初學者友好的,並且在結尾你將有一個生產rust應用部署到Heroku!

文章連結,https://users.rust-lang.org/t/video-series-build-a-smart-bookmarking-tool-with-rust-and-rocket/47601

Async 項目比較Rust中的多線程池

作者用Rayon庫寫了一篇在rust中線程池的一篇教程。

Read More:https://pkolaczk.github.io/multiple-threadpools-rust/

Rust 的將異步代碼引入語言的方法比較新穎,它沒有將異步系統與語言打包在一起,例如 Golang 提供的內置 goroutine 的方法,而是提供了一個接口,供獨立的庫開發人員使用以實現異步給定進程的運行時。所以博文對 Futures、Tokio、async-std、smol、Actix、embrio、Bastion 這些 async 生態的庫做了個總結,更多請看原文:https://runrust.miraheze.org/wiki/Async_crate_comparison#Comparison_of_Async_Ecosystems

Rust exa源碼閱讀分析系列 文章

一共九篇,作者分享了他閱讀 exa 源碼的一些心得,值得一看。

作為Rust新手,本著學習的態度,對Rust 實現的命令行工具exa源碼進行閱讀分析。由於Rust經驗不足,分析是基於Rust基礎的語法功能以及簡單用法。一些高級的用法沒有涉及到,主要還是以學習為目的,了解一個Rust項目的構建流程以及模塊劃分。

第一篇主要是介紹exa的功能以及體驗效果,中間是對源碼進行分析,介紹如何根據命令行參數渲染最後的結果。最後一篇,介紹exa的編譯腳本以及cargo.toml文件,學習一個項目是如何進行編譯配置。

詳情請見:https://zhuanlan.zhihu.com/c_1279213952211898368

如何為 Rust 項目創建 Linux 安裝包(2/3) - 使用 Github Actions 和 Docker 進行構建

這篇文章描述了如何為 Linux 流行發行版創建軟體包!

Github Actions

計劃:Docker鏡像 -> Actions -> 工作流程

Docker 鏡像

Github Actions 的裝箱魔術

構建鏡像

建立和託管

創建Github Actions

最終的 Github Action 工作流程

最後:我們所有的公共資源

詳情請見:https://ebbflow.io/blog/vending-linux-2

用於Clang/LLVM 和 Rust的控制流防護機制(CFG)

作為我們對更安全的系統編程的持續努力的一部分,我們高興地宣布 Clang C/C++ 編譯器和 Rust 現在已經支持 Windows Control Flow Guard。

什麼是安全防護流機制?

安全防護流在 LLVM 和 Clang 中

安全防護流在 Rust 中

怎樣在 Rust 中啟用 CFG

CFG 的開銷

詳情請見:https://msrc-blog.microsoft.com/2020/08/17/control-flow-guard-for-clang-llvm-and-rust/

kosmonaut 從頭開發的瀏覽器引擎

kosmonaut 是一個從頭開發的瀏覽器引擎,Rust編寫.目前來說能做的事情還比較基礎.僅一部分 CSS 被支持,大部分的網頁應該是不能正常渲染的.

https://github.com/twilco/kosmonaut

【經驗分享】Rust's Unsafe 是如何起作用的?

作者在文中概述了Rust的unsafe關鍵字為何起作用,而C / C ++中的類似措施卻無效的緣由。

Read More

【經驗分享】如何在VS Code中更改rust-analyzer的語法高亮顯示?

將以下內容添加到settings.json文件中(假設使用的是默認主題)

{
"editor.semanticTokenColorCustomizations": {
"[Default Dark+]": {
"enabled": true,
"rules": {
"parameter.mutable": {
"bold": true,
"underline": false
},
"selfKeyword.mutable": {
"bold": true,
"underline": false
},
"variable.mutable": {
"bold": true,
"underline": false
}
}
}
}
}

Read More

現在 Rust Nightly 標準庫文檔已涵蓋了每個關鍵字

截止到今天,Rust 中每個關鍵字的初始文檔已經完成並且內容充實,為了完整性,這些文檔還包括 unsafe 以及原始類型的關鍵字。詳細可查看這三個連結:

標準庫:https://doc.rust-lang.org/stable/std/#keywords

unsafe 關鍵字:https://github.com/rust-lang/rust/pull/73943

原始類型關鍵字:https://github.com/rust-lang/rust/issues/34601

學習Rust,沮喪?

還記得之前關於Rust中字符串的長文嗎?這是 Amos 最新的又一篇長文,內容包括Rust的特性,生命周期等。

更多參見文章,https://fasterthanli.me/articles/frustrated-its-not-you-its-rust

docs.rs 已經更新了文檔覆蓋功能

docs.rs更新了文檔覆蓋功能

在這個位置可以看到:

關於構建者模式的一個簡短介紹

一個關於構建者模式的簡短介紹。

以及提供了三個實際項目中的用例。

Read More:https://matklad.github.io/2020/08/12/who-builds-the-builder.html

Sana: 更簡單的詞法生成器

Sana是Rust的詞法生成器,提供了一種簡單的方法來為語言創建詞法分析器。

https://github.com/suhr/sana

初創公司Meili投入150萬歐元,探究Rust語言編寫的開源搜尋引擎

Meili SAS是2018年11月成立的初創公司,希望能開發一套搜尋引擎接口,替代當前的託管式雲搜尋引擎競爭品。本次他們從LocalGlobe、Seedcamp、Kima & Tiny.vc幾個投資機構融資150萬歐元,希望能建設開源搜尋引擎MeiliSearch的社區,以吸納更多的用戶和貢獻者。MeiliSearch是一款高效開源的全文搜尋引擎,值得一提的是,它也使用社區的漢字分詞庫「結巴」,對漢字詞語的搜索支持有特殊的設計。

與競品Algolia等等不同的是,MeiliSearch是開源項目。為了舉例子,這個引擎在官網給出了一個快速的crates.io搜尋引擎,它的搜索和呈現過程加起來僅需數毫秒,幾乎可以做到輸入字母的同時就已經搜索完畢。這個項目最初是路易威登公司在巴黎贊助的黑客松活動誕生的。沒錯,就是賣時尚手包的那家路易威登公司——那次活動結束後,項目的三位作者分別獲得了一個路易威登的包包作為獎品。

MeiliSearch社區已經公開了後續開發的路線圖。他們希望擴展更多的功能,而且能在任何地方快速搭建開發環境。這個社區也非常歡迎開發者的貢獻,重視開源社區的價值。

https://blog.meilisearch.com/meili-fundraise/

在 Rust 中存儲連續數據?

作者都幫你整理好了:

使用 Rust 中的數組 [T; N].

Slice &[T] or &mut [T], 可以方便的 split.

Boxed slice Box<[T]>.

Vec. 長度和內容都可以變化,這可能是我們最常用的方式.

smallvec, 第三方 crate, 當元素較少時可以存儲在 stack 上.

arrayvec, 第三方 crate, 如名字所述, 底層是用 Array 來存儲的,因此長度不能動態增長. 但是數據可以存儲在 data segment, stack 或 heap上.

tinyvec, 第三方 crete, 可以100%替代 smallvec和arrayvec的一個crate.

VecDeque, 標準庫中的 std::collections::VecDeque, 是一個可增長的ring buffer實現的雙端隊列.可以高效的 pop和push.

bytes, 第三方 crate,提供了 Bytes,可以非常方便高效的存儲和操作連續的內存.不過他只能存儲 u8,常用於網絡.

更多詳細內容 Read more

Rust 實現 Bloom Filter

圖文並茂的講述 並且 使用 Rust 來實現一個 Bloom Filter.

Read more

從零到生產: 使用 Rust 進行 API開發系列

從零到生產 是一個使用 Rust 進行 Web API 開發的系列文章. 目前更新到第三章,使用 actix-web 來實現郵件訂閱的 API 部分.

Read more

為什麼 Rust 作為第二門語言非常棒

Read more

Rust books

想找本書學習一下 Rust,這裡有非常齊全的 Rust books, 從新手到進階. 不過基本上都是英文噠, 英文好的同學可以參考一下.

Read more

教程:Rust練習題

#rust #learn

一個學習Rust的項目,通過不同的練習,學習Rust Book中提到的相關概念,從類型基礎到泛型,線程都有詳細的介紹

Read More

視頻:使用Rust無懼安全問題

#security

RustLab 2019的分享的topic,眾所周知Rust是一門安全的語言,似乎耳朵已經起繭子了,但開發者如何才能享受到Rust的安全呢?Rust在安全方面到了多了哪些事情?來這個視頻一探究竟。關注RustLab油管頻道,還有其他的精彩topic:

Make life easier with Derive and other tools

Writing a Nintendo 64 emulator in Rust

Safe and Simple Rust Smart Contract in Near

...

Read More

微軟是如何使用Rust的?

#rust

微軟正在內部推廣Rust,包括一些service和原生的windows應用,可能還會有作業系統的一些核心組件,更多關於Rust在微軟推廣的文章請看。

Read More

rust的第一印象

一段時間以來,我一直想用Rust編寫一個大項目作為學習練習,實際在2018年末開始了一個項目(FUSE伺服器實現)。但後來生活發生了變化,我變得很忙,從來沒有帶著它去任何地方。

由於某些特定的世界環境,我目前花了很多時間在室內,所以rust-fuse (docs)現在已經存在,足以編寫基本的hello-world文件系統。

文章連結

Propane: an experimental generator syntax for Rust

眾所周知,Rust的Generator一直沒有穩定,主要原因是Generator仍然有許多設計上的問題沒有明確,所以無船同志寫了一個名字叫Propane的新crate,旨在nightly上實驗性的探索Rust Generator未來語法的可能性。

Propane中文翻譯:丙烷,無船同志取名向來看起來比較奇怪,不知道是否有其他用意

目前nightly的generator只能寫成閉包的形式(官方稱作generator literal),比如這樣:

#![feature(generators, generator_trait)]

fn main() {
let mut generator = || {
yield 1;
return "foo"
};
}

如果你寫成這樣的話:

#![feature(generators, generator_trait)]

fn fake_generator() -> &'static str {
yield 1;
return "foo"
}

fn main() {
let mut generator = fake_generator;
}

編譯器會報E0627 A yield expression was used outside of the generator literal.這個錯。也就是目前的generator不支持以函數的方式寫。

前面說了,generator很多語法沒有穩定甚至不支持,主要原因還是很多設計理念沒有明確,所以Propane這個庫先邁出了第一步。

#![feature(generators, generator_trait, try_trait)]

#[propane::generator]
fn fizz_buzz() -> String {
for x in 1..101 {
match (x % 3 == 0, x % 5 == 0) {
(true, true) => yield String::from("FizzBuzz"),
(true, false) => yield String::from("Fizz"),
(false, true) => yield String::from("Buzz"),
(..) => yield x.to_string(),
}
}
}

fn main() {
let mut fizz_buzz = fizz_buzz();
assert_eq!(&fizz_buzz.next().unwrap()[..], "1");
assert_eq!(&fizz_buzz.next().unwrap()[..], "2");
assert_eq!(&fizz_buzz.next().unwrap()[..], "Fizz");
assert_eq!(&fizz_buzz.next().unwrap()[..], "4");
assert_eq!(&fizz_buzz.next().unwrap()[..], "Buzz");
assert_eq!(&fizz_buzz.next().unwrap()[..], "Fizz");
assert_eq!(&fizz_buzz.next().unwrap()[..], "7");

// yada yada yada
let mut fizz_buzz = fizz_buzz.skip(90);

assert_eq!(&fizz_buzz.next().unwrap()[..], "98");
assert_eq!(&fizz_buzz.next().unwrap()[..], "Fizz");
assert_eq!(&fizz_buzz.next().unwrap()[..], "Buzz");
assert!(fizz_buzz.next().is_none());
}

Propane提供了一個generator宏,可以讓我們以函數的方式寫Generator。當然Propane的主要目的是為了驗證兩個主要的設計理念是否合理:

1) 默認返回Iterator;return關鍵字可以終止generator,但只支持返回(); generator中的?表達式的默認行為和普通函數有差別

用Propane的generator宏標記的函數是一個返回impl Iterator的生成器,生成器中依然可以使用return關鍵字來終止,但是不能返回其他類型的值,只支持返回()。

生成器中支持?表達式,但是與普通函數中不同的是,如果生成器yield是一個Result類型,當?表達式碰到錯誤情況時會把錯誤yield出去,而不是return出去。然後在下一次resume直接退出生成器。

2) 不支持自引用(Self-referential)

async/await語法穩定的時候為了解決自引用的問題花了很大的心思設計Pin和Unpin等概念。如果Generator默認返回迭代器Iterator的話,我們依然會碰到了自引用的問題。因為Iterator::next在1.0就穩定了,我們不可能再去修改它的API來讓迭代器支持自引用。如果不考慮性能,目前最簡單粗暴的方法是可以把Generator的每個state裝箱到堆上。

當然如果我們不支持自引用,就可以讓generator支持零開銷(zero cost),而且無船同志也大膽的推測(hypothesis):也許我們確實不需要一個支持自引用的Generator。

最後,無船同志強調,這幾個理念僅僅是實驗性的,而且也有可能是一次失敗的嘗試。

以上是我了解完Propane之後結合無船的博客整理的文章,Propane的代碼也很簡潔,大家可以去Github查看。

來源我的博客文章:https://folyd.com/blog/rust-generator-experimental/

無船的博客文章:Propane: an experimental generator syntax for Rust

Building Canrun: A statically typed logic programming library for Rust (part 1)

作者在用Rust寫一個名叫Canrun的邏輯編程(logic programming)庫,這是他這是這一系列連載博客的第一篇。

連結: https://esimmler.com/building-canrun-part-1/

Parallel stream processing with Rayon

作者寫了一遍博客分享他使用Rayon的並發流式處理體驗。

連結:https://morestina.net/blog/1432/parallel-stream-processing-with-rayon

使用 Rust 和 SDL2 構建一個 iOS 項目

博客原文:https://blog.aclysma.com/rust-on-ios-with-sdl2/

Crust of Rust 系列視頻

在這個(第五個)Crust of Rust 視頻中,我們通過重新實現標準庫中的某些 std :: sync :: mpsc 類型,介紹了多產品/單消費者(mpsc)channels。作為其中的一部分,我們將介紹 channel 的用途,它們在更高級別上的工作方式,不同的通用 channels 的變體以及通用 channels 實現。在此過程中,我們介紹了一些常見的 Rust 並發原語,例如 Mutex 和 Condvar。

YouTube地址:https://www.youtube.com/watch?v=b4mS5UPHh20

教程:使用 WebAssembly, Rust 和 WASI 編寫 Deno 應用

教程中,我們將用 Rust 編寫高性能函數,將它們編譯成 WebAssembly,並在你的 Deno 應用程式中運行它們。更多詳情請看原文:https://www.secondstate.io/articles/deno-webassembly-rust-wasi/

如何為 Rust 項目創建 Linux 安裝包(1/2)

這篇文章描述了如何為 Linux 流行發行版創建軟體包!

1.後臺守護程序

2.無依賴

3.用發行版

4.自動化構建 (下篇文章講)

詳情請見:https://ebbflow.io/blog/vending-linux-1

預防優於治療 — 來自張漢東老師對於內存洩漏問題的觀點

Rust 與 內存洩漏

學習 Rust 語言的一個很大的收穫就是:「預防大於治療」。

內存洩漏並不是 Rust 語言要解決的問題,但是 Rust 語言也不大容易發生內存洩漏。

寫 Rust 代碼如何避免內存洩漏呢?兩點:

做好預防

及早發現

如何做好預防:

你可以增加一些內存洩露基準測試代碼。在高並發訪問下前後內存變化是否超過了一個額定值。

測試服上降低 OOM 限額。讓代碼儘早出問題。

在寫代碼的時候對於有可能出現內存洩露的情況進行樣板化檢查,比如循環引用、forgot調用、FFi邊界之類。

及早發現:

上線的項目裡加上性能監控,及早發現洩露問題。

一旦如果發生了洩露,那就只能藉助日常性能檢測工具發現問題了,但是在這之前你可以先檢查下剛提到的樣板化檢查區域的代碼,再用一些性能測試工具逐步收集信息,縮小範圍,逐漸排查。

檢測工具推薦:Valgrind、gperftools、ltrace、rr、gdb

回放線上流量,對流量做二分找到有內存洩漏的部分請求,加壓重放加速問題顯露,然後二分注釋代碼找最小的洩露區域人肉排查。(此條經驗 via DCjanus)

Go VS Rust — 一個cli 寫兩遍

作者寫了一個 CLI, 用 go 和 rust 各自寫了一遍, 還附帶總結.:https://cuchi.me/posts/go-vs-rust

【小編私貨】Rust異步書翻譯更新

小編周末的時候重梳理了一下去年對異步書的翻譯,病重新更新翻譯到最新的版本,請各位讀者大人多多指教,歡迎 issue 和 PR 翻譯文檔連結: https://huangjj27.github.io/async-book/index.html 倉庫連結:https://github.com/huangjj27/async-book

Rust新手的錯誤處理指南

這是一篇對 Rust 新手非常友好的 error handling 指南. 從基本的小例子開始,循序漸進,由淺入深地引導出 Rust 中是如何處理錯誤的.

新手的錯誤處理指南

如果讀完還有疑問, 還可以結合另外一篇 Rust 2020 錯誤處理.

What is "Memory Safety", really?

Rust 的一項核心特性就是 內存安全. 這篇文章清晰的告訴你 Rust 在內存安全方面能夠做什麼, 也同時提醒我們哪些地方是 Rust 做不到的而需要我們自己來注意的.

reddit 觀眾高度評價: 最近讀到的最好的分析之一.

Read more

通過構建RISC-V驅動的機器人來學習嵌入式Rust

在帶有SiFive FE310 RISC-V微控制器的HiFive1板上學習嵌入式Rust

RISC-V Rust快速啟動項目:

Repo

Read More

Rusty Days 2020 演講錄播

了解更多有關 Webference Rusty Days 2020 的信息

Is it safe to use unsafe?

Is Rust ready for mainstream usage in backend development?

Leveraging Rust to build cross-platform mobile libraries

etc, YouTube

Read More

Rust+VS Code+WSL2+LLDB 安裝/配置/調試指南

一篇來自【思否社區 SF】的帖子,適合初學者學習。

Read More

++++++story【經驗貼】為什麼你需要在2020年學習Rust?

Rust 作為系統語言可以幫我們開發一些底層的東西,例如 :

網絡伺服器

瀏覽器

作業系統模塊

CLI工具

嵌入式應用

Wasm應用

閱讀更多:Why Rust is a great language to learn in 2020

【新書發售】Rust in Action 將於明年三月發行

由 TS McNamara 所著的 Rust in Action 將於明年發售,它已衝頂亞馬遜內存管理和並行計算分類新書榜第一名。 Rust in Action MEAP V14(預覽版)現已可閱讀

閱讀更多:

E-book

Reddit post

Amazon book

Online reading

Linux內核開發者繼續在評估如何使用rust來編寫內核

7月份的時候有消息提到Linux內核那邊在評估使用Rust來編寫內核的可能性,這周的線上舉行的Linux Plumbers Conference會議上有被更進一步的討論到,並且以後還會有更多這樣的討論。

不過需要明確的是,這些Rust Linux 內核計劃並不涉及用 Rust 重寫內核的大部分內容(至少在可預見的未來是這樣...) 。對於 Rust 的使用範圍,會議上討論到如果考慮到內存安全、並發性和其他 Rust 受到開發人員歡迎的領域可以優先考慮使用Rust,其他方面C將仍然是內核的主導語言。

除了弄清楚內核中 Rust 支持的限制,還要弄清楚 Kbuild/Kconfig 的構建集成,是否使用 Rust 的 Cargo 作為構建器,以及其他一些指導原則。

目前還沒有確定的結果,但是這個話題在本周的 LPC 上仍然在討論,當然在未來幾周或幾個月內核郵件列表上也會討論。

會議的PPT:https://linuxplumbersconf.org/event/7/contributions/804/attachments/641/1168/barriers-to-in-tree-rust.pdf

新聞連結:https://www.phoronix.com/scan.php?page=news_item&px=Linux-Kernel-Rust-Path-LPC2020

關於Rust用於深度學習的討論

討論的挺火熱的,就加上來了。

地址:https://www.reddit.com/r/rust/comments/igz8iv/deep_learning_in_rust/

rust機器學習工作組:https://github.com/rust-ml

和其他工作組一樣有一個匯總網站:https://www.arewelearningyet.com/

可能會用到的庫:①、https://github.com/raskr/rust-autograd ②、https://github.com/spearow/juice

Rust可視化編程的一個小演示

應該是他們可視化底層編程的書要出了,所以放出了這個小演示。

地址(需要FQ):https://www.youtube.com/watch?v=zTpzyYtE5oY

前幾天的Rustconf 2020,Tikv官網特意做了一個匯總

Read More:https://tikv.org/blog/rustconf-20/

This Week in Rust

喜聞樂見的第353期。

Read More:https://this-week-in-rust.org/blog/2020/08/26/this-week-in-rust-353/

為什麼我們應該關注 Rust 語言?(微軟Azure團隊成員首次透露 Rust 在微軟內部 ... ... ) by 張漢東老師

(標題黨)

這是 微軟 Azure 雲團隊 的 Ryan Levick 在 Rust Linz 線上Rust Meetup 的分享,分享內容主要是他對Rust語言的看法,其實這些看法對於 Rust 社區的老炮來說,都是老生常談了。

我們更關注於Ryan的身份:他是微軟Azure 雲團隊的人。通過他,我們可以了解更多關於 Rust 在微軟應用的內幕。

這節視頻的 Question環節(時間 42:26 )的第一個問題,就是主持人在問:

One very interesting question is in what ways is microsoft actively developing using Rust ? 一個非常有趣的問題是,微軟正在以何種方式積極使用Rust?

看到這裡,我才發現,原來國外 Rust 社區也非常關注這個問題。

Ryan 回答:

yes , so we 've written about this a little bits . um. in the blog and MSRC and i'm going to go all the way back to the begnning of the talk ,and go back to this graph that i showed here. 是的,所以,我們已經對此進行了一些介紹。比如,在博客和 MSRC (微軟安全響應中心)中,我將回到討論的開始,然後再回到我在此次分享中展示的那張圖。

this is actually from the msrc, the microsoft security response center, which is the team in charge of security response at microsoft across all of our products, and about two years ago , they took a look at this graph and got very sad , and said we've been putting a lot of money into making our sofeware safer and which has been working , we have we find a lot more vulnerabilities ourselves instend of bad people finding them , before we do which is good , that's good, but what they wouldn't it be great if this number didn't you know if this didn't exist , and we didn't have to worry about finding them before the bad people did because they just didn't exist in the first place. and so looing at this number where you see 70% of the security vulnerabilities are momory safety related and that from 2006 to 2018 , by the way 2019, was the same . we didn't update the slide but it's the same percentage roughly 70 , the number is just not going down , how can we do this . well, on possible way to do that is adopting the language that where you literally can't write memory safety bugs that could be using c# , and so one aspect of that is let's use more C# , let's use more GC languages , they get rid of these a lot of these issues as well , but we 're writing windows and office , xbox games center microcontrollers , we're writing firmware a lot of these things . C# is just not going to probably be the language that you want to use , because of it's gc and so we need an alternative , so we went out in the world and found Rust as the best alternative that we can adopt , i mean microsoft is slow and big company as most big companies , so we're not going to rewrite everything and rest tomorrow. but little by little more teams are adopting it .

前面講了MSRC 博客上曾經講過的東西, 70%的安全漏洞來自於內存安全問題等等。下面才是重點:

i can't say , i really wish i could say, which teams are adopting it right now . but we 're still not quite ready to make that public , there are a few like azure iot , they write iot devices as well as web servsers that help you manage those devices . they are active open source users of rust , so that's no secret there.

鑑於保密原因,ryan還不能公開太詳細的內容,只是說有一個類似於 Azure IOT 的產品在用Rust,用於管理iot 設備。

there are other teams inside of microsoft that are using starting to use rust , and really seeing great results with it , and if we could just get my colleagues to write blog posts quicker then you know at some point . we're going to be writing a lot more about that . we start discussing which teams are using it , but i can say not only are we seeing great memory safety advances , we're also seeing perfomance gains which was has been really surprising , now if you were to rewrite some of that code in c++, you know modern c++ , maybe you would see the same improvements but the good thing is that it's not all about memory safety at the expense of something else it's basically just positives that are happening with our adoption of rust , and so it's making the pain of adoption which comes from adopting new tools learning new things , taking on new build system , so forth it's making that worth it . and hopefully we can share more about that in the near future .

還有其他一些團隊在使用 Rust ,這些都會在後面陸續通過博客公開出來。ryan只是談到 Rust 在微軟內部的應用雖然剛開始有點痛楚,但都是值得的,因為都收到了非常積極的回報。

期待後續的博客文章吧。

Ryan 視頻地址: https://www.youtube.com/watch?v=OhCjnyBc448&feature=youtu.be

IOTA Identity 現已開源

去中心化的數字身份, 又名 身份自主權 ( Self Sovereign Identity (SSI) ). IOTA identity 是一個他的一個具體實現. 他實現了 W3C 中的 DID(Decentralized Identifiers) 和 Verifiable Credentials 以及其他相關的標準.

目前該項目在積極開發中,感興趣的同學可以時刻關注其動態.

IOTA Identity github

DID(Decentralized Identifiers)

Verifiable Credentials Data Model

Linz Rust meetup

Linz(林茨, 奧地利北部城市) 一直有各種各樣的程式語言的 meetup, 但是 Rust 並不在其中. 隨著 Rust 變的越來越流行, Linz 從2020年 8 月份開始舉辦 Rust的 meetup. 目前已經舉行了一期.

八月份(2020-08-06)分享:

Cargo - Introduction in Rust's Package Manager

分享者: Rainer Stropek, 微軟

Why should I care about Rust?

分享者: Ryan Levick

ryan 也提到微軟內部有很多組都開始逐步嘗試rust,但是微軟目前還沒準備好公開哪些組開始用rust了. 他還提了一下微軟的那個學習 rust 的 Verona 語言,說目前來說 Verona 主要是一個 research 項目,等於是 Microsoft research 通過 Verona 項目來研究memory safety。目前沒有明確的信息說明Verona未來會不會真的投入使用.

九月份(2020-09-16)的安排:

Get to Know Rust: Build, debug, and test an application

分享者: Meaghan Lewis, 微軟高級程序經理.

Building a digital logic analyzer from scratch with embedded rust

分享者: Roland Ruckerbauer

十月份(2020-10-08)的安排:

How not to rely on inheritance

分享者: Valentin Tolmer, 谷歌的開發人員

Writing a kernel driver with Rust

分享者: Matthias Heiden

大家感興趣的話可以觀看線上的分享,或者觀看歷史回放.

官網的介紹: https://rust-linz.at/#intro

油管的Playlist: https://www.youtube.com/playlist?list=PL85XCvVPmGQgL3lqQD5ivLNLfdAdxbE_u

--

Rust Meetup Linz

####meetup

8月17日在Linz舉行了Rust聚會。

下面的視頻是ryan的分享,他提到微軟內部有很多組都開始逐步嘗試rust,但是微軟目前還沒準備好公開哪些組開始用rust。他還提了一下微軟的那個學習rust的Verona語言,說目前來說Verona主要是一個research項目,等於是Microsoft research 通過Verona項目來研究memory safety。目前沒有明確的信息說明Verona未來會不會真的投入使用。

Ryan Levick - Why should I care about Rust?

Read More

RustConf研討會在線舉辦

RustConf is online!

Official website: https://rustconf.com/

RustConf研討會在線舉辦,大家可以科學觀看和回顧:

Video#01 RustConf 2020 - Opening Keynote

Video#02 RustConf 2020 - Error Handling Isn't All About Errors

Video#03 RustConf 2020 - How to Start a Solo Project That You'll Stick With

Video#04 RustConf 2020 - Under a microscope - exploring fast and safe rust for biology

Video#05 RustConf 2020 - Bending the curve - a personal tutor at your fingertips

Video#06 RustConf 2020 - My First rust project - starting a 2d game with amethyst

Video#07 RustConf 2020 - Controlling telescope hardware with rust

Video#08 RustConf 2020 - Macros for a more productive rust

Video#09 RustConf 2020 - Rust for non-systems programmers

Video#10 RustConf 2020 - Closing keynote

「Rust核心團隊官宣」為Rust的未來奠定基礎

本月8月11號,Mozilla 宣布裁員 250 人。此事件在網際網路技術圈引發大量關注。大家的關注點在於, Mozilla 裁員到底對 Rust 語言及其發展會有多少影響。

甚至有人傳:「Mozilla 大裁員了,很多 Rust 開發被裁了 」,我真怕到明天就流傳出「Mozilla 大裁員,Rust 團隊被裁了」的新聞貼。。。就差這麼說了:「Mozilla倒閉了,老闆帶著小姨子跑路了,欠下3.5個億。我們沒有辦法,拿著Rust抵債。」

截止到今天,也就是 8 月 19 號,Rust 核心團隊也就此事在官方博客上進行了說明。

那麼,本文來帶大家來捋一捋整個事件的過程。

詳情請見-公眾號:https://mp.weixin.qq.com/s/36hlYYkhK7IT8uCP8iz1Yg

詳情請見-rust博客:https://blog.rust-lang.org/2020/08/18/laying-the-foundation-for-rusts-future.html

Rust核心團隊宣布未來要成立 Rust 基金會

Mozilla和核心特隊表示,要在年底之前開始基金會的第一次迭代

Mozilla and the Rust Core Team are happy to announce plans to create a Rust foundation. Our goal is to have the first iteration of the foundation up and running by the end of the year.

太長不看版(by Rust眾群友@Ethan)

Rust在各個領域各個公司有了很多應用 moz的裁員帶來了很多影響 0. 關於僱員。由於全世界的關注 被裁的僱員們不幸中的萬幸是找下份工作的阻力由於大家的關心可能會小一點 並附了一個幫助僱員找工作的link

關於影響力。Rust 被裁的僱員對rust有影響 但是 他們仍然是語言團隊的中堅力量之後仍會發光發熱(雖然他們中的一些人可能之後沒辦法繼續貢獻了 我們會尊重他們)

社區力量是很大的 rust不是那種傑出的個人領導的社區 另外僱員們對rust的貢獻很大一部分用的是私人時間

關於基金會。Rust和moz決定推動基金會的建立 第一步就是 take ownership of rust

關於運營。目前運營沒有問題因為有很多sponsor,沒有完全依賴某個實體,發展是健康得。

原文:https://blog.rust-lang.org/2020/08/18/laying-the-foundation-for-rusts-future.html

【今日熱榜】Trending Rust Repos

今天排名前三的trending repos是 servo ,bevy ,libra

servoRepo

bevyRepo

libraRepo

This Week in Rust

每周官方都會更新的This Week in Rust又更新了。

這已經是第351期了。

基本上最近有關Rust的動向裡面都收集了,個人一直比較關注的是Tooling類的動向吧,rust-analyzer越來越好用了。

其他動向日報基本都涉及過了,這裡不再提及,主要說兩個,一個是每月都會更新一次的Rust GameDev,以及最近才更新的區塊鏈相關動向。

感興趣的可以直接下面的連結到文章。

Rust GameDev:https://rust-gamedev.github.io/posts/newsletter-012/

Blockchain:https://rustinblockchain.org/newsletters/2020-08-05-are-we-smart-contract-yet/

Read More:https://this-week-in-rust.org/blog/2020/08/11/this-week-in-rust-351/

Mozilla 裁員會怎樣影響 Rust博客:Rust 實現 .NET Profiler

https://code.camdenreslink.com/dev/implementing-the-dot-net-profiling-api-in-rust/

Rust 核心團隊貢獻者 teve Klabnik 訪談

https://evrone.com/steve-klabnik-interview

Rust 嘮嗑第六期:Rust FFI

《Rust嘮嗑室》第6期 - Rust FFI 經驗介紹

主講人:Mono Wang 內容:主要介紹 Rust FFI 進階使用技巧和實現要點。以及踩過的坑。以及還沒解決的內存洩漏。時間: 2020/8/4 20:30-21:30 形式: 在線 騰訊會議App

大家錯過了不要緊,敬請關注Mike Tang 老師在 B站 的嘮嗑視頻更新哈

【播客】Steve Klabnik 聊 Rust 語言及生態現狀

在The Virtual World播客中,Rust 核心組成員 Steve Klabnik 聊 Rust 語言及生態現狀。

播客連結,https://anchor.fm/the-virtual-world/episodes/Ep-6--The-State-of-Rust-with-Steve-Klabnik-ehf8mk

++++++wasmTrunk: WASM Web 項目的構建打包工具

Trunk 是一個命令行工具,為構建 Rust WebAssembly 應用的構建提供簡單、零配置的模式。目前已經支持 sass、css、icon的打包。目前項目處於開啟階段,歡迎貢獻。

https://github.com/thedodd/trunk

瀏覽器之外的 WebAssembly

大多數關於 WebAssembly 的教程都是關於如何在瀏覽器內部如何使用.但是,除此之外,還有很多場景是關於瀏覽器之外使用WebAssembly的.

例如:

作為遊戲的腳本語言

以最小的開銷運行一些代碼,就如 Fastly/Cloudflare 他們所做的邊緣計算一樣.

在物聯網設備上以最小開銷運行代碼以及非常方便的進行更新.

想追求極速的運行又由於某些原因不能 JIT.

這篇文章會帶感興趣的同學從頭到尾開發一個瀏覽器之外運行的 WebAssembly 的 Rust 程序.

Read more

Cranelift現在可以編譯rustc,比LLVM的編譯速度快7倍!

在最近的一次測試中,編譯速度比llvm快7倍

Cranelift是一個底層可重定向代碼生成器。

CraneliftRead More

Read More

教程:使用 WebAssembly, Rust 和 WASI 編寫 Deno 應用

教程中,我們將用 Rust 編寫高性能函數,將它們編譯成 WebAssembly,並在你的 Deno 應用程式中運行它們。更多詳情請看原文:https://www.secondstate.io/articles/deno-webassembly-rust-wasi/

++++++gameVeloren - Rust語言開發的多人版立體像素角色扮演遊戲

Veloren is a multiplayer voxel RPG written in Rust.

代碼:https://github.com/veloren/veloren

官網:https://veloren.net

Veloren是一款用Rust語言開發的多人立體像素角色扮演遊戲。Veloren的開發受到Cube World,Minecraft和Dwarf Fortress等多款經典類似遊戲的啟發。 這款遊戲目前正在熱烈和重度研發中,已經有發布版本並可以玩了。

目前遊戲貢獻者們的交流與溝通主要是在項目的Discord網絡社區伺服器上進行。想了解項目最新動態,可以加入社區走近研發人員,了解項目或者自己為項目做點貢獻。任何一個認真的想投入精力的都可以加入我們的團隊。不要懂得編程也可以為項目和社區做貢獻。

有用的連結:

Sign Up註冊用戶,在這裡你可以在線註冊用戶,用於登陸需要驗證的伺服器,包括Veloren官方伺服器。

Book:Veloren手冊,大量關於veloren的重要資料,包括如何編譯程序軟體,如何分發發布等信息。

Future Plans,這裡可以找到Veloren的開發路線和最近研發團隊的主要工作。

官方社交媒體和官網:

Website

Discord Server

Subreddit

獲得Veloren:

官方支持64位版的Windows,Linux,MacOS版本,可以到官網下載: https://www.veloren.net

由於研發更新非常快,最新發布的"穩定版本"並不一定兼容公開的對外伺服器。如果你想自己編譯Veloren 可以在官方的參考書裡找到相關的信息。

veloren 多人三維像素遊戲

veloren 是一款開源的, 使用 Rust開發的多人三維像素遊戲, 啟發於 Cube World, Minecraft 和 Dwarf Fortress. 目前該遊戲已經發布了 0.7 版本,雖然仍然在快速的開發當中,但是已經可以進行試玩.

Read more

「群集」引擎:數據驅動的遊戲引擎和應用框架

獨立遊戲開發者卡特·安德森發布了群集引擎(Bevy引擎)。這個引擎能用於開發遊戲和應用程式,它是免費的開源項目。它的架構充分地利用了Rust語言模塊化、速度和開發周期短的特點,可以跨平臺、三維渲染,相比競品,它的編譯時間更短,功能更豐富。

本次發布引擎的文章給出了性能測試的簡單報告。在迭代速度方面,群集引擎比其它項目都要快一到兩倍;在世界準備方面,群集引擎超過競爭品的平均值。這要歸功於群集引擎的工程設計——它將相同類型的組件內存緊壓在一起,提高程序的空間局部性,從而提高處理器緩存的效率。它還使用了無鎖並發的開發模式,提高並行計算的速度。

文章還給出了大量的示例代碼,來展示群集引擎的基本使用方法。針對傳統的「實體——組件——系統」(ECS)思想,群集引擎擴展出線程本地系統、多隊列、過濾器等開發模式,而且給出了更適合Rust語言的編寫方式。群集引擎的開發使用了特殊的「函數系統」寫法,可以在用戶給定的任何函數指針上擴展函數,從而方便地包裝任意函數到引擎需要的編程對象。這是通過為函數擴展函數,返回一個裝箱好的結構體來實現的。

文章還給出了圖形界面的簡單應用。在平面圖形方面,絕對和相對位置、父子關係、流式排版、文字圖形和可交互事件等常見的平面設計元素,都是被這個引擎兼容的。這款引擎很好地支持遊戲開發常見的「精靈表單」概念。它也支持立體圖形的複雜模塊、平滑鋸齒等等高級特性。一個非常好的功能是,這款引擎能動態重載場景,這尤其適合快速開發和需要更換材質包的場合。

群集引擎還包括遊戲音效等等諸多功能模塊。另外,它針對快速編譯也有特殊的修正。未來,它還將支持安卓、iOS、網頁等等平臺。「群集」的名字來自開發者對引擎發展的期望,希望未來它能吸引更多的開發者,擴展自己的社區。這款引擎已經有詳細的文檔,作者卡特·安德森希望更多的遊戲開發者都加入到群集引擎的生態裡來。

https://bevyengine.org/news/introducing-bevy/

++++++guiRapier:2D 以及 3D的物理引擎

Rapier 是100%使用 Rust 開發的物理引擎,可用於遊戲、動畫、機器人學的模擬。提供 2D 以及 3D版本

https://www.dimforge.com/blog/2020/08/25/announcing-the-rapier-physics-engine/

Rapier 一個跨平臺2D/3D物理引擎

#rust #graphics

Rapier.rs 是一個跨平臺的2D/3D物理引擎

支持多平臺物理模擬

支持導出/導入物理模擬某一過程的瞬時快照

(可選)使Rapier跨平臺在所有符合IEEE 754-2008的32位和64位平臺上具有確定性

在@dimforge命名空間發布了wasm NPM包,可以在任何現代瀏覽器中運行Rapier

我們以FOSS思維方式構建,旨在為Rust和Web社區提供有效的物理模擬框架

Repo

Gfx-rs

gfx-rs 是 Rust 實現的低級,跨平臺圖形和計算抽象庫,gfx-rs 社區的目標是使 Rust 中的圖形編程變得容易,快速和可靠。項目地址:https://github.com/gfx-rs/gfx

Rust實現的GUI應用SongRec

SongRec 是用 Rust 編寫的 Linux 下的開源 Shazam 客戶端。

Github連結,https://github.com/marin-m/SongRec

Learn Wgpu 系列簡化了之前Instancing的教程

作者表示之前的Instancing部分寫的泰國繁雜,作者喜歡展示各種不同的技術導致之前該章節與之前的章節相比顯得脫節,這次更新簡化了該教程。

教程地址:https://sotrh.github.io/learn-wgpu/beginner/tutorial7-instancing/#instancing

OrbTk 0.3.1-alpha3發布了

之前關注過Redox的應該知道OrbTk是他們團隊給該作業系統設計的Gui庫,現在這個庫在crates.io發布了最新的版本,相較於之前性能更好了,也有了新的主題切換引擎可以選擇。還更新了三種UI組件(ProgressBar,NumericBox,TabWidget)。

Read More:https://github.com/redox-os/orbtk/releases/tag/0.3.1-alpha3

用rust製作的一個Taskwarrior終端用戶界面

嗨,大家好!我一直在為rust的taskwarrior開發終端用戶界面,我想在這裡分享。您可以在發布頁面上找到原始碼和預編譯的二進位文件。

github連結

++++++dbGlueSQL:完全用Rust編寫的SQL資料庫,同時支持Wasm

GlueSQL 正處於早期階段,但它支持一些基本的SQL查詢。主要特點:

I also hope GlueSQL to take some roles which SQLite is doing, there exists too few SQL database implementations for frontend applications.

閱讀更多:GitHub Repo

一個新的sql資料庫:GlueSQL

現在還處於非常早期的階段,但是已經支持了基礎的SQL查詢。

地址: https://github.com/gluesql/gluesql

Oxigraph - 實現了SPARQL標準的圖資料庫

Oxigraph is a graph database implementing the SPARQL standard.

Official website: https://github.com/oxigraph/oxigraph

Oxigraph是一個實現了SPARQL標準的圖資料庫。宗旨是為了實現一個基於RockDB和Sled的K/V倉庫的兼容的,安全的,快速的圖資料庫。由Rust語言實現,Oxigraph同時也提供很多讀,寫和處理RDF文件的工具功能。

Oxigraph目前正在重度活躍的開發中,很多SPARQL的查詢評估還沒有經過優化。

Oxigraph的組件:

lib

python

js

server

wikibase

安裝和使用:

需要最新的穩定版本的Rust和Cargo安裝 同時也需要clang編譯RockDB。直接安裝就可以:

$ cargo install oxigraph_server

### build the fat binary at target/release/oxigraph_server
$ cargo build --release

### 用Docker Image
$ docker run --rm oxigraph/oxigraph --help

### run the docker webserver on port# 7878
### save the local data at /data
$ docker run --init --rm -v $PWD/data:/data -p 7878:7878 oxigraph/oxigraph -b 0.0.0.0:7878 -f /data

### build and run the wikibase server
$ cargo install oxigraph_wikibase
$ cargo build --release
$ cd target/release/
$ ./oxigraph_wikibase --mediawiki-api https://test.wikidata.org/w/api.php --mediawiki-base-url https://test.wikidata.org/wiki/ --namespaces 0,120 --file test.wikidata

## wikibase server from docker image
$ docker run --rm oxigraph/oxigraph-wikibase --help
$ docker run --init --rm -v $PWD/wikibase_data:/wikibase_data -p 7878:7878 oxigraph/oxigraph-wikibase -b 0.0.0.0:7878 -f /wikibase_data --mediawiki-api http://some.wikibase.instance/w/api.php --mediawiki-base-url http://some.wikibase.instance/wiki/

pgx 0.0.9 版本發布了

pgx 是用於再 rust 中的 PostgreSQL 框架,並儘可能做到安全和符合慣用的習慣。

pgx支持 Postgres v10,v11 和 v12。

詳情請見:https://github.com/zombodb/pgx/releases/tag/v0.0.9

++++++webRust與單頁面網頁應用

網頁彙編(WebAssembly)是常見的網頁編程方式,十分之九以上的瀏覽器都支持它。本篇文章裡,作者嘗試搭建只有一個網頁、一兩行JavaScript代碼的網頁應用。這樣的應用應該只在一個頁面裡加載內容,就可以訪問多個模塊,而不需要頁面刷新,能復用多個網頁的用戶交互模塊,還能同時更新不同層次的用戶頁面。作者給了出這種前提下的設計方法,還提供一個設計好的網購網站作為例子。

完成整個開發流程,需要安裝Rust和它與網頁彙編相關的工具鏈。文章挑選了Rust語言的yew項目作為開發框架,將網購的商品、購物車、交互信息等等都抽象成Rust語言的結構體和枚舉類型,最終完成開發目的。每次用戶交互,都會通過一個特殊的「生命圈」方法傳給狀態機,最終狀態機將重新繪製用戶界面,達到更新用戶界面的目的——比如按下加入購物車的按鈕,側邊欄的總價信息將會相應改變。

本篇文章的開發方法中,初始化部分的信息也是由接口提供的。後端服務將訪問後續的結構,得到所有的信息,通過應用程式接口和消息結構返回,如果出錯也會給出錯誤的類型。不同的頁面之間通過層次結構相互關聯,但不同層次的結構共同維護一個全局狀態存儲空間,以給出數據同步的解決方案。在文章的例子裡,所有頁面共享同一個購物車內容,這是通過全局狀態實現的。狀態還可以提升到不同的層級,比如提高側邊欄頁面的狀態,我們就能在所有頁面同時顯示一個相同、統一的側邊欄。

文章使用了yew社區提供的大量方便的抽象設計,這和Rust語言靈活的宏系統是分不開的。雖然文章給出的設計方法仍有一定提升空間,作者也在探究問題的解決方案,他希望將來這能作為流行的Vue、React等網頁設計框架的替代品。

http://www.sheshbabu.com/posts/rust-wasm-yew-single-page-application/

valerie 項目 - 讓我們在 Rust 中重新思考 Web 應用程式

作者在 Rust 中嘗試並看到了各種 Web 應用程式前端框架。老實 說,這些框架很好,工作也做得很好。但它們也有一些缺點,比如理解 API 需要一條陡峭的曲線,隨著應用程式大小的增長,代碼會變得越來越複雜。

基於這些原因,作者實現了 valerie 項目,一個使用 Rust 寫 web 應用程式的前端框架。

該框架有如下特點:

目前尚處於早起開發階段:https://github.com/emmanuelantony2000/valerie

使用示例:

use valerie::prelude::components::*;
use valerie::prelude::*;

fn ui() -> Node {
h1!("Hello World").into()
}

#[valerie(start)]
pub fn run() {
App::render_single(ui());
}

++++++toolsterm-fireworks - 在終端裡編入煙花效果

term-fireworks - Fireworks for your terminal

https://blog.darrien.dev/posts/fireworks-for-your-terminal/

https://gitlab.com/DarrienG/term-fireworks

給終端窗口加入煙花效果。Firworks 是給 terminal 終端寫的煙花效果的窗口。在Rust編程中你只需cargo install firworks 就可以下載和安裝可執行文件,目前只支持Linux和MacOS。

運行:

$ firworks
$ firworks --seed 8675309

dircpy

dircpy

https://github.com/woelper/dircpy

一個遞歸複製文件夾的工具庫。

use dircpy::*;

// Most basic example:
copy_dir("src", "dest");

// Simple builder example:
CopyBuilder::new("src", "dest")
.run()
.unwrap();

// Copy recursively, only including certain files:
CopyBuilder::new("src", "dest")
.overwrite_if_newer(true)
.overwrite_if_size_differs(true)
.with_include_filter(".txt")
.with_include_filter(".csv")
.run()
.unwrap();

Rust 中逼真的流體模擬

用戶可以使用這些引擎模擬和渲染用 YAML 語言描述的場景。

Jan Bender 和 Dan Koschier 在該領域的論文《用於基於流體和固體的物理模擬的平滑粒子流體動力學技術》(Smoothed Particle Hydrodynamics Techniques for the Physics Based Simulation of Fluids and Solids),是對流體模擬的出色介紹。

Github 連結,https://github.com/AudranDoublet/opr

EBU R128 庫 ebur128

ebur128 庫,是EBU R128 標準的純 Rust 實現。其是將 C 語言開發的 libebur128 庫代碼移植到了 Rust,在保持 API 和性能不變的同時,提供完全相同的結果。

EBU R128,是_歐洲廣播聯盟_(European Broadcasting Union)出的一個關於_響度_(Loudness)控制的建議書(Recommendation),是用來通知廣播公司如何分析和標準化音頻,以使每段音頻聽起來與人耳的音量大致相同。

crate 連結,https://crates.io/crates/ebur128

Github 連結,https://github.com/sdroege/ebur128

Rust Search Extension 0.11版發布

主要新功能如下:

連結:https://rust.extension.sh/changelog/

cargo-build-tree

cargo build 過程圖形化展示工具

https://github.com/Nemo157/cargo-build-tree

tickrs | 實時滾動數據終端,用tui-rs打造。

tickrs | Realtime ticker data in your terminal. Built with tui-rs.

https://github.com/tarkah/tickrs

https://i.imgur.com/4Izc2dz.mp4

用tui-rs打造應答機模式的實時滾動數據終端。

受gotop啟發,看到又搞了一個Rust語言版的ytop 超級興奮,於是自己搞了一個TUI的APP來跟蹤實時股票數據。考慮到要讓沒有API Key的用戶都可以體驗,最後選擇了用Yahoo Finance的後臺數據。

Cargo

cargo install tickrs

Usage

tickrs 0.3.3
Realtime ticker data in your terminal 📈

USAGE:
tickrs [FLAGS] [OPTIONS]

FLAGS:
-h, --help Prints help information
--hide-help Hide help icon in top right
-V, --version Prints version information

OPTIONS:
-s, --symbols <symbols>... Comma separated list of ticker symbols to start app with

特別感謝:

cargo-llvm-lines

LLVM IR 代碼生成的越多,編譯的時間越長. 這個工具可以幫你計算出每一個模板函數生成的 LLVM 中間代碼的數量,從而幫助你找出可以減少編譯時間的一些優化點.

Read more

ffmpeg-next 4.3.6 發布

ffmpeg-next是一個安全的FFmpeg wrapper

Read More

Rust實現的CLI工具criu-image-streamer

CRIU(https://www.criu.org/) 是 Linux 平臺在用戶空間實現檢查點/還原(Checkpoint/Restore)功能的工具軟體。

criu-image-streamer 是用 Rust 編寫的一個CLI工具,實現在檢查點/恢復期間以低開銷啟用與CRIU之間的圖像流傳輸,其每個子命令的圖像數據流如下:

capture:CRIU → criu-image-streamer → shards 分片

serve:shards 分片 → criu-image-streamer → CRIU

extract:shards 分片 → criu-image-streamer → images-dir

Github連結,https://github.com/checkpoint-restore/criu-image-streamer

關於群集(Bevy)引擎ECS框架中system的語法糖是怎麼實現的

群集(Bevy)引擎中的system就是普通的Rust函數,這樣的設計及其符合人體工程學,就像作者本人在群集(Bevy)引擎的介紹中說的那樣,目前找不到比群集引擎更符合人體工程學的ECS框架設計了。

推特上有人簡單分析了一下群集引擎中這部分代碼的語法糖是怎麼實現的,考慮到不少小夥伴並不能夠隨時訪問推特,在這裡我把大概意思搬運過來。

system作為普通的Rust函數,它的參數也就代表了需要訪問的那些組件的查詢。群集提供的主要示例非常引人注目,系統就是函數,組件就是結構體,你不需要實現額外的trait,就能夠讓ECS框架正常運作。

use bevy::prelude::*;

struct Velocity(f32);
struct Position(f32);
// setup這個函數就是一個系統
// 這個系統把由Postion和Velocity組件構建的實體spawn到了commands緩衝區內
fn setup(mut commands:Commands) {
commands
.spawn((Position(0.0),Velocity(1.0),))
.spawn((Position(1.0),Velocity(2.0),));
}
// 該系統的參數就是我們要查詢的組件構成的實體
fn movement(position:Mut<Position>,velocity:&Velocity) {
position.0 += velocity.0;
}
// 這是應用的入口,希望你把上面寫好的系統註冊到要運行的App中
fn main() {
App::build()
.add_startup_system(setup.system())
.add_system(movement.system())
.run();
}

就像上面的示例一樣,只要按照一定的規則寫出函數,在App的構建模式中調用.system()方法就可以把函數變成系統。

一個普通的Rust函數在調用system()這個方法之後,將被轉換為一個Box<dyn System>,對於群集支持的兩種系統,採用IntoForEachSystem和IntoQuerySystem這兩個trait進行轉換。

// 具體代碼可以去群集的文檔裡看,這裡只舉例了IntoQuerySystem這個trait
pub trait IntoQuerySystem<Commands,R,Q> {
fn system(self) -> Box<dyn System>;
}

有了trait之後只需要把trait實現給我們可能會調用的函數,一個一個函數的去實現肯定是不可能的,翻看群集的這部分源碼能夠看到大量的使用了宏:

具體的代碼可以去看群集的源碼,總結來說,群集實現的這種及其符合人體工程學的ECS架構,就是基於宏加上trait來實現的。宏的部分十分值得仔細研究,推特原文作者也是正在研究其中的東西,截至日報更新時還沒有新的成果,後續可以直接去關注該條推特。

推文連結:https://twitter.com/yaahc_/status/1293567953875505152?s=20

wowAddonManager - 管理Linux上《魔獸世界》的插件

@mreimsbach在Linux玩魔獸世界時,想要一個TUI(Terminal User Interface)工具來管理插件,儘管已經有類似的項目了,可他還是用Rust重寫了一個。玩了一會兒魔獸,才發現還是Rust香。

Read More

MeiliSearch 0.13版

MeiliSearch 是Rust寫的一個類似 Algolia Search 的開源版搜尋引擎。

連結:https://blog.meilisearch.com/whats-new-in-0-13-0/

Rust 寫的 Signal Messenger 命令行客戶端

gurk-rs 是一個使用 Rust 編寫的 Signal Messenger 命令行客戶端. 可以體驗一下命令行下聊天的快樂.

Read more

teloxide:一個優雅的Telegram bot框架

teloxide 是一個功能齊全的,用來創建 tg-bot 的框架。

Repo

Read More

用 Rust 重寫的一系列命令行工具

Shell 是每個程式設計師的必備工具,對其越熟悉效率就越高。一些用 Rust 實現的命令行工具,旨在為現有的 shell 命令提供現代的,通常也更快的替代方案。

bat 是具有語法高亮和集成Git的新型cat,可在 Windows,MacOS 和 Linux 上使用。

fd是一種快速而用戶友好的新型find。按名稱查找特定文件,fd PATTERN而不是find -iname 'PATTERN'。默認情況下忽略隱藏目錄.gitignore等。

。。。

nushell 是個基於Unix原理的,Rust 實現的一種新型 shell。

更多參見文章,https://zaiste.net/posts/shell-commands-rust/

++++++ffi用Rust語言開發Firebird的Ruby語言擴展庫。

A new Firebird Extension Library for Ruby

https://github.com/fernandobatels/rbfbclient

一個新版本的 Firebird 的 Ruby 語言擴展庫,用 Rust 而不是傳統的 C 語言開發而成。

目的:

- Connections
- Transactions
- Execute statements
- Query statements
- Cursor
- Replace the Firebird Extension Library on ActiveRecord Firebird Adapter

安裝:

$ gem 'rbfbclient'
$ bundle
$ gem install rbfbclient

Julia 的 Rust 綁定庫

jlrs 的目標是對 Julia C API 提供一個簡單安全的接口. 目前該 crate 只在 Linux和Windows上測試通過, 且只支持 Julia 1.5.0, 不兼容之前版本的 Julia.

有興趣同學可以訪問其 Github

google/autocxx - 高度自動化的rust調用c++,而且安全,時尚

這個項目是一個從Rust中調用c++的工具,以一種高度自動化但安全的方式。

這樣做的目的是,在使用bindgen的一個變體從現有的c++頭文件自動生成接口的同時,也具有來自cxx的所有流暢安全性。可以把autocxx看作是將bindgen插入cxx的膠水。

它的目的是最終公開一個過程宏,如下所示:

class Bob {
public:
Bob(std::string name);
...
void do_a_thing();
}

use autocxx::include_cxx;

include_cxx!(
Header("base/bob.h"),
Allow("Bob"),
)

let a = ffi::base::bob::make_unique("hello".into());
a.do_a_thing();

Github 連結,https://github.com/google/autocxx

Chrome 的 Rust 與 C++ 的互操作性

這是 www.chromium.org 上關於 chromium 內存安全的一篇博文,Chrome 工程師正在嘗試 Rust。在可預見的將來,C++ 仍然在代碼庫中佔據主導地位,所以如果任何地方使用 Rust,都需要考慮與 C++ 相適應。這似乎提出了一些 C++/Rust 互操作性的挑戰,而在這之前其他人都沒有遇到過。

更多詳情請看:https://www.chromium.org/Home/chromium-security/memory-safety/rust-and-c-interoperability

Rust寫數據可視化的一個小教程

該文用到了plotly庫,是一個可以動手實驗的小教程。

教程原文:https://shahinrostami.com/posts/programming/rust-notebooks/box-plots-at-the-olympics/

「Rust沒有穩定的ABI」

作者見過GNOME的用戶(通常是在C庫上工作了很長時間的人)表達以下問題:

編譯的Rust代碼沒有穩定的ABI(應用程式二進位接口)。

因此,我們不能使用傳統的Linux發行版共享庫。

同時,Rust還將其整個標準庫與它所編譯的每個二進位文件捆綁在一起,這使得Rust構建的庫非常龐大。

作者是那種認為大部分基礎設施都應該用Rust重寫的人,所以這些問題,也是作者本人非常關注的事。

因此作者寫了一篇關於這個問題文章。

Read More:https://people.gnome.org/~federico/blog/rust-stable-abi.html

Sana: 更簡單的詞法生成器

Sana是Rust的詞法生成器,提供了一種簡單的方法來為語言創建詞法分析器。

https://github.com/suhr/sana

SPIR-Q 輕量級的SPIR-V reflection 庫

SPIR-Q 0.4.2 released. SPIR-Q 是一個輕量級的 SPIR-V reflection 庫.

Read more

++++++Embeddedembedded-time 發布 v0.10

embedded-time,提供了一個完整的持續時間(Duration)和速率(Rate)類型庫,以及硬體計時器/時鐘的時鐘(Clock)抽象以及嵌入式系統中的即時(Instant)類型。此外還提供了軟體計時器的實現。

use embedded_time::{duration::*, rate::*};

let micros = 200_000_u32.microseconds(); // 200_000 ╬╝s
let millis: Milliseconds = micros.into(); // 200 ms
let frequency: Result<Hertz,_> = millis.to_rate(); // 5 Hz

assert_eq!(frequency, Ok(5_u32.Hz()));

crate 連結,https://crates.io/crates/embedded-time

在Arduino Uno上面跑 Rust 程序

很久之前,為了在 Arduino上跑 Rust,還必須安裝專門經過改造支持 AVR 的 Rust 編譯器 :rust-avr 。一個月之前,rust-avr 已經被合併到了 Rust master 分支,這意味著你在 Nightly 下就可以玩 Arduino了。

並且包含了一本新書 The AVR-Rust Guidebook : https://book.avr-rust.com/

rust-avr 項目官網: https://www.avr-rust.com/

這篇文章就是一個教程。

https://dev.to/creativcoder/how-to-run-rust-on-arduino-uno-40c0

via https://t.me/rust_daily_news/4495

裸機上使用 Rust 泛型 1/2

作者通過自己的驗證, 證實 Rust 在嵌入式領域中完全可以開發工業級標準的軟體. 通過一個真實的例子, 如何為兩個不同的快閃記憶體設備晶片來抽象一個統一讀寫的接口, 來介紹如何在嵌入式中使用泛型.

Read more

Rust on Arduino Uno

這是作者使用 Rust 在 Arduino 上實踐的系列博文的第一篇,如何在 Arduino Uno 上點亮小燈💡。在撰寫本文時,大約一個月前,avr-rust 分支被合併了(https://github.com/rust-lang/rust/issues/44052)。 這意味著現在可以通過僅運行cargo + nightly 構建,為目標(avr-unknown-unknown)提供一個 .cargo/config.toml 來為 avr 微控制器板編譯 Rust 程序。

更多請看原文:https://creativcoder.dev/rust-on-arduino-uno 21世紀的Rust 嵌入式開發工具

https://ferrous-systems.com/blog/21st-century-embedded-tooling/

Alacritty 發布 v0.5

Alacritty 是一款跨平臺,GPU加速的終端仿真器,非常注重簡單性和性能,當前支持的平臺有:macOS,Linux,BSD和Windows。

v0.5 新增功能:

Github連結,https://github.com/alacritty/alacritty

++++++asyncAsync 項目比較

Rust 的將異步代碼引入語言的方法比較新穎,它沒有將異步系統與語言打包在一起,例如 Golang 提供的內置 goroutine 的方法,而是提供了一個接口,供獨立的庫開發人員使用以實現異步給定進程的運行時。所以博文對 Futures、Tokio、async-std、smol、Actix、embrio、Bastion 這些 async 生態的庫做了個總結,更多請看原文:https://runrust.miraheze.org/wiki/Async_crate_comparison#Comparison_of_Async_Ecosystems

async-rwlock

stjepang 的新輪子 async-rwlock(https://github.com/stjepang/async-rwlock),異步讀寫鎖。這種類型的鎖允許在任何時間點上有多個讀取器或一個寫入器。

示例:

use async_rwlock::RwLock;

let lock = RwLock::new(5);

// Multiple read locks can be held at a time.
let r1 = lock.read().await;
let r2 = lock.read().await;
assert_eq!(*r1, 5);
assert_eq!(*r2, 5);
drop((r1, r2));

// Only one write lock can be held at a time.
let mut w = lock.write().await;
*w += 1;
assert_eq!(*w, 6);

async-pidfd: Rust版的pidfd

Process file descriptors (pidfd) 是 Linux 無競爭進程管理方式,async-pidfd 為 pidfd 提供了 Rust 支持。

https://github.com/joshtriplett/async-pidfd

《異步求生》:Rust語言異步開發與調試技巧

Rust語言的異步(async)特性是非常棒的,一旦異步代碼出現情況,我們可以用更好的方法處理錯誤,也有相應的方法完成調試、測速過程。文章詳細描述了Rust異步開發裡常見的幾個工具,包括如何讓錯誤提示更漂亮;還有一些異步開發常見的問題,包括相同的任務是否曾被傳送到不同的線程執行。這些方法對調試Rust異步代碼都是相當有幫助的。

https://fasterthanli.me/articles/surviving-rust-async-interfaces

使用Rayon的並行流處理

大多數Rust的程式設計師都聽說過Rayon,它是一種使向程序引入並行性變得非常容易的一個包。在本文中,我們將研究如何將Rayon應用於基本流處理。

要運行這篇博客文章中的示例,創建一個目錄,在其中運行cargo init -—bin並編輯生成的貨物。toml包含以下依賴項:

[dependencies]
rayon = "1.3.1"
serde_json = "1.0.57"

示例中的代碼將被轉到src/main.rs。您可以使用cargo run -release來運行它。

文章連結

github連結

smol vs tokio vs async-std;

Hello,與tokio和async-std相比,我試圖更好地了解smol(和相關依賴包)背後的動機。更籠統地說,我想確保對當前的異步世界有足夠的了解!

文章連結

++++++job++++++testraft-playground

raft-playground

https://github.com/Diggsey/raft-playground

一個同來模擬和測試raft集群的應用,用到raft-zero。 Rapier物理引擎的性能測試

Rapier在前兩天公布源碼的同時還發布了這篇blog。

地址:https://www.dimforge.com/blog/2020/08/25/announcing-the-rapier-physics-engine/

不僅有和box2d與physx的性能對比測試,這篇blog還將目前的功能與前作nphyscis進行了對比,並表示將在未來幾個月將缺失的功能給完善。同時提供了Bevy的官方插件:https://github.com/dimforge/bevy_rapier

論文中提到本來也有一個專門給Amethyst引擎實現的插件,但是目前Amethyst正在遷移他們的ECS後端。等這部分工作完成之後,才會給Amethyst提供官方維護的物理引擎插件。

修復include_bytes!宏

include_bytes!宏大家應該都用過,作者在使用的過程中發現並不是那麼好用,有些地方不能達到作者的預期,這篇blog介紹了作者遇到的一些問題,以及作者是如何修復這些問題的。

Read More:https://jack.wrenn.fyi/blog/include-transmute/

相關焦點

  • 2020山東考研英語詞彙:august的中文意思
    山東中公教育小編為了方便大家更好的備戰2020山東考研政治,特為大家帶來「2020山東考研英語詞彙:august的中文意思」希望大家能在平時多加溫習,牢牢記住。預祝大家備考順利!
  • 說你「august person」可不是「八月的人」,而是在大力誇你!
    但是,如果有人說你「august person」可不是「八月的人」,而是在大力誇你!為啥意思不一樣了?趕緊來看看!1)August personAugust means someone or something is dignified and impressive.
  • Day 195| august.
    ①at the drop of a hat②a drop in the bucket③put sb on the spotps:要是忘記了,可以在公眾號主頁右上角找到搜索按鈕,輸入該單詞或俚語,即可顯示該單詞所在的推文哦august
  • 蔡徐坤為什麼叫august 在哪直播視頻直播ID是多少
    偶像練習生蔡徐坤通過自己的實力證明了自己,也讓更多的人了解這個外冷內熱的男孩,那麼蔡徐坤為什麼叫august?蔡徐坤在哪直播視頻?下面就一起來了解一下吧!  蔡徐坤為什麼叫august  蔡徐坤的英文名字就是叫august,中文翻譯為「奧格斯」,是非常有意義的名字。並且這個英文名給人的印象非常上進,喜歡自由而且有個性。
  • 《秋月茶室》(The teahouse of the august moon)
    片名:《秋月茶室》(The teahouse of the august moon)  上映年度:1956年  影片級別:G  影片類型:喜劇、諷刺  片長:2小時4分鐘  出品公司:美國米高梅電影製片公司
  • 蔡徐坤為什麼叫august什麼意思 蔡徐坤在哪直播ID號多少
    蔡徐坤的英文名字就是叫august,中文翻譯為「奧格斯」,是非常有意義的名字。
  • Blue Days With Earache
    I take medicine that has no useGod you should pay me duesI cannot close my mouthMy teeth trembling like a mouseI feel the voice rapidly dying downWorse than my down days
  • These Days在哪聽 These Days完整歌詞介紹翻譯
    , these days  回憶著從前的美好  All our troubles  一切煩憂  We'll lay to rest  都不再糾纏你我  And we'll wish we could come back to these days  我們只希望能回到從前  These days
  • Take That: These Days
    Before the light is goneTake me backTo where it all beganTo where our memories growBefore the day goes offTonight we gotta live forWe gotta live for these days
  • There Are Two April Fools' Days This Year. No, Really.
    It can be pretty difficult to get people to agree on just about anything these days.For example, I think we can all agree that we're currently in the final days of May, which will inevitably give way to June and another blazing Beijing summer... right?Wrong!
  • 每日新聞播報(August 25)
    每日新聞播報(August 25) chinadaily.com.cn 2020-08-25 16:25
  • In a few days與soon and later之間的區別,until與by之間的區別
    in a few days或者是a few days later 都是可以的。例:The matter will rectify itself in a few days.那件事過幾天就會變好。I am leaving for sydney in a few days' time.
  • In a few days、one of these days與sooner and later之間的區別,你知道嗎?
    in a few days或者是a few days later都是可以的。例:The matter will rectify itself in a few days.那件事過幾天就會變好。I am leaving for sydney in a few days' time.
  • 100 DAYS COUNTDOWN CEREMONY
    The 100 days countdown ceremony of IAAF World Championships is held near Bird Nest. Many track and field legends attend the ceremony, including Michael Johnson, Colin Jackson, and Mike Powell, etc.
  • 「on blue days」是什麼意思?
    on blue days:在憂鬱的日子(時候)。Everybody has blue days.每個人都會有悲傷的日子。Everybody has blue days.On blue days you feel like you are Inward helpless and hopeless. 在憂鬱的日子裡,你會覺得內心無助和無望。
  • 每日新聞播報(August 21)
    A medical worker conducts a nucleic acid test for a child in Dalian, Liaoning province, on July 30, 2020.
  • at、on和in時間思維補充及in two days和two days later表達區別
    好的,下面我們來簡單說一下in two days和two days later的表達區別,這兩個漢語意思都是 兩天後,其中:in two days表示:在將來你要去做的一件事情,>如:I am going to the US in the two days.
  • 啟蒙兒歌 Days Of The Week
    Monday,Tuesday,Wednesday 周一,周二,周三 Thursday,Friday,Saturday,Sunday 周四,周五,周六,周日 The days
  • 史上今日:August 14
    The blackout happened on one of the hottest days of the year, with temperatures of up to 32C.and Churchill was shrouded in secrecy   1941: Secret meetings seal US-Britain alliance   Artificially 1969: FilmTheTheAAThe The Prime Minister, Winston Churchill, has spent the last few days
  • Lazydays Holdings2020財年中報歸母淨利潤772.70萬美元 同比增加...
    7月31日Lazydays Holdings(股票代碼:LAZY)公布財報,公告顯示公司2020財年中報歸屬於母公司普通股股東淨利潤為772.70萬美元,同比增長678.15%;營業收入為4.05億美元,同比上漲18.5%。