人們習慣性的認為程序是作為文本來存儲的,也就是說,一個字節流;為什么不應該是呢?畢竟有無數的工具來編輯、顯示、操作文本;今天的編程語言的核心部分是文法器,解析器,編譯器和面向行的調試器;但是程序的文本只是程序的一種表現形式;程序不是文本;強行把程序塞到文本里引起了大量你可能還不知道的問題;我們需要一種不同的方法來存儲并和我們程序一起工作
當編譯器編譯源代碼時,它把文本解析成稱作抽象語法樹的樹狀結構;當程序員閱讀源代碼時,他們在腦海中做了本質上相同的事情;我們仍然不得不考慮程序的樹狀結構;這就是為什么我們要有花括號,方括號,圓括號等;這也是為什么我們需要格式化和縮進代碼和遵守編碼規范,因為這樣就能夠更容易的閱讀源代碼
我們為什么使用文本存儲呢?因為當前,閱讀和編輯程序最方便和最通用的方法還是使用文本編輯器;但是我們會為此付出代價,因為程序的文本表示有重大的缺點,其中最重要的是基于文本的編程語言非常難于擴展;如果程序以文本的形式存儲,你就會需要一個無歧義的文法器來解析程序;當為語言加入新特性時,維護語言無二義性的擴展變得日益困難;我們將需要發明更多類型的括號、操作符、關鍵字、順序規則、嵌套,等等;語言的設計者們花費了無數時間來思考語法,并試圖發現擴展語言的新方法
如果我們打算讓創建語言變得容易,我們就需要將程序的表示和存儲從程序本身分離開;我們應該直接將程序存為結構圖,因為這允許我們對語言做任何我們喜歡的擴展;有時,我們甚至根本不需要考慮文本存儲;今天的一個很好的例子是Excel spreadsheet.百分之九十九的人根本不需要處理存儲格式,當這成為問題時總會有各種導入導出功能可用;今天我們使用文本的真正原因是我們沒有比文本編輯器更好的編輯器,但是我們可以改變這一點
問題是文本編輯器很愚蠢,并且不知道如何與程序的圖狀結構一起工作;但是使用正確的工具,編輯器將能夠直接和圖狀結構一起工作,并且能夠讓我們自由的使用任何編輯器提供的我們喜歡的可視化表現形式;我們可以把程序做成文本、表、圖、樹、或其它任何形式;我們甚至能為不同目的使用不同的表現形式,比方說,圖形化表示用來瀏覽,文本化表示用來編輯;我們能夠為代碼的不同部分使用領域相關的表示,比如為數學公式使用圖形化的數學符號,為圖表使用圖形化的圖表,為 spreadsheets使用行和列,等等;我們能夠為問題域使用最合適的表現形式,可以是文本,但不限于文本;最好的表現形式依賴于我們如何思考問題域;表現形式的靈活性也將使我們的編輯器比以往更加強大,因為不同的表現形式有不同的方式去編輯它們
What Is a Language in LOP?
最后,我應該闡明我認為的“語言”是什么;在LOP中,一種語言是通過三個主要的要素來定義的:結構、編輯器、和語義;結構定義了抽象語法、支持的概念、以及如何安排它們;編輯器定義了具體的語法,如何描繪和編輯語言;語義定義了行為,它如何被解釋,和/或它如何被轉換成可執行代碼;當然,語言還可以有其它方面,比如約束和類型系統
Part II. INTRODUCTION TO META PROGRAMMING SYSTEM
Creating Languages in MPS
我已經解釋了為什么我們需要容易的創建新的語言,但是,我們如何才能讓它容易呢?如果你turn around這個問題,并且把Language Oriented Programming應用于它自身,你會很快看到答案;This calls for a little self-referential bootstrapping, which can seem tricky, but be patient. 一旦你理解了這個,你將得到LOP真正的力量(一個LOP的元層次)
文章來源于領測軟件測試網 http://www.kjueaiud.com/