有趣的自舉

有趣的自舉

4 人贊了文章

兩三天前,茶餘飯後和朋友聊到前端世界變得越來越復(ke)雜(ai),近幾年湧現大量的工具,改變了傳統的開發模式,瀏覽器中不再是裸奔著我們手敲的代碼,替而代之的是經過工具預編譯/壓縮混淆處理過後的代碼。多樣化的工具使我們不再疲於關注瀏覽器的兼容性,而是抽出更多的時間思考設計模式、演算法、把妹等更多有價值的事情。

A: "你最近在研究什麼技術呢?"

B: 「最近在看前端編譯相關的東西,今天看到一篇文章,介紹了一個用 JavaScript 寫的 JavaScript 解釋器,作者把它用在了小程序上,通過 Ajax 獲取可執行代碼,繞開了微信官方的審核,太牛逼了!!!」

A: "卧槽,666,會編譯原理原來真的可以為所欲為"

B: "是啊,你知道嗎,Typescript 的編譯器,也是用 Typescript 寫的呢"

A: "這個是編譯原理裡面的自舉吧?"

B: "嗯嗯,沒錯。"

C: "有點難理解,用自己解釋自己,那不無限循環了么?"

B: "是的,如果最初就直接用 Typescript 寫自己的編譯器,是會陷進循環的,要打破這種循環,得先用低版本 Javascript 實現一個 Typescript 的編譯器 A,經過大量測試用例驗證後,再用初版 Typescript 語法實現 Typescript 的編譯器 B,編譯器 B 執行前需要通過編譯器 A 編譯成可執行的低版本 Javascript,再往後迭代,可以把編譯器 A 放進回收站,用上一個 Typescript 版本語法實現的編譯器去編譯生成下一個版本的 Typescript 編譯器,這個還真是神奇,用自己證明自己的可靠性。"

C: "還是有點繞,有沒有什麼通俗的例子可以方便理解呢?"

A: "你用螺絲刀造了個機器人,發現這樣效率太低了,然後不斷升級機器人的功能,後來機器人變牛逼了,你指揮著機器人,就可以讓它造出一台和自己一樣的機器人了,功能還比原來的強大。"

C: "懂了,你們聊,我先走了"

聽 C 說他回去後買了個電動螺絲刀,準備造機器人了

推薦閱讀:

關於 TS
TypeScript 3.0 元組類型的用法和一些奇技淫巧
TypeScript基礎入門 - 枚舉 - 數字枚舉和...
微軟發起TSDoc項目試圖規範文檔格式
TypeScript(三) 做一個計算器

TAG:編譯原理 | 編譯器 | TypeScript |