記住Model Query Language, template languages, 和pattern languages都由強大的編輯器支持其自動完成、重構、引用檢查、錯誤勘測、等等;即使復雜的查詢、宏、模式,都可以很容易的編寫;代碼生成從來沒有這么強大過
Using Languages Together
前面有關代碼生成的章節帶來了一些關于這些語言如何一起工作的有意思的問題;事實上有幾種方法能讓語言一起工作;在MPS中,所有的概念模型都互相知曉;既然語言也是概念模型,那么便意味著所有的語言都彼此知曉,可以潛在的被連接在一起
語言彼此之間可以有不同的關系;你能夠通過擴展現存的語言來創建新語言,繼承所有的概念,修改其中的一些,并加入你自己的概念;一種語言可以引用其它語言中的概念;你甚至能將一種語言插入到另一種語言中去;我將在以后的文章中討論進一步的細節
Platforms, Frameworks, Libraries, and Languages
我們支持Language Oriented Programming的系統需要比元編程能力更多的功能才能更有用;它應該提供程序員依賴于當前的編程語言提供的所有事物:集合,用戶界面,網絡,數據庫連接,等等;程序員不止是單單基于語言本身來選擇語言;例如,Java的大部分功能不是語言提供的,而是有成千上萬的framework和API供 Java程序員選擇;他們買的不是Java語言,而是整個Java平臺;MPS也將有一個它自己的支持平臺
在我進入細節前,我們先簡要談一下frameworks;什么是framework?在主流的編程中,它通常意味著一堆類和方法打包成的一個類庫;讓我們更近一點的觀察這一點,看看在LOP的鏡片下我們會看到什么
我們為什么想要把類和方法打包成庫呢?程序員會背誦他們的教授曾經告訴他們的:“復用”;但這只是在原來的位置上留下了另一個問題:我們為什么要復用類庫?答案是類庫在解決特定類型的問題方面很有用,如制作用戶界面,訪問數據庫等等;你可以說類庫對應著某個領域;你瞧,我們看到了聯系,Class libraries are wannabe DSLs!這個悲傷的事實真令我沮喪
今天的Domain-specific languages以類庫的形式存在,除了它們不是語言,沒有語言的優勢,并擁有類和方法所有的局限;特別的,類和方法直接綁定到了特定的運行時行為,而特定的運行時行為是不能修改和擴展的,因為行為是提供“類”和“方法”的概念定義的;因為它們不是語言,類庫很少被環境(例如編譯器和編輯器)聰明的支持
我們應該忠于wannabe DSLs,還是應該擁有當需要DSLs的時候使用真正DSLs的自由?當然是自由;每個類庫都是為我們的平臺創建一種完全的DSL的候選;例如,JDK的所有類庫都應該是MPS平臺上的DSLs;其中一些DSL在現在剛開始的時候不是那么緊急需要,但其它一些從一開始就對平臺的功能和可復用性有強烈的影響;我將介紹隨MPS提供的三種最重要的平臺語言:The Base Language, the Collection Language, and the User Interface Language
Base Language
我們首先需要的語言是對應最簡單編程領域的,一種general-purpose的命令式編程;這種簡單的語言應該支持近乎通用的語言特性諸如算術、條件、循環、函數、變量等等;在MPS中我們有這樣一種語言,它被稱為Base Language
對這種語言的需求應該是很明顯的,例如,如果我們想把兩個數字加在一起,我們應該能夠簡單的說一句“a + b”就可以;我們不需要到處去使用它,但幾乎所有的程序都會有一些組成部分用到它,在那里,它是完成工作最合適的工具
文章來源于領測軟件測試網 http://www.kjueaiud.com/