作者snaketsai (さいでんし)
看板Gossiping
標題Re: [問卦] 有沒資工系畢業門坎 沒"自己的編譯器"這要求?
時間Thu Jun 1 08:41:49 2017
路過賺點P幣
分幾個層面來講
資工領域太廣,自己實做編譯器的經驗
對於某些領域的學生來說是必要
而對其他領域來說,可能就不是如此必然
譬如說一個弄系統程式/電腦架構的人,
我覺得對編譯器/直譯器運作是要有概念的
例如說,某種code的寫法會不會造成- -
branch predictor誤判率增加?
有變數被optimized掉導致有不正常行為?
struct大小或著array的寬度導致false sharing?
ABI不相容?
......
etc
所以根本之道還是需要落實學分學程制
讓真正需要洗頭的人乖乖洗頭
不用碰的人就去碰他們領域需要克服的難關
(當然啦,上述那些很雜的坑可能不用寫過compiler也聽過)
另外,還是想吐嘈一下某些學校什麼都丟主修
好像學生修完之後就可以了
以某校來說,就算是列為必修
也是開成一學期的課而已
會用flex+bison寫出lexer+parser,到codegen成asm通常已經是極限了
很多東西都還沒教
而光parser能玩的東西跟理論就很多了
(都可以夠人專門寫一本書講了
推這本:
https://goo.gl/yTTA9L )
現在多數學校寫作業用的flex+bison,基本上只在一些早期專案會看到
近代的compiler專案多半傾向自己刻recursive descent parser
clang是、GCC也是
其一是flex/bison要客製化需求很麻煩
用parser generator的壞處是只能在它開放API的地方操作
假如說要做容錯、或著吐出額外的除錯資訊給使用者看
變成要去hack這parser generator的code
其二是就算要用parser generator,也有更好整合進撰寫語言的選擇
像是Boost的PEG,或著Java的AntLR
不像flex/bison這樣有自己的模板語言/macro magic
而是很好的重載了邏輯語言的operator跟其他syntax
AntLR甚至就直接長一顆AST給你,traverse就能做事了
我想表達的是:
如果是要訓練學生手刻能力,
那還不如讓學生真的hand-written,仿效現在大專案的強度下去訓練
如果是要學生熟練既有工具,
那也有更現代、更符合現代軟體工程思維的事物可以挑選
現在的教學模式就像卡在時代裂縫一樣
然而,要教深就要多給時間
還有多給助教人力和錢來改教材
老美一些這領域有名的名校有些會開到三個學期來教
強度實在差太多
不過我一段時間前好像有看到某校作業codegen那段,
助教的tutorial教人怎麼接llvm IRBuilder
好像還有教怎麼寫llvm pass來寫optimizer
可惜我這邊硬碟壞掉過現在資料撈不回來
如果是那位很猛的助教(算算時間現在應該已經在工作了?)看到,
還求大大重新公開一下當初的教材
拯救一下其他蒼生(compiler 助教) m(_ _)m
最後私心哭腰一下,我到現在還是覺得:
一個資工人就算修完所有必修,
多半對於「程式怎麼被跑起來」沒一個透徹的概念實在很可怕
另外像OS的loader、還有Libc dynamic loader這塊幾乎是空白的,
我好像真的沒看過有哪門課會談這件事
實在有種像是:「水龍頭轉開就會有水跑出來」的既視感啊(苦笑)
--
Linux is the bone of my world.
Kernel is mybody, and initramfs is myblood,
have created over a thousand Distros.
Unknown to impossibility.
Nor known to limitation.
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.167.181
※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1496277713.A.A8E.html
推 ke5566: 我也想學學, 有沒有推薦的書? 06/01 08:45
推 aaagang: 要學的好不容易,我覺得學生資質跟的上的太少了,業界需求 06/01 08:46
→ KimJongUn: 簽名檔偷渡fate 06/01 08:46
→ aaagang: 在台灣又更少了 06/01 08:46