如果您的引導程序語言中的編譯器工作正常並且可維護,爲什麼要更改它?例如,Go的編譯器重寫爲1.5版本中的自承載,導致了compile times to become much slower:當Go的目標是快速編譯時,這顯然是不利的。編譯器是否有自我託管的實際原因?
回答
一個實際原因是社區。用你的語言編程的人可能更喜歡在編譯器中編程,如果它用相同的語言編寫的話。如果我的編譯器位於Fortran/COBOL中,並且它生成Go
我不太可能吸引Go開發人員加入編譯器。
另一個是構建鏈,即依賴項。如果你用一種語言編寫編譯器併產生另一種語言,那麼當你可以解決這個問題時,你有兩組測試。這也會導致減少進入門檻,即你不需要開發人員去了解多個工具鏈等。瞭解兩種語言的能力足以成爲一名有能力的編譯器作家,都是艱苦的工作,並縮小了潛在的受衆羣體的幫助範圍。 獲得幫助對於大多數開源項目來說非常重要,任何能夠增加潛在開發人員基礎的東西都具有確定的實際優勢。
您還可以列出測試作爲附加好處。如果你已經編寫了一個自己託管的編譯器,那麼這個語言需要很多東西來使自己的主機(比如文件IO,字符串操作,符號表,樹和列表)變得相對容易(而不是拉扯牙齒)。顯然,你可以在沒有所有這些的情況下生存下來,但它開始使編寫器變得更加困難。這種坐在吃你自己的狗食營。
它被認爲是Rite of Passage
但我不認爲這是一個非常實際的理由,除非你能證明它吸引了開發者或其他理由去做,也許對成就感覺良好是一個實際的好處,即你是不太可能放棄它。
有在這裏一個有趣的話題......
對於一些具體原因有羅布派克的讀幻燈片爲什麼他們搬到轉到編譯器Go instead of C。幻燈片中的結論是:
- 擺脫C是項目的一大進步。
- 代碼更清潔,可測試,更好,更容易處理。
- 新的統一工具鏈可以減少代碼大小,提高可維護性。靈活的工具鏈,便攜性仍然至關重要。
根據不同的語言,您從不同的語言中獲益。
任何外部工具也有它自己的版本問題,並且社區效果非常明顯,不僅在開發者中,而且在外部圈子中更是如此開發人員。有知識的用戶突然需要雙語(或三語)技能來隔離錯誤並創建完整的報告。 (如果運行時庫以另一種語言編寫,則爲三倍) –
- 1. 是否有可能使用不同於非託管源的編譯器標誌來編譯託管源?
- 2. Amazon EC2上是否有任何實際託管的* *?
- 3. 我的插入器類沒有被編譯的原因是什麼?
- 4. 當自我託管究竟是什麼原因AddressAccessDeniedException:HTTP無法註冊URL
- 5. PHP mysqli_query沒有在實際的託管服務器上工作
- 6. 類實例變量內部類的原因編譯器錯誤
- 7. Firebase自動完成API的原因編譯器錯誤Swift
- 8. 我的代碼中編譯錯誤的原因是什麼
- 9. 是否有可能在我們自己的服務器上託管conversion.js
- 10. 編譯器會將實際定義
- 11. 編譯器返回鐺錯誤1沒有明顯的原因
- 12. 「svc」是否有任何gcc編譯器原語?
- 13. gfortran沒有編譯實際變量
- 14. 爲什麼我會選擇一個對象的閉包是否有實際的原因?
- 15. 是否有Groovy GPath編譯器的XPath?
- 16. 什麼是託管原型?
- 17. WinDBG - 查找實際(非託管)異常
- 18. JavaScript:JXON轉換,是否有「@」的原因?
- 19. 是否有靜態方法的原因?
- 20. 是否有預編譯器定義,告訴我我正在編譯iOS?
- 21. 編譯器內是否有預編譯IPV6的標誌
- 22. 的std ::刪除原因編譯錯誤
- 23. 是否有kernel32.searchpath的託管API?
- 24. GTK3編譯不會找到我實際編譯的GLib2.0。我錯過了什麼?
- 25. GLSL着色器不會編譯,有人可以幫我找出原因嗎?
- 26. 是否有一個Java SWF編譯器?
- 27. 是否有內聯網頁編譯器?
- 28. 是否有Java到Flash編譯器?
- 29. 編譯器是否對Boost.Build有用?
- 30. 使用`for ... in`自我託管的javascript編輯器?
https://en.wikipedia.org/wiki/Eating_your_own_dog_food –