Mozilla Rust最近發布的MIR的乙個評論

2021-07-11 16:33:13 字數 509 閱讀 6723

原來rust似乎是直接從ast翻譯到llvm ir,現在則拆分為hir和mir了。

什麼是mir呢?

仔細看了原始的blog文章和rfc,可以認為mir其實就是對cfg的一種抽象,只有記憶體結構,沒有線性化的序列化反序列化表示。

這裡要理解的乙個核心概念是:ast只是高階層面的對原始語言的文法結構抽象,直接對應於前端parser的處理結果。

而這個ast下降到mir要做一系列的程式轉換:這裡的例子用了for迭代轉換為while let(顯式的呼叫迭代器,要求所有變數的型別已知,因此mir在對ast的type checking完成後介入),進一步轉換為loop+goto。

這裡還有乙個臨時value的析構(drop操作,rust總是喜歡創造自己的術語),也就是說,mir級別需要插入一些在rust源**級別沒有顯示出來的呼叫。這裡給出的例子就是執行時條件地標記乙個物件是否已被brow出。

rust mir不是基於ssa的,它允許使用者rust源**級別的let mut,但是它插入的輔助臨時變數都可以認為是ssa的。

最近的一些bug,今晚是線上發布產生的bug

難受啊,這個點守著發布,發布完還發現了bug,還在統一處理發版中,估計還要等段時間 其實都是細節,不夠認真,或者可以說經驗太少,沒踩過坑,都是mybatis sql語句失誤 1.今晚的 起因 一條sql語句執行時間過長,查詢原因是left join一張表時間耗費了一半多時間,於是我打算分成兩個sql...

生產發布 藍綠發布 灰度發布和滾動發布

應用程式公升級面臨最大挑戰是新舊業務切換,將軟體從測試的最後階段帶到生產環境,同時要保證系統不間斷提供服務。長期以來,業務公升級漸漸形成了幾個發布策略 藍綠發布 灰度發布和滾動發布,目的是盡可能避免因發布導致的流量丟失或服務不可用問題。專案邏輯上分為ab組,在專案系統時,首先把a組從負載均衡中摘除,...

最近公共祖先 python 最近公共祖先

lca演算法樸素演算法 也就是我們所說的暴力演算法,大致的思路是從樹根開始,往下迭代,如果當前結點比兩個結點都小,那麼說明要從樹的右子樹中找 相反則從左子樹中查詢 直到找到乙個結點在當前結點的左邊,乙個在右邊,說明當前結點為最近公共祖先,如果乙個結點是另外乙個結點的祖先,那麼返回前面結點的父親結點即...