實現語言的自舉

幾乎全部的語言項目,其核心都是用更底層的語言寫的.express

底層語言大部分是 C,C++,而擴展這門語言的核心,就要用另一種語言
去寫。這給語言設計者較大的挑戰。編程

開發語言必須具有底層語言的編寫能力,而爲了能用本身喜歡的語言編寫
代碼,就必須用另一種低級的語言去寫要經歷反覆測試的優秀的代碼,
這是一種無奈。數據結構

不少語言的自舉項目是很是吸引人的,例如 PyPy, Java 語言也實現了
自舉。架構

如今有一種新的實現語言自舉的辦法:從解析語法開始併發

Perl6 從語言設計階段就決定讓語言實現自舉:讓語法分離出來。編程語言

語言的能力老是要有必定的表現形式,而這種表現形式的制定具備很強的
隨意性,這種隨意性和開發者的喜愛,性格,閱歷,經驗有關。而語言的
核心能力其實相差無幾,在形式上的喜愛追求,造就了編程語言的多樣性。函數

大部分語言都有和其類似的語言存在,不少人的沉迷在形式的構建上,作
了許多重複的事情。oop

其實形式是能夠單獨造成一門語言的,而這門語言能夠被解釋執行。這讓那些
注重形式的人能夠從不一樣形式語言的形式中解放出來,能夠專一於按照本身
的風格書寫代碼。這種將形式獨立出來的東西就是語言的語法。測試

在語言的語法背後,是很是單調的語言能力:設計

   變量賦值
   數據類型
   算數表達式
   條件判斷
   循環結構
   代碼續延
   函數代碼塊
   命名空間
   代碼預處理宏
   代碼註釋
   類型,函數的組織架構(面向對象,元類)

還有一些語言支持併發,抽象出進程和協議棧等數據結構。
這些結構本質上是續延:

   代碼能夠在後臺運行,而讓接下來的代碼繼續執行。

管理在後臺運行的代碼,合併後臺代碼計算的結果,構成了併發的各類
不一樣表現形式。

描述語言的語言叫作語法,大部分現存的語法規則都是文檔性質的,
也就是否是做爲代碼執行的依據,而是人寫代碼的參考。

也有一些能夠做爲代碼被執行的語法,但形式多樣,能力不一:

   這和語言的現狀同樣,形式化的不一樣形成了這個領域的重複建設

既然把形式分離出來,還要注重形式嗎?

全部的東西,都要有必定的表現形式,若是這種形式能夠被定義,那麼:

   形式應當儘量的簡潔,儘量的沿用現有的規則,被大多數人理解

      language Ruby

      main : expression+
      expression: condition | loop | assign | compute


有解析語言的能力的人,都有能力創立新的語言。有人願意擁有這種能力後,只是轉換別的語言嗎?

      現存的語法主要有 BNF EBNF Antlr-g4 Haskell-Parsent

相關文章
相關標籤/搜索