【Rust日报】 2019-09-09:glint 用Rust編寫的commit 提示工具

2019-09-11 16:28:44 浏览数 (1)

剖析 angr 的效能

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

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

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

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

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

一開始他決定使用 cargo-profiler

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

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

再用火焰圖跑看看

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

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

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

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

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

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

優化到了 0.02 秒!

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

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

Read more

glint 用Rust編寫的commit 提示工具

可以更智慧的送交git

Read more

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

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

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

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

代码语言:javascript复制
$ 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
>>>
代码语言:javascript复制
$ 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

gcc

0 人点赞