剖析 angr 的效能
angr 是樓主寫的一個程式,功能是記錄使用者花在每個程式的時間
最近樓主覺得這個程式跑的太慢了想來加速一下
發現這個程式會讓你在執行任何命令前先花個0.22秒做記錄
其實這個程式並不是真的需要更快,樓主主要用這個程式在手機上
記錄他手機執行各種程式的時間。
一開始他決定使用 cargo-profiler
他發現大部份時間用在記憶體配置,且很可能是在BTreeMap裡
然後再用 Linux perf 跑看看,發現分析結果與 cargo-profiler 相同
再用火焰圖跑看看
發現augr只是因為需要加載的檔案變多而變慢!
在這一點上,樓主決定花點時間調查問題來修復它。他添加了一些代碼來追踪加載時間,
這時的樓主想了很多方法要來優化檔案加載數量過多的問題。
在進行了一些更麻煩的調查後,樓主確定程式的大部分時間都在執行,而不是加載文件。
最後他發現了主要原因在 clone ,樓主很大量的使用了clone
在做了必要的改動,減少了大量的clone之後,效能得到了提升
優化到了 0.02 秒!
剖析性能很有趣! 在這種情況下,只需進行兩個簡單的更改並獲得10倍的改進。
本來樓主認為需要各種瘋狂的緩存系統才能讓augr更快。 但並不需要那樣的東西!
glint 用Rust編寫的commit 提示工具
可以更智慧的送交git
為什麼 "🤦🏼♂️".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
將Rust作為第一個學習的編程語言是否太狂了?
這個問題在reddit蠻多人討論的,所以也列一下
大多數Rust開發人員都是先學習了其他語言
Rust將很多語言的概念結合在一起,當你知道其他語言中存在的問題時,這些概念很有意義。
但這是因為Rust不是我們第一個學的語言
每個語言有自己擅長的特點,Rust的確不好學習
大部份的初學者如果不要挫折感太重,
還是建議從腳本語言開始 ex. javascript, python, lua
有沒有人願意幫Rust實現一個GCC的前端實作?
GCC 的開發者 Jacob Lifshay,覺得用Rust的程式取代 GCC自己的C是一個可行的方向
過去有@redbrain的寫過的gccrs 18是rust 1.0,但已經太舊了
如果有開發者願意幫忙,請聯絡 Stallman
這是一個Rust影響GCC的好機會
有實力又有興趣的大佬可以參考
From 日报小组 @Damody
日报订阅地址:
独立日报订阅地址:
社区学习交流平台订阅:
评论区
写评论还没有评论