第32章 長夜漫漫
而這麽長的時間裏麵,葉新晨也是在解決上麵這個BUG的嚐試中,才發覺TCL這種語言先天不足。
因為一旦程序邏輯複雜,它那變量無需聲明、變量無類型等等對初學者來說不可多得的“優點”就成了致命缺陷。
這會讓人不得不付出比C/C++之類“正規語言”多得多的努力去跟蹤去區分數據類型。
而且為了避免錯誤,葉新晨也不得不把數據類型也“打包”進數據,然後在程序入口寫代碼分辨它——尤其是,這些數據類型還是動態的,是從輸入數據識別出來的;不結合輸入誰都不知道某個數據在某個時刻會是什麽。
這使得代碼幾乎無法靜態分析;而測試用例很難覆蓋每一條執行路線——不要忘了,這個程序“吃”進去的數據是多變的,幾乎不可能列出所有情況。
這使得葉新晨又產生了一個想法。那就是,要給它增加一些功能,把專業語言的core dump、變量先聲明後使用等等功能搞出來,使得出現類似高危行為時可以得到提醒甚至直接對相關不良行為報錯。
當然,葉新晨是沒有這麽自覺的,隻是葉新晨跟他們說了,他們立刻就私發了一個六萬的懸賞讓葉新晨幫忙!
原本葉新晨是不願意的,因為那七天已經夠累的了,晚上都熬到淩晨三四點,每天就睡三四個小時,這讓葉新晨深刻的明白為什麽程序員容易頭禿了。
雖然葉新晨不願意,但是奈何對麵又把這個六萬的懸賞又加了四萬……
嗯,葉新晨覺得這個功能也不是那麽難,熬夜那就熬夜唄……
所以葉新晨也是立刻就進入狀態了,TCL號稱一切都是字符串,這甚至可以把係統庫函數/運算符/關鍵字都給rename掉,然後自己寫一個替代品。
這給了它的用戶極大的自由度。
比如iTCL就是用命名空間模擬的麵向對象語法——這種語言仍然是麵向過程的;但你可以自己定義一個class關鍵字(實質上是一個過程),把它變得和一個真正的麵向對象語言幾乎一模一樣。
葉新晨首先盯上的是它的過程/函數聲明關鍵字proc。
在這種語言裏,你聲明一個函數fun,格式就是
proc fun(arg){
#body
}
它看似一個關鍵字;但TCL裏一切都是字符串,因此這個proc實質上是個函數,它接受函數名、參數列表、函數體三個參數……
葉新晨也是把係統的proc改名叫_sys_proc,自己寫了個proc;這樣當用戶聲明一個函數/過程時,他的聲明將以字符串格式先傳給他。
這樣子的話葉新晨就可以做一些修改,把一些邏輯插進用戶編寫的代碼中,然後再把修改後的代碼傳給_sys_proc。
通過這種方式,葉新晨就接管了TCL的一切;然後修改了它的異常/返回流程,識別出“用戶未捕捉的異常”。
畢竟葉新晨是記錄了每個函數在某次被調用時、在調用鏈上所處的層級。尤其接近頂層尚未捕獲就會影響到當前測試用例、當前測試套甚至引起整個程序過早退出,這些都是要記錄的。
現在,當程序出錯時,如果通過異常處理程序解決了問題、允許程序繼續執行了,那麽葉新晨就不做任何動作。
但如果沒有處理異常、使得測試失敗甚至程序退出,那麽葉新晨就能在執行下一條語句之前把整個調用鏈打印出來——從函數調用關係到每個函數的局部變量內容、再到異常傳遞路徑,巨細靡遺。
這個設計相當於函數返回時會多執行幾條語句,把局部變量等信息保存在內存中;隻要程序不崩潰,那麽這些信息就自動丟棄;而一旦程序要崩潰,它就會寫到磁盤文件中——葉新晨自己搞了個日誌滾動機製,專門記錄最近十次崩潰信息,並不會無限侵占磁盤空間。
通過這個東西,再付出微不可察的時間代價,葉新晨給所有TCL程序增加了core dump功能。
這顯然是個重大利好。
這就是為什麽他們為什麽願意花費十萬請葉新晨也幫忙做這個功能。
不過畢竟剛剛完成了另一個懸賞,所以晚上的時候葉新晨也不會立刻紮進去,他要好好的休息一個晚上,也就是今天晚上他不想熬夜了。
看著躺在床上看著綜藝節目的王曉雪不時的發出清脆的笑聲,葉新晨突然覺得世界還是很美好,比代碼那個世界好的多。
“老公,我們是不是存款又多了?”一旁的王曉雪注意到了葉新晨的目光,也是將手機中的綜藝節目按了一個暫停鍵。
前七天,王曉雪一直看在眼裏,畢竟葉新晨每天都是淩晨三四點才睡覺,而且下班一回來除了吃飯洗澡的功夫,基本上都是埋在了代碼裏麵。
連和她聊天的時間都寥寥無幾,不過王曉雪雖然沒有學過程序,但是也知道一直在忙碌著程序代碼的葉新晨是不能夠打擾到,因為聊著天代碼容易寫錯,最重要的是萬一一個失誤,腦海中的思路沒有了,那才是真正的坑爹了!
也因此,王曉雪這七天也就是燒燒飯,洗洗碗,然後刷刷劇要麽看會兒綜藝節目。
現在看到葉新晨終於是有時間了,也是轉過身來,葉新晨將胳膊放在了王曉雪的頭底下,王曉雪像個小兔子一樣縮到了葉新晨的懷裏麵。
“嗯,又多了,我們差不多有四十二萬了。”葉新晨自己說出這個,都覺得有些不可思議,而且還有個十萬懸賞的功能葉新晨也能做出來,相當於在結婚之前,葉新晨手裏能夠有五十二個達不溜!
這放在一個多星期前誰敢相信?
總共就八天時間,賺了這麽多,是個普通人都覺得牛筆臥槽666呢!
“嗯。”王曉雪像個小貓咪一樣答應了一聲,然後又說道,“那你接下來就不要去接了吧,好好的休息幾天吧,我們已經有四十多萬,其實已經夠了。”
“畢竟身體最重要,而且今天已經是二十七號了,還有幾天我們就離職了,也沒必要這麽拚了。”王曉雪摸了摸葉新晨的臉龐,笑了笑。
葉新晨盯著王曉雪的麵孔,臉上露出了壞笑,“長夜漫漫……”