編譯器演算法崗
❶ 計算機專業畢業薪資高嗎
計算機學員畢業後薪資多少,這是目前大部分人都比較感興趣的問題,但是計算機是一個比較大的概念,需要具體看從事的是哪一個行業,目前計算機分為系統開發、軟體開發、硬體開發、設計類等不同方向。
最後,大家在冬天也要注意一下飲食問題。比如說冬天應該吃更多的高蛋白食物,比如肉類和雞蛋,可以讓你變得更加溫暖,而且肉類中的鐵元素還可以增加人們的抗寒能力。不過需要注意的是,盡量不要吃肥肉,也不要吃太多的紅肉,可以多吃一些魚肉來代替。
此外,冬天還應該多吃一些黑色的食物來補腎,比如說黑豆、黑芝麻、黑米等等,這些食物適當的吃一些,不僅可以補腎,還可以增強血管彈性,保護身體健康。
詞法/語法分析、程序分析與程序變換、代碼生成、內存管理、虛擬機、函數式語言的實現與優化。。。每個話題都能出不止一本書。
用到的演算法/數據結構多如牛毛:
各種樹、圖為主,其他如棧、隊列、散列表、並查集。。。
貪心、回溯、動態規劃、遺傳演算法、矩陣變換。。
在一個問題下很難回答好。。 先簡單介紹一下和圖相關的。
1. 和什麼圖打交道
CFG(Control Flow Graph)
控制流圖是對程序中分支跳轉關系的抽象,描述程序所有可能執行路徑
節點是語句集合(basic block);
每個basic block有唯一入口和出口;
如果A到B有邊,表示A執行完後可能執行B
PDG(Program Dependence Graph)
PDG在編譯器中用得不多,常見於軟體工程/安全相關的應用(程序切片、安全信息流等)
SSA(Single Static Assignment)
SSA簡化了很多數據流分析問題。
其他圖
DJ Graph, Loop Nesting Forest, Program Structure Tree等等。
可參考:IR for Program Analysis。下面主要介紹CFG
2. CFG初步處理
CFG構造
dominator樹生成
在CFG中,如果A是B的dominator,則從程序入口執行到B的任意路徑一定經過A
控制依賴分析
根據dominator和post-dominator分析依賴關系。數據依賴、控制依賴信息在自動並行化中尤其重要(如果循環的每次迭代都沒有依賴,那麼可以並行處理)
控制流圖化簡
在復雜度相同的情況下,CFG的規模影響演算法的效果。如果一個CFG僅通過如下變換能化簡為一個節點,則它是可化簡的:
如果節點n有唯一的前驅,那麼將其和其前驅合並為一個節點
如果節點存在到自身的邊,那麼將該邊刪除
構造SSA
SSA可以由CFG構造。
3. CFG與數據流分析
下面才進入主題。。
一般的文獻介紹DFA(Data flow analysis),都會用幾個基礎的分析為例:Constant Propagation,Range propagation,Avaliable expressions,Reaching Definition。而Reaching Definition的一個應用,就是大家喜聞樂見的「跳轉到定義處」(真要做到「智能」跳轉並不簡單)
這部分涉及東西較多,一些演算法也和」圖「並不直接相關,不再展開。
PS,很多DFA問題可以用graph reachability統一建模,強烈推薦此文:
Program analysis via graph reachability
❸ 如何更好的掌握編譯器的設計與實現
1. 閱讀相關書籍:編譯原理、編譯器設計、編譯器實現等;
2. 自學相關編程語言:C、C++、Java等;
3. 實踐:可以使用開源的編譯器框架,例如ANTLR,搭建自己的編譯器;
4. 了解編譯器的各個組成部分,並學習它們的工作原理;
5. 閱讀技術文章,了解編譯器的設計和實現的最新進展;
6. 加入開源項目,編寫和維護編譯器;
7. 在論壇上交流,和更多的編譯器開發者分享心得體會;
8. 參加學術會議,接觸到最新的研究成果;
9. 嘗試著自己設計一個編譯器,用實踐來加深理解。