【Rust日报】 2019-09-06
文字RPG
作者之前寫過 MUDdy 像MUD的純文字互動遊戲,但只是單機的
Read more
最近也用Rust寫了 RCRPG
這是一個 Rosetta Code 裡的題目,Rosetta Code是一個把基礎的程式問題用各種語言實作一遍的網站,大家有興趣也可以來幫忙Rust的實作更完整。
fastwfc-rs: libfastwfc 的 Rust 綁定庫
libfastwfc 是一個學術用波函數折疊的庫
目前還非常的小 codebase 也才400行 應該是可以直接用Rust快速重寫的庫
Iced 與渲染無關的GUI庫,專注於簡單與類型安全。參考Elm
Texture Synthesis 材質合成補完的庫 來自 embark.games
這個團隊使用rust來開發各種功能,且用UE4開發他們的場景Demo,
非常厲害的團隊。
Fuzzcheck 針對Rust功能的覆蓋率提升工具
給定函數 Test:(T) - > Bool,它會試圖找到一個回傳false或導致崩潰的T類型的值。
比如你有個長的很醜的函數長這樣
extern crate my_library;
extern crate fuzzcheck;
use fuzzcheck::fuzzer;
extern crate fuzzcheck_input;
use fuzzcheck_input::integer::IntegerGenerator;
use fuzzcheck_input::vector::VectorGenerator;
fn test(input: &Vec<u8>) -> bool {
// property test goes here
if
input.len() > 7 &&
input[0] == 0 &&
input[1] == 167 &&
input[2] == 200 &&
input[3] == 103 &&
input[4] == 56 &&
input[5] == 78 &&
input[6] == 2 &&
input[7] == 254
{
false
}
else {
true
}
}
fn main() {
let u8_gen = IntegerGenerator::<u8>::new();
let vec_gen = VectorGenerator::new(u8_gen);
let _ = fuzzer::launch(test, vec_gen);
}
然後去給他跑,他就跑出一個
NEW 180086 score: 493 pool: 48 exec/s: 132713 cplx: 79792
NEW 表示將新輸入添加到有興趣的輸入池中
180086 是到目前為止執行的迭代次數
得分:493 是池中所有輸入引起的總代碼覆蓋率的度量
pool:48 是池中的輸入數
exec / s:132713 是每秒執行的平均迭代次數
cplx:79792 是池中輸入的平均複雜度
最後他會找到return false的條件
================ TEST FAILED ================
188241 score: 495 pool: 51 exec/s: 132659 cplx: 81373
Saving at "./fuzz/fuzz_targets/target1/artifacts/1c10daa13e9b1721.json"
而這個1c10daa13e9b1721.json檔裡面會長這樣
[0, 167, 200, 103, 56, 78, 2, 254]
跟我們的程式碼條件一樣
input.len() > 7 &&
input[0] == 0 &&
input[1] == 167 &&
input[2] == 200 &&
input[3] == 103 &&
input[4] == 56 &&
input[5] == 78 &&
input[6] == 2 &&
input[7] == 254
rust 中哪個 protobuf庫 比較好用?
我有大量(1000+)個protobuf類型分佈在數百個不同的.proto文件中。
不知道有什麼庫可以一次幫這所有的 .proto 文件全部轉成 rust 宣告?
目前已經試過 prost, rust-protobuf 但感覺差強人意
prost的問題是沒辨法處理大量複雜相依的 .proto
rust-protobuf可以處理大量複雜相依的 .proto,但他發現一個問題發了一個PR但沒人理
他覺得這些專案的維護者是不是不想讓他們的庫愈來愈好?
From 日报小组 Damody
日报订阅地址:
独立日报订阅地址:
社区学习交流平台订阅: