第178章 確實厲害

投票推薦 加入書籤 小說報錯

  第178章 確實厲害

  一九八〇年四月二十日,下午一點半。

  精密機械系三樓小會議室的門虛掩著,裡面安安靜靜,外面的走廊里卻已經站了十幾個人。

  彭遠征靠在走廊的牆上,手裡捏著一份手寫的個人簡歷,旁邊站著朱明成。


  大多數人履歷欄里一行行排下來就不知道該寫啥了,彭遠征倒是寫得滿滿當當。

  畢竟,他有十年無線電廠技術員經歷,自學編譯原理,獨立開發過三套工控系統。

  「怎麼樣,彭老大,狀態怎麼樣,有信心等會露一手嗎?」朱明成壓低了聲音問。

  「有點緊張。」彭遠征如實回答。

  「緊張?」朱明成吃了一驚,「你前天不還氣勢如虹嗎?怎麼臨陣露怯了?

  你還能怕面試?」

  彭遠征搖了搖頭,沒有接話。

  他當然不是怕面試。

  三十二歲的人了,什麼場面沒見過。

  他只是覺得今天這件事很重要。

  說不出為什麼,就是一種直覺一這對他而言,是一個不能錯過的機會。

  一點四十五分。

  走廊里的人越來越多。

  有人靠著牆根翻書,有人把簡歷捲成筒在手心裡一下一下地敲。

  嚴正和邱子平來得晚,擠不到前面,乾脆在樓梯口席地而坐。

  嚴正嘴裡念念有詞,像是在背什麼。邱子平湊近了聽,發現他背的是B樣條曲面的德布爾遞推算法。

  「你至於嗎?」邱子平壓低了聲音,「又不是期末考試。」

  「你不懂。」嚴正沒睜眼,「這叫預熱。腦子熱了,等會兒進去才跟得上他的思路。」

  邱子平搖了搖頭,他倒是挺輕鬆的。

  畢竟,課題組只要兩個人,今天來面試的研究生都有十好幾個,他今天更多是抱著漲見識的態度來的。

  𝚃𝚆看書📕𝚜𝚑𝚞.𝚝𝚠

  有機會,誰不想見識見識陸懷民這個傳奇本科生呢。

  一點五十五分。

  會議室的門從裡面拉開了。

  出來的是精儀系的錢振華副主任。

  「同學們好,面試馬上開始。按報名順序來,叫到名字的進來,沒叫到的請在走廊等候。」他頓了頓,補充道:「面試流程很簡單,就是課題組組長陸懷民和大家簡單聊一聊,時間十分鐘左右。感謝各位同學參加面試。」

  錢振華說完,退回了會議室。門又虛掩上了,只留了一條寸許寬的縫。

  走廊里的氣氛一下子繃緊了許多。剛才還低聲交談的聲音全停了。

  「好了,一號陳望江同學請進。」錢振華側身讓開門口,「其他人請在外等候。」

  第一個進去的是一個本科生,瘦高個,戴一副黑框眼鏡,彭遠征不認識他。

  會議室的門關上了。

  走廊里重新安靜下來,誰也沒有心思再閒聊。

  等了大概八九分鐘,門開了,那個本科生走了出來。

  他低下頭,走到一邊,也不跟人說話,所有人都望著他的表情,試圖看出些什麼,但他的表情很奇怪,像是一種說不清道不明的茫然,讓眾人有些捉摸不透。

  朱明成湊近了一步:「他這是什麼情況?」

  彭遠征搖了搖頭:「不知道。」

  緊接著,二號、三號、四號————

  出來的人表情一個個都有些微妙,說不上興奮,也說不上沮喪,看上去有些恍惚。

  有個人出來的時候差點被門檻絆了一跤,幸虧旁邊的人扶了一把。

  「咋樣?」有人忍不住拉住其中一個問。

  那人想了想,只說了四個字:「有點邪門。」

  「邪門?」問的人愣住了,「什麼意思?是面試太難了?」

  「也不算太難。」被拉住的人斟酌著措辭:「就是,他問的東西角度很刁鑽,都是你覺得自己會、被他問了才發現不太會的那種。但他態度又很認真,你答不上來他會耐心的引導你得出結論。」

  「他?誰?」

  「你說還能是誰。」

  「呃————」

  旁邊的人面面相覷。

  五號進去了,又出來了。

  錢振華再次出現在門口,朝走廊里看了一眼,喊了一聲:「六號,計算機系七八級研究生,彭遠征。」

  彭遠征深吸一口氣,整了整領口。

  朱明成在他肩膀上拍了一把:「彭老大,給咱們計算機系爭口氣!」

  彭遠征沒說話,捏著筆記本走進了會議室。

  會議室不大,一張條形會議桌,陸懷民坐在正面的短邊上。

  錢振華和沈一鳴則坐在側邊正對門的長邊上。

  彭遠征走近些,忽然有些恍惚。

  他第一次看到陸懷民本人。

  確實很年輕,只有當面見了,才能直觀地感受到,對面這個人比自己小了整整一輪還多。

  「彭師兄,請坐。」陸懷民站起身,朝旁邊的椅子做了個「請」的手勢。

  彭遠征坐下,把簡歷遞過去。

  陸懷民雙手接過,低頭研究了一會兒,然後抬起頭,說:「彭師兄,你的簡歷上說,你在清華念的是電機系,後來在無線電廠做了十年技術員,七八年才考回科大讀計算機系研究生。這個跨度不小。」

  「是不小。」彭遠征點點頭:「在無線電廠那十年,我一直在自學計算機。最開始廠里沒有科班出身的,所有的控制系統都是我自己摸索著寫的。」

  陸懷民點點頭,問道:「彭師兄,你的簡歷上說你編譯原理是自學的。正好,我們課題組要做的後處理編譯器,本質上就是把一種描述語言翻譯成另一種指令語言。我想問你一個問題。」

  彭遠征坐直了身子。

  「假設你現在要寫一個最簡單的代碼生成器,把數學表達式翻譯成後綴表達式,也就是逆波蘭表示法。比如a加b乘c」,要輸出abc乘加」。你會怎麼做?」

  這是經典題,不算難。

  彭遠征幾乎是下意識地回答:「用棧。遇到操作數就輸出,遇到運算符就和棧頂比優先級。」

  「好。」陸懷民點點頭,追問了一句,「那如果表達式中出現了括號呢?比如a加b乘以c減d。」

  「左括號直接壓棧。遇到右括號,就把棧里的運算符依次彈出,直到匹配的左括號。」

  彭遠徵答得很快,這些都是基礎的東西,對他來說自然不是什麼問題。

  陸懷民點點頭,繼續問:「彭師兄,你剛才說的是中綴表達式轉逆波蘭。現在我們換個角度想。如果不用棧,你能不能換一種方式實現同樣的功能?」

  彭遠征愣了一下。

  不用棧?

  他腦子裡飛快地轉了一圈。

  棧是這個問題標準的、最直觀的解。

  不用棧,還有什麼辦法?這他倒確實沒想過。

  「我————沒有想過這個問題。我一直用棧。」彭遠征知道他一時半會兒肯定想不到答案,索性如實回答。

  「棧沒問題。「陸懷民說,「棧確實是最直觀、內存開銷最小的方法。但如果我們面對的不是簡單的數學表達式呢?如果我們要處理的是一種更複雜的加工描述語言呢?」

  他頓了頓,繼續說道:「你想想,用棧來寫的話,每加一種新的運算符,你就要改一次優先級表;

  每加一種新的語法結構,你就要在棧的彈出邏輯里加一堆分支判斷。到最後,整個程序會變成一團亂麻,沒人敢改,也沒人能看懂。那時候你怎麼辦?」

  彭遠征的眉頭擰了起來。他隱約感覺到了陸懷民想說什麼,但又抓不住那個點。

  畢竟這個時代的代碼複雜程度和後世是不可同日而語的。

  很多後世的算法在這個時代極具有前瞻性。

  「有一種方法,叫遞歸下降。」陸懷民說著,在面前攤開的筆記本上刷刷寫了幾行偽代碼,把筆記本轉過來,推到彭遠征面前:「不用棧,用函數的調用棧來代替數據棧。比如a加b乘c」,你可以定義一個解析函數,遇到加號的時候,先把左操作數輸出,然後遞歸處理右操作數,最後再輸出加號本身。」

  彭遠征低頭看去。

  那幾行偽代碼寫得清清爽爽,遞歸的調用順序標註得明明白白。

  他一行一行往下看,心裡那層窗戶紙嘩一下就破了。

  「這————這不就是編譯原理教材里講的語法樹後序遍歷嗎?怎麼我一直沒想到用遞歸來————」

  他差點想說「用遞歸來做表達式轉換」,但話到嘴邊,他自己先愣住了。

  因為他突然意識到,他不是「沒想到」。而是他這些年來,從來只在「棧「這一個框架里打轉。

  因為棧是這個問題公認標準解法,書上這麼寫,同行這麼做,他在無線電廠寫的每一個工控程序也都是這麼寫的。

  所以他從來沒有想過,這件事可以不這麼做。

  可眼前這個比他還小十幾歲的年輕人,似乎壓根就不覺得棧是唯一的路。

  彭遠征忽然想起自己在無線電廠那十年,那本油印編譯原理教材時,書里有一頁專門講了「遞歸下降法」。

  但那一頁印得太模糊了,油墨糊成一團,只能勉強辨認出幾個標題。當時他沒在意,翻過去了。

  現在想來,他可能錯過了一扇門。

  「遞歸下降解析法,是這幾年國外在嵌入式編譯器里應用得比較多的一種方法。」陸懷民說:「它比棧更靈活,能處理更複雜的語法結構,而且代碼結構清晰,調試方便。如果我們課題組要做後處理編譯器,這個方法可能用得上。」

  彭遠征點點頭,心裡翻湧著說不清的滋味。

  「陸————」他抬起頭,一時竟不知該怎麼稱呼,「陸師弟,我能問一個問題嗎?」

  「請講。」

  「在遞歸下降的基礎上,如果要處理更複雜的語義一一比如說,數控代碼里的循環、跳轉、宏定義這些指令,你準備怎麼設計語法規則?」

  陸懷民笑了笑,反問:「彭師兄覺得呢?」

  彭遠征陷入了沉思。

  陸懷民問的這個問題,他感受到的不是考較,而是一種邀請。

  邀請他一起來思考。

  「我覺得————」他思考了一會兒,斟酌著字句:「可以在詞法分析階段,先預定義一個關鍵字表。解析器讀到循環指令L的時候,遞歸下降把循環體裡面的所有G代碼指令打包成一個中間表示子結構————」

  他頓了頓,忽然覺得這個思路很順,繼續說:「最後,把中間表示統一展開成目標工具機的G代碼。這樣一來,如果目標工具機換了G代碼方言,只需要改最後展開那一步,前面的解析邏輯完全不用動————」

  說完,他自己都被這個想法的清晰度驚了一下。

  「對。這其實就是分層編譯的思想。」陸懷民點點頭:「把編譯過程拆成前端和後端。前端解析語法,生成中間表示;後端把中間表示翻譯成目標代碼。這樣一來,前端不變,後端可以適配任意一種數控系統的G

  代碼方言。

  彭遠征看著陸懷民,心裡忽然有些複雜。

  他在編譯這個行當里埋頭啃了十年書,一直以為自己是懂編譯的。

  可剛才陸懷民提到的那些東西,比如遞歸下降、分層編譯、中間表示,這些東西也不是什麼複雜前沿的東西。

  但從來沒有人告訴他,這些零散的知識可以這樣串起來,可以用在一個實實在在的工程項目里。

  就好像學拳的人練了十年基本功,卻從來沒打過一場真正的拳。

  現在,對練的對手站在他面前。比他年輕,比他資歷淺,但一伸手他就知道,這人的功夫是真的。

  確實厲害。

  彭遠征忽然笑了笑,笑容里有敬佩,也有服氣。

  陸懷民繼續說道:「彭師兄剛才提到,其實對應的是中間表示層的設計。但一個真正能用的後處理編譯器,最複雜的往往不是語法,而是語義。比如,五軸聯動的非線性誤差補償,在中間表示層怎麼建模?」

  彭遠征的呼吸微微一滯。

  五軸聯動。非線性誤差。

  這是數控工具機領域真正的工程難題。

  「我————」彭遠征斟酌著字句,「數控工具機的運動學模型,我沒有深入研究過。但如果只是從編譯器設計的角度來看,誤差補償可以抽象成一種後端優化pass,在生成目標代碼之前,對刀位軌跡做一次坐標變換————」

  他說到一半,自己停住了。

  因為他忽然意識到,他說的「坐標變換」,其實暗含了一個前提。

  編譯器必須能精確理解工具機的機械結構。而傳統的編譯原理,從來不教這個O

  陸懷民點了點頭,說:「彭師兄說得對,那確實是一個優化pass。但這個pass的有效性,取決於你的中間表示能不能承載工具機的運動學模型。」

  他頓了頓:「這恰恰是我們這個課題組要解決的核心挑戰之一。傳統的編譯不涉及數控工具機的運動學,而傳統精密製造的教材又不會講編譯器怎麼設計。我們這個課題,要把這兩件看起來不相干的事,真正捏在一起。」

  「彭師兄剛才提的中層表示結構,如果能把運動學信息也建模進去,那這套編譯器就不止是一個翻譯工具,而是一個能理解物理規律的工程平台。」

  他頓了頓,合上了面前的筆記本,主動朝彭遠征伸出手。

  「今天就聊到這裡吧。彭師兄,感謝你來參加面試。」

  彭遠征站起身,和陸懷民握了握手,又朝錢振華和沈一鳴的方向各鞠了一躬。

  他轉身往外走時,腦子裡翻湧得厲害。

  剛才那十分鐘,確實讓他有一種醍醐灌頂的感覺。

  他不確定自己能不能通過面試順利加入課題組,但他確定一件事:今天的面試,來對了。

  如果錯過這個課題組,他會後悔。

  走廊里的氣氛有些微妙。

  彭遠征走出來的時候沒說話,臉上也看不出什麼表情。

  朱明成第一個湊上去。

  「彭老大,怎麼樣?」

  「邪門。」彭遠征想了想,吐出一個詞。

  朱明成一愣:「怎麼你也是邪門?題目太難?還是故意出偏題為難你?」

  「題目不難。」彭遠征靠在牆上,想了想,補充道:「只能說他做出那麼多成果,真不是憑空來的。確實厲害,盛名之下無虛士。」

  走廊里安靜了一瞬。

  朱明成看著彭遠征,忽然覺得這個平時什麼場面都見過的老大哥,這會兒說這兩個字時眼神裡帶著一種少有的服氣。

  「面試來對了。」彭遠征把帆布包往肩上一挎,「大家加油。這個課題組,值得進。」

  >


章節目錄