要理解王垠的研究,就數學上而言,需要達到什麼層次?


編譯器大概可以分為前中後三塊。

前端是Parser、Tokenizer,難點主要在於如何優化性能,即想辦法加快解析速度。不過由於現代電腦運行太快了,即使什麼都不優化,手寫的遞歸下降分析,也慢不到哪去,所以這個領域是王垠認為編譯器最不重要的領域。

後端就是代碼生成部分,截至2015年這個領域最有前途的是LLVM,難點也是優化性能,但這次的性能重點在於如何生成高效的運行時機器碼或位元組碼。這個領域水很深,但顯然也不是王垠關注的重點。

在@王垠看來,只有除掉前端和後端的『中端』,才算是『編程語言』這門學科真正的研究領域。主要包括類型系統、靜態分析、程序變換。王垠,作為一名前科學家,在該領域的理論積累無疑大大高於我們這樣的工程師。

王垠的在『中端』的成果ydiff是新東西,除了本身的實用價值以外,還具有一定的獨創學術價值,相比之下, @趙劼的wind.js,在下的haxe-continuation、stateless-future,雖然也在『編程語言』這一學科範疇內,但都只能算是舊理論的工程實踐,而沒有任何學術價值。

王垠本人站在科學家立場時,瞧不起我們這樣缺乏理論知識的工程師。因為我們費勁做出來的東西,比如go,在學界看來只是裝了一堆大雜燴的新瓶舊酒而已。

然而當他站在工程師立場時,他也同樣瞧不起編程語言學界。因為學界的很多灌水論文,從工程角度看,只不過是把編程實踐中早就有的功能改寫成數學語言而已。

那麼,現在就可以回答樓主的問題了:『要理解王垠的研究,就數學上而言,需要達到什麼層次?』

答案是,你必須理解編程語言領域中的最新最好的東西,幸好你可以有兩種理解方式:一、從數學形式(formally)上理解;二、從工程實踐、編程語言使用上理解。兩種理解方式都可以。

我自己是一個工程師。那些畫滿希臘字母的形式化理論,我一直感覺有點怵。編程語言方面我覺得有新意的是:D、Haskell、Rust、Scala。我覺得想要從工程角度而非數學角度學習編程語言的話,這幾門語言都值得一看。

本來我覺得把Scala列到有新意的語言中比較勉強,但最近我在翻譯Scala作者,馬丁·奧德斯基的一系列訪談,我才知道Scala在把面向對象和泛型整合起來的許多特性其實也都算得上前所未有。反倒是其函數式編程特性大都能在ML、Haskell等別的語言中找到原型。


我假設提問者對編譯這行有興趣。

如今的編譯理論,特別是前端部分的詞法和語法分析,和數學關係不大。入門者對喬姆斯基的形式語言理論有一些初步的了解,能夠理解三型到二型文法的區別的特徵,即可開始後續的詞法和語法分析工作。後端部分的代碼生成和優化,更多地需要了解計算機特別是 CPU 的系統結構,與此同時,考慮到並行編譯實踐的需要,建議對圖論和集合論的基礎知識有所涉獵,會比較有利。

順便說一句,時至今日,把編譯理論稱為研究是不合適的。在我眼裡,前端領域自上世紀七十年代之後,已經沒有真正懸而未決的問題;而下一個最可能產生突破的大方向,是並行編譯和優化,而那更多的是後端領域,而且對計算機組成結構的依賴頗大,帶有很重的工程味道。所以,如果不是致力於代碼生成相關的工作,那麼最好不要自稱在做「編譯理論研究」。對我們這個專業的人來說,這個用詞聽起來,其實頗為滑稽。


我好無聊啊,八卦了下這個問題:

王垠到底對 winter 做了什麼? - 匿名用戶的回答

順藤摸瓜,大概好像明白 @winter 是怎麼受誤導的了:

@winter

任何掌握LL(n)和LR(1),也就是認真聽了大學一半編譯原理課的程序員,也就是編譯原理入門的程序員,這樣的人當中,我尚未見過瞧得起王垠的。鄙人
winter雖然算不上喜好編譯和編程語言,碰巧也寫過不少tokenizer和parser,所以呢,就碰巧瞧不起王垠了。

雖然前端、工程體系、團隊建設和架構是我目前的主要工作和長項,但我自以為編譯原理方面我可以達到普通入門級工程師水平,與王垠應當不相伯仲

哈哈,終於找到這個梗的出處了,原來是這樣, @陳甫鵃 :

我假設提問者對編譯這行有興趣。如今的編譯理論,特別是前端部分的詞法和語法分析……

哈哈哈哈,碰巧也寫過不少tokenizer和parser,所以呢,就碰巧瞧不起王垠了……我自以為編譯原理方面我可以達到普通入門級工程師水平,與王垠應當不相伯仲」,哈哈哈哈~~


上面回答這些問題的,自己都做不出來怎麼好意思回答的?
搞得自己會做一樣,還高中水平就可以。知乎怎麼辣雞人這麼多了


大約需要能列方程而不是用算數方法解雞兔同籠問題


怒刷論文三百篇,不能做詩也能垠...


ydiff是我想要很久的東西

可惜沒有普適性

照說應該是可以根據型別來建立一個適用於各種語言的 ydiff

可是他老人家好像也沒這份心思作這

「瑣碎的小事」

於是讓 git 支援 ydiff 就沒有什麼意義了

(事實上可以自己做個 meta 然後只送 meta 不送 source 彷彿也可以達到 ydiff 的效果??不過那是你們專業碼農的事了)

------

補充一個小比喻大家參考參考

我覺得他有點像是文學中研究詩學跟比較文學那塊的學者

偏偏自己也愛寫幾筆

還寫的不錯

可是

孜孜矻矻筆耕的作家不計其數

除了天賦眼界

積累也是很必要的

如果沒有持續發表作品

可能就只能是個

「據說才高八斗可惜作品傳世甚少」

的作者

最多就是一則軼事

成就什麼的可能不樂觀啊


要理解他的研究,就應從他的作品開始,王垠自稱自己所有cs知識都是實踐而來的,因此應該問實踐的層次,而不是數學的層次。況且在他的觀念裡面,編程語言比數學式子優越,有心追隨的後學們應聽從他的忠告。


畢竟是清華博士,康奈爾博士,印第安納博士,就是學神了,要理解王垠的研究,至少要十多年時間吧


你們說的這些都跟數學有個毛線關係


要想理解yin神的研究, 三遍博士, 加上plt 基礎理論研究十五年是必要的。 數學怎麼也得是個博士吧。

其實我特別好奇, 噴「andrew ng在學術圈的名聲早就丑了」需要從事相關工作幾年。


推薦閱讀:

有哪些值得一看的數學家、物理學家或者計算機科學家的傳記?
數學不好能深入學習計算機嗎?
跨專業從事機器學習或數據挖掘可能性?
數據結構方面,你認為最好的書是哪本?
如果計算機沒有浮點運算能力,系統能正常啟動嗎?

TAG:演算法 | 數學 | 計算機科學 | 王垠人物 |