【Rust日報】 2019-05-08:Rust併發的實踐研究

關於await語法,官方已經安排上了

#awaitjavascript

圖片


嘗試在Cloudsmith上發佈你的crate

#cloudsith #registryhtml

Cloudsmith是Puppet Labs旗下的DevOps平臺,目前支持Cargo。你能夠把Cloudsmith做爲crates.io以外的私人registry。前端

本文介紹瞭如何使用cloudsmith-cli工具將你的crate發佈到它的平臺上。java

  • Read Moreweb

  • cargo registry 相關文檔chrome


「論文」Rust併發的實踐研究

#concurrency #hashmapapi

該論文經過實現一個併發無鎖HashMap來研究Rust類型系統如何影響併發數據結構的開發和改進。他們的代碼庫concache在GitHub上公開,是Rust語言中最快的併發HashMap之一,能夠幫助下降併發程序中的瓶頸。數組

  • Read More瀏覽器

  • Paper pdf前端工程師

  • concache


使用Chrome對Rust進行全自動單元測試

#UnitTest #chrome

stretch的做者寫的一篇博客。stretch是一個跨平臺的FlexBox引擎。在Visly公司,該做者正參與一個爲前端工程師構建的設計工具,其中用到FlexBox,須要在不使用WebView的狀況下保持Web、iOS和Android三端保持相同的佈局。意味着在移動設備上覆制Web的佈局。

這篇文章裏,做者介紹了使用stretch的單元測試方案,是一套自動編寫自動化測試的方案,他們稱其爲gentest系統。大概原理以下圖:

圖片

全部的測試用例都用html文件來描述,而且包含id =「test-root」的佈局。而後gentest使用WebDriver將此文件加載到Chrome head-less瀏覽器中。加載後,gentest將經過WebDriver向瀏覽器詢問每一個DOM節點的樣式,大小和位置等信息,而後利用此信息,gentest再生成Rust單元測試,用於構建三端等效的FlexBox樹給stretch api使用。最後能夠統一經過cargo test來完成測試。

gentest的另外一個好處是,由於每一個測試只是一個html文件,只需打開文件就能夠在瀏覽器中顯示它。而且他們還利用gentest生成一套基準測試,確保性能不會退化。

gentest有什麼黑科技嗎?

它也是開源的,我翻了一下源碼,主要是三步:

  1. 使用quote!來構建待生成測試代碼的模板(TokenSteam)

  2. 將這些模板填充之後從TokenSteam轉稱字符串。

  3. 使用fs::write寫到指定的目錄文件中。

  • Read More

  • stretch

  • webdriver

  • gentest


Rust與sed命令不得不說的故事

#sed #X12

x12pp是用Rust實現的能夠漂亮地打印X12 EDI格式的Cli工具。做者寫了一篇博文,闡述了他使用sed命令處理X12的問題,這些問題促使他使用Rust來寫x12pp。而且寫出來的工具性能上能夠輕鬆擊敗sed這樣的通用工具。

  • x12pp

  • Read More


「討論」Rust和C編譯器優化問題

#c

該reddit帖子做者用C和Rust分別寫了一個一樣功能的示例,發現rust編譯器不如clang編譯器優化的完全,clang編譯器生成的彙編代碼最簡單。

int bongo(int num) {
   int a = 0;
   for (int x = 0; x < num; x += 2) {
     if (x % 2) {
         a += x;
     }
   }
   return a;
}

Rust代碼

pub fn bongo(num: i64) -> i64 {
 let mut a = 0;
 for x in (0..num).step_by(2) {
  if (x % 2) != 0 {
           a += x
       }
 }
 a
}

評論中有人給出緣由,Rust代碼中for循環的範圍和step_by比較複雜。由此還貼出兩個相關issues。

  • Read More

  • step_by issues 1

  • step_by issues 2


combine-4.0.0-alpha.1 發佈

#parser

combine和nom的功能相似,但它的特色是創建在Rust的trait和類型系統之上,而不是宏。

完整的更新列表


rust-latest: 用於獲取最新版Rust工具鏈的CLI工具

#cli

rust-latest


Cargo Vender 子命令即將登錄Cargo

#cargo

cargo vender支持將crates.io中的依賴項保存到你本地目錄下。

Read More


使用自定義工具鏈解決Rust和Glibc的問題

#glibc

Rust和Glibc在動態連接的時候可能會失效,該文做者建議使用自定義工具鏈來解決此問題。

Read More


app-route: 將app的路由做爲一種強類型結構

#route

一個應用程序的路由由Url Path和查詢參數組成。app-route庫能夠將這樣一個路由解析爲Rust的類型結構。

let path: UsersListRoute =
       "/groups/4313145/users?offset=10&limit=20&friends_only=false&keyword=some_keyword"
           .parse()
           .unwrap();

   assert_eq!(
       path,
       UsersListRoute {
           group_id: 4313145,
           query: {
               UserListQuery {
                   limit: Some(20),
                   offset: Some(10),
                   keyword: Some("some_keyword".to_string()),
                   friends_only: false,
               }
           }
       }
   );

app-route


JavaScript二進制AST格式的參考實現

#javascript

關於JavaScript二進制AST

隨着網站變得愈來愈複雜,JavaScript源代碼的數量不斷增長。依賴於大型JavaScript代碼庫會致使網站啓動緩慢 - 一般速度慢得使人沒法接受。這是由於存在兩個瓶頸:解析和字節碼編譯JavaScript。不幸的是,瀏覽器幾乎達到了兩種操做的效率峯值。

咱們(Mozilla,Bloomberg,Facebook,CloudFlare)目前正致力於針對JavaScript的特定領域編碼,稱爲「BinAST」(「JavaScript二進制AST」的縮寫)。 JavaScript二進制AST旨在打破瓶頸。當前的高級原型已經在全部最多見的框架上顯示了JS解析改進了30%-50%,只需更改格式,咱們相信咱們能夠進一步提升這一改進。編碼能夠構建爲webdev工具鏈的一部分,或者由代理或CDN注入,所以能夠在不更改原始網站的狀況下自動提升最終用戶的性能。

此編碼目前在JavaScript TC39標準化過程當中。它能夠與現有的壓縮技術(gzip,brotli等)一塊兒使用

binjs-ref


用於編譯器診斷的UI測試工具

#UITest

trybuild

相關文章
相關標籤/搜索