作者:楊軍
記得去年8月份就曾經(jīng)想自己動手設(shè)計一門語言,一開始的想法是先實現(xiàn)一門跟自己的目標語言特征有相似性 的現(xiàn)存語言的編譯器,在實現(xiàn)中積累對語言設(shè)計和實現(xiàn)的理解.記得當時選定了Ruby以后,就把C Ruby的源碼 下載下來,打印出其語法BNF范式. 后來就是一直在研讀Ruby的源碼,零零星星也花了些時間,因為總是感覺對 C Ruby本身的實現(xiàn)理解的還不夠通透,就一直沒有真正開始自己的實作,在我的想象中,真正動手去實現(xiàn)一門 編程語言(僅指實現(xiàn),不包括設(shè)計層面的工作)并不是一件容易的事情,潛在的這種假想就這樣讓自己一直處于 儲備階段.
及至到了新公司這邊,自己的第一個任務(wù)就是實現(xiàn)一門語言(已經(jīng)有相應(yīng)的IEEE標準)的編譯器. 這門語言已 經(jīng)比較成熟,市面上支持它的編譯器很多,也不乏一些開源的實現(xiàn).自己一開始當然也是下載了語言的IEEE標準 和相應(yīng)的開源實現(xiàn)研讀了一番.不過公司里的工作不像個人任務(wù)那樣,總是在你感覺達到一個好整以暇的狀態(tài) 以后才開始進行,項目的schedule,release的deadline往往會驅(qū)使個人在達到相對準備就緒的狀態(tài)以后就需要 開始實際工作的推進了(在我的理解中,對于預(yù)研型的項目來說,可能還可以有更多的儲備時間,但對于工程性 較強的項目來說,儲備時間往往并不會給很長). 于是在閱讀了語言的BNF描述,并對相應(yīng)開源實現(xiàn)作了一些研究以后,自己就開始上馬了.到現(xiàn)在為止,過去了大 概有兩個月時間,回頭看來,自己也基本上實現(xiàn)了這個語言的詞法,語法部分,支持80%的核心語法,可以成功地 讀入該語言的源文件,并生成內(nèi)存語法樹.現(xiàn)在自己已經(jīng)開始著手作一些語意層面的事情了.這個進度還是有些 出乎自己意料之外的.在剛著手作這件工作的時候,自己其實還多少是有些忐忑不安的,因為畢竟感覺還有太多 的東西不完全處于自己的掌控中,沒有那種充沛的成竹在胸的感覺. 但真的推進起來,才發(fā)現(xiàn),有很多東西,很多 理解,都是在實際的工作中強化,獲得的. 想想去年的8月份,自己就開始蘊釀設(shè)計一門語言,也一直在作儲備工作.過了一年時間,還是停留在儲備階段,沒 有開始多少實質(zhì)工作. 而真的被工作驅(qū)使,卻在不到兩個月的時間就已經(jīng)大致實現(xiàn)了一門以前自己并不太熟悉 的語言的parser前端. 這里面固然有部分原因是因為近一年來工作的積累讓自己可以更快速的完成相應(yīng)工作, 但也真切的感受到 一個問題,如果不實際動手作,僅僅是從外面看,往往會被一些表面上的困難阻塞住,產(chǎn)生不 可逾越的感覺,及至真的動手作了,才會發(fā)現(xiàn)未必然.如果不是在新公司有工作需要,自己可能還是感覺沒有作 好自主實現(xiàn)編譯器的積累. 雖然自己現(xiàn)在在編譯器設(shè)計實現(xiàn)方面仍存在大量的知識薄弱項需要補充,但這并不 意味著自己不可以開始著手作一些實際的工作.總是期待達到一個完美的積累狀態(tài)再去動手實際作,結(jié)果可能 就是一直陷入積累的狀態(tài)不能拔出. 轉(zhuǎn)載自: https://groups.google.com/group/pongba/browse_frm/thread/9a459b6efe94985a/ |
|