【公眾號回復 「1024」,免費領取程序員賺錢實操經驗】
大家好,我是章魚貓。
今天給大家推薦一個高級的開源的技術入門教程,是中文的,看起來無門檻。
這個開源項目就是:Static-Program-Analysis-Book,靜態程序分析入門教程。
先解釋一下,什麼是靜態程序分析?
靜態程序分析是編程語言中應用層面下的一個細分領域,它是一個非常重要的核心內容。
在理論部分,考慮的是如何設計一個語言的語法和語義,如何設計語言的類型系統等等問題;有了語言的語法、語義和類型系統之後,我們需要支撐語言的運行。因此,在環境部分,需要考慮如何為運行中的程序提供運行時環境 —— 如何設計編譯器,在運行時需要怎樣的支持(如內存的分配管理)等等;應用部分則關注如何保證語言所寫出程序的效率、安全性和可靠性,主要考慮如何對程序進行分析,驗證和合成(如何自動合成一個程序)。
當今的計算機世界,面對這樣一條惡龍:👇
數十年來語言的核心沒有變化,但軟件的規模和複雜性增長迅速,如何保證程序的可靠性?
儘管新的語言和特性層出不窮,但現在編程語言無非三大類 (如果你對其中的某個語言不熟悉,可以到語言的官網或英文 Wiki 頁面查看相關示例,也可以利用搜索引擎做初步的了解。本教程內容主要關注於針對命令式語言 JAVA 的分析。) :
命令式(C、C++、JAVA)
函數式(Scala、Haskell)
邏輯式(Prolog)
靜態程序分析即是屠龍的寶刀之一,舉例來說這一技術可以處理以下問題 (以下概念只需要了解,重要的應用在後文中會詳細講解。):
提高程序可靠性
Null pointer dereference, memory leak, etc.
空指針引用與內存泄漏等:幾乎每個程序編寫者都被這兩個問題所困擾過
提高程序安全性
Private information leak, injection attack, etc.
隱私信息泄漏:這一問題在移動應用中較為普遍,如果你感興趣,可以參考這篇論文。
注入攻擊:這是網絡安全中非常常見的議題。不熟悉的讀者可以查看 W3School 或 Wiki 上關於 SQL 注入攻擊的例子。
為編譯優化提供基礎技術
Dead code elimination, code motion, etc.
死代碼消除:在編譯器的機器無關優化環節,將不會對程序執行結果產生影響的代碼(即死代碼)刪除。
循環不變量的代碼移動:在編譯器的機器無關優化環節,在保證不影響程序執行結果的情況下,將循環中的特定語句移動到循環外,使得程序運行時執行的語句數減少。更為詳細的解釋可以參考 StackOverFlow 上的回答。
有助於程序理解
IDE call hierarchy, type indication, etc.
為集成開發環境的功能提供幫助:當你使用 VS/Idea/Clion/Eclipse/Android Studio 等等 IDE 時,將鼠標懸停在代碼上,IDE 能夠動態地分析並提示你所懸停對象的相關信息,背後使用的技術就是靜態程序分析。
此外,靜態程序分析技術也可以分析多線程程序,這是一個有難度的研究領域。主要困難在於處理多線程間的 interleaving。
這一《靜態程序分析》教程對誰有用?
學生,開發者,研究者…… 幾乎所有當代生活者都能從中受益。
學習方向與程序有關的
學生。
計算機方向的學生可以通過深入學習這一領域知識而為自己建立獨特的學術和就業優勢,也能加深對編程的理解以降低自己寫出 bug 的頻率。
其他方向的學生既然已經開始閱讀這一頁面,想必對計算機方向的內容有一定興趣。你可以通過了解這一技術,了解靜態分析軟件(包括其內置於編譯器,集成開發環境的部分)能夠為你提供怎樣的功能和便利,以及如何更好地使用這些軟件,以此保證你所關心的程序質量。
工作內容與程序有關的
開發者。
無論你希望更好地理解 Wiki 上眾多的開源或是閉源的靜態程序分析技術,還是希望自己開發一個適用於眼下工作內容的靜態程序分析器以保證程序質量,了解靜態程序分析都會有所幫助。
研究領域與程序相關的研究者。 或許你希望微調研究方向,卻因沒有合適的入門材料而苦惱;或許你希望了解計算機領域的相關知識以期獲得啟發…… 這一教程可以作為你的入門材料或是閒暇讀物。
生活與程序相關的
每個人
軟件質量是信息化時代的重要議題之一,在這個時代生活與工作,你一定會遇到相關的問題。
在大多數學校和企業中,沒有開設該領域的課程。
所以,這門開源的技術課程,價值挺高的。
感興趣的同學,可以去 GitHub 上 star 一波,學習學習,對於自己底層技術知識相當有幫助。
開源項目地址:https://github.com/RangerNJU/Static-Program-Analysis-Book
開源項目作者:RangerNJU
最近,章魚貓建了一個「GitHub 精選交流群」,歡迎大家一起交流優秀開源項目,也可以宣傳自己的開源項目,在 「GitHub 黑板報」公眾號後台回復【加群】邀請你入群。
---特別推薦---
特別推薦:一個新的優質的專注分享各種瀏覽器插件、黑科技教程、各種你想不到的高效率軟件及工具的公眾號,「程序員掘金」,專注挖掘好東西,非常值得大家關注。點擊下方公眾號卡片,直接關注。