< 返回版块

damody 发表于 2019-09-09 17:46

Tags:rust

剖析 angr 的效能

angr 是樓主寫的一個程式,功能是記錄使用者花在每個程式的時間

最近樓主覺得這個程式跑的太慢了想來加速一下

發現這個程式會讓你在執行任何命令前先花個0.22秒做記錄

其實這個程式並不是真的需要更快,樓主主要用這個程式在手機上

記錄他手機執行各種程式的時間。

一開始他決定使用 cargo-profiler

他發現大部份時間用在記憶體配置,且很可能是在BTreeMap裡

然後再用 Linux perf 跑看看,發現分析結果與 cargo-profiler 相同

再用火焰圖跑看看

image alt

發現augr只是因為需要加載的檔案變多而變慢!

在這一點上,樓主決定花點時間調查問題來修復它。他添加了一些代碼來追踪加載時間,

這時的樓主想了很多方法要來優化檔案加載數量過多的問題。

在進行了一些更麻煩的調查後,樓主確定程式的大部分時間都在執行,而不是加載文件。

最後他發現了主要原因在 clone ,樓主很大量的使用了clone

在做了必要的改動,減少了大量的clone之後,效能得到了提升

優化到了 0.02 秒!

剖析性能很有趣! 在這種情況下,只需進行兩個簡單的更改並獲得10倍的改進。

本來樓主認為需要各種瘋狂的緩存系統才能讓augr更快。 但並不需要那樣的東西!

Read more

glint 用Rust編寫的commit 提示工具

可以更智慧的送交git

image alt

Read more

為什麼 "🤦🏼‍♂️".length == 7 會對

樓主對unicode與emoji的字串長度做了深度討論

首先比較不同語言得到的長度

原因是 UTF-32 UTF-16 UTF-8 所造成的

$ python3
Python 3.6.8 (default, Jan 14 2019, 11:02:34) 
[GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> len("🤦🏼‍♂️") == 5
True
>>> 
$ cargo new -q length
$ cd length
$ echo 'fn main() { println!("{}", "🤦🏼‍♂️".len() == 17); }' > src/main.rs
$ cargo run -q
true

Read more

將Rust作為第一個學習的編程語言是否太狂了?

這個問題在reddit蠻多人討論的,所以也列一下

大多數Rust開發人員都是先學習了其他語言

Rust將很多語言的概念結合在一起,當你知道其他語言中存在的問題時,這些概念很有意義。

但這是因為Rust不是我們第一個學的語言

每個語言有自己擅長的特點,Rust的確不好學習

大部份的初學者如果不要挫折感太重,

還是建議從腳本語言開始 ex. javascript, python, lua

Read more

有沒有人願意幫Rust實現一個GCC的前端實作?

GCC 的開發者 Jacob Lifshay,覺得用Rust的程式取代 GCC自己的C是一個可行的方向

過去有@redbrain的寫過的gccrs 18是rust 1.0,但已經太舊了

如果有開發者願意幫忙,請聯絡 Stallman

這是一個Rust影響GCC的好機會

有實力又有興趣的大佬可以參考

Read more


From 日报小组 @Damody

日报订阅地址:

独立日报订阅地址:

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页