2010-11-27 72 views
1

在大學我主修的是編譯原理和語法,所以在這方面一個很好的背景(雖然很久以前),知道編譯器的創建是一個巨大的大創舉,至少如C語言++。人們如何創建自己的編程語言?

所以我很困惑,大量的編程語言,似乎已經由個人創造,而不是一大羣人在一個公司工作。 Ruby比如說,根據維基百科,它是由一個人創建的 - 我不知道這種語言可能是非常簡單的,但我的觀點是有很多自我創建的語言。

那麼,如何去了解作爲一個個體創造他們自己的語言(這是不是太簡單,是相當無用),而不是花一個人的整個生命這樣做?

是否有任何關於這個問題好書(未編譯器和一般,規格)?

+0

這個問題聽起來像[Programmers.SE](http://programmers.stackexchange.com/)會更好。 – 2010-11-27 01:53:51

回答

1

我已經沿着創建自己的語言的路線走了一段路。我開始這樣做來代表需求,分析和設計結構,而不是代碼編譯器。爲此目的,即使是一種非常簡單的語言也是有用的。我發現能夠在一個非常有限的英語模板句子中讀寫這樣的結構是非常有價值的。然後讓語言機器可讀,這樣就變得有用了,所以我使用Lex和Yacc構造了詞法分析器和解析器來讀取語言。當我走了,我已經擴大了語言和解析器來處理擴展。

我知道,這是從一個強大的編譯器的語言儘可能全面,C++很長的路要走,但說明了走這路線的動機之一。我認爲你認爲簡單的語言很無用是誇大其詞。即使是一種非常有限的語言也可以有很大的用處。

0

雖然我已經基本上使我自己的語言,沒有任何經驗,我有經驗的學習新的量好,這樣我就可以認爲這個 -

編程行業是一個語言市場。基於學習和使用的簡單性,缺乏商業和法律限制,適用於現實生活中的情況,靈活性和權力,語言的興起和普及都受到歡迎。如果你希望有一天你的語言能夠流行起來,那就試試這些。

如果你設計爲了自身利益的玩具語言(如許多計算機科學家做的),這是一個有趣的理論工作,並且還是相當有效的,但你可能不希望它變得相當那樣廣泛。

3

(雖然很久以前),並且知道創建編譯器是一項巨大的重大任務,至少對於像C++這樣的語言來說。

很多事情都合謀使事情變得更加容易:

  1. 計算機擁有更多的內存和速度。編寫早期編譯器所面臨的許多挑戰是能夠高效地完成這些工作,並且使用最少的內存。這就是C可以一次編譯的原因:當時,你可能沒有足夠的內存來容納整個源文件。在編譯器編寫的許多魔力在儘可能快地優化你的符號表格表示和解析之前,現在你可以通過更簡單,更容易的事情來獲得。

  2. 基礎技術變得更好。大多數語言都有很好用的解析器庫,高級數據結構(如果你已經有一個很好的哈希表實現,符號表是一個單元!)和其他工具,使得編譯器或解釋器的啓動和運行變得更加容易。

  3. GC無處不在。今天創建的大多數新語言都是垃圾回收。這樣可以更容易地設計語言(您不必指定詳細的內存語義)。與此同時,您可以針對CLR或JVM等現有GC平臺作爲語言作者,您不必編寫自己的GC。事實上,針對CLR或JVM使得作爲編譯器編寫者的工作總體上更容易:作爲更高級別的平臺,字節碼會在一半時間內與您相遇。

  4. 大多數新語言都是動態類型的。大部分正在創建的新語言都是動態輸入的。這些都是很多更容易設計和實施。我發現語言設計中的大部分挑戰是設計一個類型系統。同樣,編譯或解釋靜態語言更具挑戰性。動態語言的所有東西都只是一個物業包,出奇地容易起來和運行。

  5. 此外,計算機有更多的內存和速度。早在今天,如果您的語言有成功的可能,它需要編譯成高效的機器代碼,高效地使用內存並快速運行。否則,這將是無法緩慢。現在電腦速度非常快,即使像Ruby這樣的慢速語言仍然足夠快,可以用於許多實際用途。作爲一名編譯器編寫者,您不需要像以前那樣多的優化技能。

另外值得一提的是,沒有一個正在新的語言一樣複雜的C++中,這些天。 C++確實接近語言複雜性的最高端。

相關問題