第178章 確實厲害
第178章 確實厲害
一九八〇年四月二十日,下午一點半。
精密機械系三樓小會議室的門虛掩著,裡面安安靜靜,外面的走廊里卻已經站了十幾個人。
ѕтσ55.¢σм為您提供最新最快的小說內容
彭遠征靠在走廊的牆上,手裡捏著一份手寫的個人簡歷,旁邊站著朱明成。
這年頭大學生畢業國家包分配,簡歷這東西基本上用不著,大多數人是頭一回寫。
大多數人履歷欄里一行行排下來就不知道該寫啥了,彭遠征倒是寫得滿滿當當。
畢竟,他有十年無線電廠技術員經歷,自學編譯原理,獨立開發過三套工控系統。
「怎麼樣,彭老大,狀態怎麼樣,有信心等會露一手嗎?」朱明成壓低了聲音問。
「有點緊張。」彭遠征如實回答。
「緊張?」朱明成吃了一驚,「你前天不還氣勢如虹嗎?怎麼臨陣露怯了?
你還能怕面試?」
彭遠征搖了搖頭,沒有接話。
他當然不是怕面試。
三十二歲的人了,什麼場面沒見過。
他只是覺得今天這件事很重要。
說不出為什麼,就是一種直覺一這對他而言,是一個不能錯過的機會。
一點四十五分。
走廊里的人越來越多。
有人靠著牆根翻書,有人把簡歷捲成筒在手心裡一下一下地敲。
嚴正和邱子平來得晚,擠不到前面,乾脆在樓梯口席地而坐。
嚴正嘴裡念念有詞,像是在背什麼。邱子平湊近了聽,發現他背的是B樣條曲面的德布爾遞推算法。
「你至於嗎?」邱子平壓低了聲音,「又不是期末考試。」
「你不懂。」嚴正沒睜眼,「這叫預熱。腦子熱了,等會兒進去才跟得上他的思路。」
邱子平搖了搖頭,他倒是挺輕鬆的。
畢竟,課題組只要兩個人,今天來面試的研究生都有十好幾個,他今天更多是抱著漲見識的態度來的。
有機會,誰不想見識見識陸懷民這個傳奇本科生呢。
一點五十五分。
會議室的門從裡面拉開了。
出來的是精儀系的錢振華副主任。
「同學們好,面試馬上開始。按報名順序來,叫到名字的進來,沒叫到的請在走廊等候。」他頓了頓,補充道:「面試流程很簡單,就是課題組組長陸懷民和大家簡單聊一聊,時間十分鐘左右。感謝各位同學參加面試。」
錢振華說完,退回了會議室。門又虛掩上了,只留了一條寸許寬的縫。
走廊里的氣氛一下子繃緊了許多。剛才還低聲交談的聲音全停了。
「好了,一號陳望江同學請進。」錢振華側身讓開門口,「其他人請在外等候。」
第一個進去的是一個本科生,瘦高個,戴一副黑框眼鏡,彭遠征不認識他。
會議室的門關上了。
走廊里重新安靜下來,誰也沒有心思再閒聊。
等了大概八九分鐘,門開了,那個本科生走了出來。
他低下頭,走到一邊,也不跟人說話,所有人都望著他的表情,試圖看出些什麼,但他的表情很奇怪,像是一種說不清道不明的茫然,讓眾人有些捉摸不透。
朱明成湊近了一步:「他這是什麼情況?」
彭遠征搖了搖頭:「不知道。」
緊接著,二號、三號、四號————
出來的人表情一個個都有些微妙,說不上興奮,也說不上沮喪,看上去有些恍惚。
有個人出來的時候差點被門檻絆了一跤,幸虧旁邊的人扶了一把。
「咋樣?」有人忍不住拉住其中一個問。
那人想了想,只說了四個字:「有點邪門。」
「邪門?」問的人愣住了,「什麼意思?是面試太難了?」
「也不算太難。」被拉住的人斟酌著措辭:「就是,他問的東西角度很刁鑽,都是你覺得自己會、被他問了才發現不太會的那種。但他態度又很認真,你答不上來他會耐心的引導你得出結論。」
「他?誰?」
「你說還能是誰。」
「呃————」
旁邊的人面面相覷。
五號進去了,又出來了。
錢振華再次出現在門口,朝走廊里看了一眼,喊了一聲:「六號,計算機系七八級研究生,彭遠征。」
彭遠征深吸一口氣,整了整領口。
朱明成在他肩膀上拍了一把:「彭老大,給咱們計算機系爭口氣!」
彭遠征沒說話,捏著筆記本走進了會議室。
會議室不大,一張條形會議桌,陸懷民坐在正面的短邊上。
錢振華和沈一鳴則坐在側邊正對門的長邊上。
彭遠征走近些,忽然有些恍惚。
他第一次看到陸懷民本人。
確實很年輕,只有當面見了,才能直觀地感受到,對面這個人比自己小了整整一輪還多。
「彭師兄,請坐。」陸懷民站起身,朝旁邊的椅子做了個「請」的手勢。
彭遠征坐下,把簡歷遞過去。
陸懷民雙手接過,低頭研究了一會兒,然後抬起頭,說:「彭師兄,你的簡歷上說,你在清華念的是電機系,後來在無線電廠做了十年技術員,七八年才考回科大讀計算機系研究生。這個跨度不小。」
「是不小。」彭遠征點點頭:「在無線電廠那十年,我一直在自學計算機。最開始廠里沒有科班出身的,所有的控制系統都是我自己摸索著寫的。」
陸懷民點點頭,問道:「彭師兄,你的簡歷上說你編譯原理是自學的。正好,我們課題組要做的後處理編譯器,本質上就是把一種描述語言翻譯成另一種指令語言。我想問你一個問題。」
彭遠征坐直了身子。
「假設你現在要寫一個最簡單的代碼生成器,把數學表達式翻譯成後綴表達式,也就是逆波蘭表示法。比如a加b乘c」,要輸出abc乘加」。你會怎麼做?」
這是經典題,不算難。
彭遠征幾乎是下意識地回答:「用棧。遇到操作數就輸出,遇到運算符就和棧頂比優先級。」
「好。」陸懷民點點頭,追問了一句,「那如果表達式中出現了括號呢?比如a加b乘以c減d。」
「左括號直接壓棧。遇到右括號,就把棧里的運算符依次彈出,直到匹配的左括號。」
彭遠徵答得很快,這些都是基礎的東西,對他來說自然不是什麼問題。
陸懷民點點頭,繼續問:「彭師兄,你剛才說的是中綴表達式轉逆波蘭。現在我們換個角度想。如果不用棧,你能不能換一種方式實現同樣的功能?」
彭遠征愣了一下。
不用棧?
他腦子裡飛快地轉了一圈。
棧是這個問題標準的、最直觀的解。
不用棧,還有什麼辦法?這他倒確實沒想過。
「我————沒有想過這個問題。我一直用棧。」彭遠征知道他一時半會兒肯定想不到答案,索性如實回答。
「棧沒問題。「陸懷民說,「棧確實是最直觀、內存開銷最小的方法。但如果我們面對的不是簡單的數學表達式呢?如果我們要處理的是一種更複雜的加工描述語言呢?」
他頓了頓,繼續說道:「你想想,用棧來寫的話,每加一種新的運算符,你就要改一次優先級表;
每加一種新的語法結構,你就要在棧的彈出邏輯里加一堆分支判斷。到最後,整個程序會變成一團亂麻,沒人敢改,也沒人能看懂。那時候你怎麼辦?」
彭遠征的眉頭擰了起來。他隱約感覺到了陸懷民想說什麼,但又抓不住那個點。
畢竟這個時代的代碼複雜程度和後世是不可同日而語的。
很多後世的算法在這個時代極具有前瞻性。
「有一種方法,叫遞歸下降。」陸懷民說著,在面前攤開的筆記本上刷刷寫了幾行偽代碼,把筆記本轉過來,推到彭遠征面前:「不用棧,用函數的調用棧來代替數據棧。比如a加b乘c」,你可以定義一個解析函數,遇到加號的時候,先把左操作數輸出,然後遞歸處理右操作數,最後再輸出加號本身。」
彭遠征低頭看去。
那幾行偽代碼寫得清清爽爽,遞歸的調用順序標註得明明白白。
他一行一行往下看,心裡那層窗戶紙嘩一下就破了。
「這————這不就是編譯原理教材里講的語法樹後序遍歷嗎?怎麼我一直沒想到用遞歸來————」
他差點想說「用遞歸來做表達式轉換」,但話到嘴邊,他自己先愣住了。
因為他突然意識到,他不是「沒想到」。而是他這些年來,從來只在「棧「這一個框架里打轉。
因為棧是這個問題公認標準解法,書上這麼寫,同行這麼做,他在無線電廠寫的每一個工控程序也都是這麼寫的。
所以他從來沒有想過,這件事可以不這麼做。
可眼前這個比他還小十幾歲的年輕人,似乎壓根就不覺得棧是唯一的路。
彭遠征忽然想起自己在無線電廠那十年,那本油印編譯原理教材時,書里有一頁專門講了「遞歸下降法」。
但那一頁印得太模糊了,油墨糊成一團,只能勉強辨認出幾個標題。當時他沒在意,翻過去了。
現在想來,他可能錯過了一扇門。
「遞歸下降解析法,是這幾年國外在嵌入式編譯器里應用得比較多的一種方法。」陸懷民說:「它比棧更靈活,能處理更複雜的語法結構,而且代碼結構清晰,調試方便。如果我們課題組要做後處理編譯器,這個方法可能用得上。」
彭遠征點點頭,心裡翻湧著說不清的滋味。
「陸————」他抬起頭,一時竟不知該怎麼稱呼,「陸師弟,我能問一個問題嗎?」
「請講。」
「在遞歸下降的基礎上,如果要處理更複雜的語義一一比如說,數控代碼里的循環、跳轉、宏定義這些指令,你準備怎麼設計語法規則?」
陸懷民笑了笑,反問:「彭師兄覺得呢?」
彭遠征陷入了沉思。
陸懷民問的這個問題,他感受到的不是考較,而是一種邀請。
邀請他一起來思考。
「我覺得————」他思考了一會兒,斟酌著字句:「可以在詞法分析階段,先預定義一個關鍵字表。解析器讀到循環指令L的時候,遞歸下降把循環體裡面的所有G代碼指令打包成一個中間表示子結構————」
他頓了頓,忽然覺得這個思路很順,繼續說:「最後,把中間表示統一展開成目標工具機的G代碼。這樣一來,如果目標工具機換了G代碼方言,只需要改最後展開那一步,前面的解析邏輯完全不用動————」
說完,他自己都被這個想法的清晰度驚了一下。
「對。這其實就是分層編譯的思想。」陸懷民點點頭:「把編譯過程拆成前端和後端。前端解析語法,生成中間表示;後端把中間表示翻譯成目標代碼。這樣一來,前端不變,後端可以適配任意一種數控系統的G
代碼方言。
彭遠征看著陸懷民,心裡忽然有些複雜。
他在編譯這個行當里埋頭啃了十年書,一直以為自己是懂編譯的。
可剛才陸懷民提到的那些東西,比如遞歸下降、分層編譯、中間表示,這些東西也不是什麼複雜前沿的東西。
但從來沒有人告訴他,這些零散的知識可以這樣串起來,可以用在一個實實在在的工程項目里。
就好像學拳的人練了十年基本功,卻從來沒打過一場真正的拳。
現在,對練的對手站在他面前。比他年輕,比他資歷淺,但一伸手他就知道,這人的功夫是真的。
確實厲害。
彭遠征忽然笑了笑,笑容里有敬佩,也有服氣。
陸懷民繼續說道:「彭師兄剛才提到,其實對應的是中間表示層的設計。但一個真正能用的後處理編譯器,最複雜的往往不是語法,而是語義。比如,五軸聯動的非線性誤差補償,在中間表示層怎麼建模?」
彭遠征的呼吸微微一滯。
五軸聯動。非線性誤差。
這是數控工具機領域真正的工程難題。
「我————」彭遠征斟酌著字句,「數控工具機的運動學模型,我沒有深入研究過。但如果只是從編譯器設計的角度來看,誤差補償可以抽象成一種後端優化pass,在生成目標代碼之前,對刀位軌跡做一次坐標變換————」
他說到一半,自己停住了。
因為他忽然意識到,他說的「坐標變換」,其實暗含了一個前提。
編譯器必須能精確理解工具機的機械結構。而傳統的編譯原理,從來不教這個O
陸懷民點了點頭,說:「彭師兄說得對,那確實是一個優化pass。但這個pass的有效性,取決於你的中間表示能不能承載工具機的運動學模型。」
他頓了頓:「這恰恰是我們這個課題組要解決的核心挑戰之一。傳統的編譯不涉及數控工具機的運動學,而傳統精密製造的教材又不會講編譯器怎麼設計。我們這個課題,要把這兩件看起來不相干的事,真正捏在一起。」
「彭師兄剛才提的中層表示結構,如果能把運動學信息也建模進去,那這套編譯器就不止是一個翻譯工具,而是一個能理解物理規律的工程平台。」
他頓了頓,合上了面前的筆記本,主動朝彭遠征伸出手。
「今天就聊到這裡吧。彭師兄,感謝你來參加面試。」
彭遠征站起身,和陸懷民握了握手,又朝錢振華和沈一鳴的方向各鞠了一躬。
他轉身往外走時,腦子裡翻湧得厲害。
剛才那十分鐘,確實讓他有一種醍醐灌頂的感覺。
他不確定自己能不能通過面試順利加入課題組,但他確定一件事:今天的面試,來對了。
如果錯過這個課題組,他會後悔。
走廊里的氣氛有些微妙。
彭遠征走出來的時候沒說話,臉上也看不出什麼表情。
朱明成第一個湊上去。
「彭老大,怎麼樣?」
「邪門。」彭遠征想了想,吐出一個詞。
朱明成一愣:「怎麼你也是邪門?題目太難?還是故意出偏題為難你?」
「題目不難。」彭遠征靠在牆上,想了想,補充道:「只能說他做出那麼多成果,真不是憑空來的。確實厲害,盛名之下無虛士。」
走廊里安靜了一瞬。
朱明成看著彭遠征,忽然覺得這個平時什麼場面都見過的老大哥,這會兒說這兩個字時眼神裡帶著一種少有的服氣。
「面試來對了。」彭遠征把帆布包往肩上一挎,「大家加油。這個課題組,值得進。」
>