標籤:

你覺得編譯程序中使用的關鍵技術都有哪些應用方向?請詳細說明。

《編譯方法》的問題


打個醬油。以後想到什麼再補。

Parser確實是在各種領域都很常用的東西。所有「language processor」都得有這麼一塊。別的回答肯定會多次提到這裡所以我就不展開說。

還沒看到有回答提到軟體測試,簡單說說:

本科上軟體測試課的時候,中間有好幾周的課都在講結構性測試。結構性測試主要關注代碼覆蓋率(包括不同的覆蓋方式:條件覆蓋、分支覆蓋、路徑覆蓋,等等)。當你看這裡面涉及的圖論知識時,會發現它跟編譯原理里用的圖論一模一樣。

編譯原理有很多知識都是對代碼的靜態分析。對代碼的優化許多也是在靜態分析的基礎上做的。這方面說,軟體測試、諸如FindBugs、FxCop之類的代碼分析工具、IDE的語法高亮和自動補全之類,都可以應用上編譯原理涉及的知識點。

業務流程引擎(Business Process Engine)也是可以應用編譯原理的一個場景。其用於描述工作流的DSL(可以是圖形DSL或者基於文本的DSL)其實也可以看成是編程語言。如果DSL的描述能力夠豐富,業務流程引擎甚至可以應用上傳統編譯原理里的優化應用在流程的調度和執行上。

資料庫的查詢引擎有一塊所謂「查詢優化器」。這裡也可以大量應用上編譯原理的知識去做優化。


parser用得最多吧。。記得某問題的答案下有個律師學了點yacc然後拿來自動解析卷宗什麼的。。從文本里提取結構化的數據是很多人(甚至不僅限於程序員)的需求。

然後靜態分析的技巧也用得多,一方面用來優化代碼和查錯,在分散式計算平台上能及早發現一些bug而不是讓提交的job跑了半天fail掉,能避免很多資源浪費;另外像IDE等程序員的生產率工具也需要靜態分析來支持精確的補全之類的功能;還有whitebox fuzzing,靜態分析輔助找漏洞,不僅搞編譯的人在做,搞安全的也有人在做。。

其他的像各種代碼變換和優化,感覺就比較限定在編譯的領域了,沒什麼跨界應用的例子。。


在SQL的時候我用編譯原理做了一個小的可擴展的決策支持系統,做了一個編輯二元布爾表達式的列表控制項,在M$RA的時候用編譯原理解決了無數的問題包括如何輕鬆大量的hook windows api,如何給graph db寫query等等。在Office的時候還給他們做codegen的工具來支持最現代化的跨平台UI程序的開發。編譯原理到處都有用啊,無論到了哪個部門都用得上。當然了,不會編譯原理也能做上面的東西,就是得到的結果很垃圾罷了。


求編譯方法大作業


推薦閱讀:

如果想要寫一個C++或者面向對象的語言的一個簡單的編譯器,應該學習哪些領域的知識?
Clang裡面真正的前端是什麼?
gcc編譯器為什麼不直接編譯成機器代碼?
請問國內有哪些關於clang編譯技術的重要會議或者論壇?
單純學習C,windows下有什麼好的編譯器?

TAG:編譯器 |