大學3年立志像輪子哥寫個編譯器,可能嗎?

本人在渣渣一本,大一軟體工程,立志往c++方向發展寒假之前C++ Primer看的差不多了,初學cocos2dx模仿寫了個別踩白塊遊戲,和QT寫了一個記事本,感覺就是學API,堆堆代碼,(沒技術含量)這是成為碼農的節奏啊,大一上學期看完了數據結構(不過忘的差不多了),不過演算法幾乎=0,很想知道底層東西,接下來想學&<&<編譯原理&>&>,看到輪子哥說,寫一個編譯器會應用各種演算法等等,一大堆好處,知道編譯原理十分難學,但想要成為大牛,就應該硬著頭皮學下去,不過擔心智商不夠,可能向輪子哥那樣大學4年寫出一個編譯器嗎??


不要人云亦云,大一追求這個真沒必要,你現在只會C++ 的話頂多也就只能寫C 語言的編譯器而已,這貨類型系統一坨翔,又沒有runtime,研究深了也就只會把multiple pass 改成one pass 而已(因為我預計你會看龍書…),這些ad hoc 技術對你以後的幫助真不大,而且我認為學習編程語言原理最有趣的恰恰是type system和runtime system,這兩種東西不博覽語言根本不能理解。

正確的做法是認真對待每一個領域,多學幾門語言,在上各種課的時候不斷練習它們,最後你發現了你對編程語言真正感興趣的地方再去嘗試實現它,而不是跟在別人後面刷存在感。


當然能。我上高中第一次做出一個不帶指針的pascal模擬器的時候,數據結構只學到鏈表,其它理論知識什麼都不會。你既然有三年,肯把編譯原理看懂個10%,好好學習演算法導論的話,肯定也能寫一個出來,而且比我高中的這個要強得多。

還有,「大學4年寫出一個編譯器嗎」這個說法是不對的,因為我寫了一大堆實驗用的,不是一個(逃


現在寫編譯器其實沒有那麼難了,有無數的教程和成熟的工具鏈。編譯器並不神秘,它也只是程序的一種體現形式,所以只要你踏實學習相關知識,是可以寫出來的。


心動不如行動。Coursera上有斯坦福的編譯器的課,五次作業下來就是一個編譯器。不用上年,一學期足矣。

無論OS還是編譯器,都是沒弄之前我擦好NB的東西。真正自己寫了就發現,不過如此。沒什麼難的。

如果你有興趣自己寫OS,伯克利開發的Nachos是個好開頭。伯克利的OS課在Youtube上每學期都會更新,跟著那個上課,然後作業就是Nachos,Nachos是一個跑在mips虛擬機上的非常簡單的OS框架,你一學期下來Nachos就可以類似一個70年代的Unix了。

Enjoy。


國內計算機是只有編譯器可以學了么。。難怪別人都說碼農好無聊。學完了也是敲代碼。

看到「輪子哥說」就決定人生目標了,樓主你是3本的么。。那我也說了,不做編譯器也可以學到很多數據結構和演算法。你現在就可以去刷leet code


brainfuck編譯器也算編譯器。所以不設下限的話,答案是可能,完全可能。不過花一個星期,一個月,一個學期,一年,若干年,寫出的編譯器不是一個概念。


編譯原理是必修的,課程作業一般都是寫一個簡單的編譯器...


可能,但是你要做到什麼程度就是另一回事了


llvm寫寫前端很快搞定


當然可以,我們編譯器設計概論期末大作業就是寫個編譯器啊 編譯老師自己定義的 minipascal語言。


可以用yacc擼一個出來玩啦


沒必要非得寫個編譯器出來,在你學習的過程中能打下非常好的數據結構和演算法的基礎


現在輪子這麼多

我感覺工作量差不多應該是一個半年的本科畢設

三年課餘時間足矣


只要上編譯原理課的話,總會做一個玩具編譯器吧。至於做到什麼程度,那就是個人能力的事情了。


不藉助工具,純手寫大概半年能搞定。

後期測試和維護坑太大。。


可以的,我就學了一學期c,暑假自學的數據結構和演算法,現在在學編譯原理,老師給了框架,逐步填內容中。我一個半路出家的通過半年的學習尚且都可以這樣寫,你好好學三年差啥寫不出。


好好學 說不定你的後代碾壓vczh後代一百條街 也是一種優越感 我們這代只有大學接觸編程的窮逼樣就不想了哈


當然可以,我們上學期編譯大作業就是寫一個簡單的編譯器,也不過兩個月就寫完了。

當然如果想實現一個非玩具語言,那麼需要的時間就久了。

比如,你想加一個簡單的GC,就用最簡單的引用計數好了。即使這樣,寫的難度還是會急劇提升,需要跳的坑也變的相當多。如果你寫的是個解釋型語言想加個JIT,那就更爽了,先去啃paper知道JIT的概念作用實現要點,然後實現中還有許多坑要填。這樣一個東西寫一年毫不奇怪,但是收穫也遠遠大於一個簡單的編譯器。而且在寫的過程中,因為項目規模比較大,還可以讓你明白軟體工程這東西到底有啥用,也是額外的收穫了。

所以想寫就動手咯。

順便一提,寫編譯器的過程中大部分時候都不靠智商,靠得是良好的工程習慣和靠譜的構架設計……


寫一個非常簡單的話用現成工具可能半天就可以了。flex+bison+llvm這些都搜一下,實現很簡單的邏輯就可以搞出來

ps,網上一大堆教程,step by step你就可以搞出來

但輪子哥可能真的是每個輪子挨著造的...


我現在業餘時間也在搗鼓這些玩意打發時間,暫定名「poi語言」


推薦閱讀:

關於typedef的疑問?
如何評價只有 LLVM 10% 代碼的 QBE?
如何學習JIT,能提供一些系統全面的路線和材料嗎?
想編寫一個虎書中的編譯器,該如何上手?

TAG:編譯原理 | 編譯器 |