<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    MDA之路

    MDA,UML,XML,Eclipse及Java相關的Blog
    posts - 53, comments - 494, trackbacks - 0, articles - 2
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    LOP(language oriented programming)讀書筆記

    Posted on 2005-03-04 12:35 wxb_nudt 閱讀(618) 評論(0)  編輯  收藏 所屬分類: 技術雜談

    標題:Language Oriented Programming:The Next Programming Paradigm

    網址:http://www.onboard.jetbrains.com/is1/articles/04/10/lop/mps.pdf

    中文譯文網址:http://blog.csdn.net/chelsea/archive/2005/02/17/290486.aspx

        這篇文章的中文譯文在切爾斯基的blog上面看到,翻譯得非常好,看來是花了不少工作量,而且譯者對這個領域非常熟悉,強烈感謝那些翻譯外文文獻無私貢獻給大家的人。下面的摘要直接轉載了切爾斯基的原文摘要。大意和感想部分是我自己寫的。

    摘要:

    現在是軟件開發中開始下一次技術革命的時候了,而這次革命的輪廓正變得越來越清晰。下一代編程范型也在接近我們,但仍然沒有完全成形--不同的部分有不同的名稱:Intentional programming, MDA, generative programming, 等等;我建議把把所有這些新方法歸并為一個名字: language-oriented programming’(面向語言的編程), 而本文將闡述這種新的編程范型的主要原則今天主流的編程方法有一些內在的假定像脖子上的繩索一樣桎梏著我們,盡管大部分程序員還沒有意識到它;即使算上在編程領域取得的所有進步,我們也仍然處于石器時代;我們有我們信賴的石斧(面向對象編程),能夠滿足我們的需要,但是當用它來對付最困難的問題時,它會裂成碎屑;為了超越石器前進,我們必須馴服烈火,只有這樣,我們才能鑄造出新的工具,激發一個創作的新時代,和新技術的爆發。我將討論編程的局限,它強迫程序員像計算機一樣思考,而不是令計算機像程序員一樣思考;這是嚴重的,根深蒂固的局限,需要花費巨大的努力去克服它;當我說這將是編程中下一個大的范型轉換時我并沒有自命不凡;我們需要徹底重新定義我們編寫程序的方法本文中,我表述了我的觀點和我當前在Language Oriented Programming (LOP)上的工作;首先我將展示目前主流編程方法的錯誤,然后我會使用示例來解釋LOP的概念,它們基于我已有的一個LOP的實現:Meta Programming System (MPS). 本文有意只是給你一個對LOP的驚鴻一瞥,目的是激發你對這個思想的興趣,并希望能夠得到反饋和討論。

    大意:

    全文總體分為兩個個部分:一是面向語言編程概論;二是元編程系統的介紹。

    第一部分討論了這個幾個問題:

    1)通用編程語言(例如JAVA,C++)和DSLDomain Specific Language,例如SQL)之間的比較與分析。顯然通用編程語言適用面廣而不精;而DSL則精而不廣;

    2)當前主流編程方法與LOP的流程比較:主流編程方法分為思考、選擇、編程;而LOP分為思考、選擇、創建、編程。

    3)當前編程語言的缺點:一是實現的耗時長,從確切的知道某個問題的解決方案到編程實現它總是一個漫長的過程;二是代碼的維護和理解困難;三是陡峭的學習曲線,學習編程語言以及相關的類庫總是一個艱難的過程。

    4LOP的細節:對于“編程”的定義,編程不是寫一組計算機指令,而應該是對某個問題的清晰無誤的表達;“編程”不能僅僅限制在文本中,程序不應該天生就是文本;LOP將編程語言分為三個部分:結構、編輯器、和語義;結構定義了抽象語法、支持的概念、以及如何安排它們;編輯器定義了具體的語法,如何描繪和編輯語言;語義定義了行為,它如何被解釋,和/或它如何被轉換成可執行代碼;當然,語言還可以有其它方面,比如約束和類型系統。(上一句話引自http://blog.csdn.net/chelsea/archive/2005/02/17/290486.aspx的譯稿)

     

    第二部分介紹了如下內容:

    1)在MPS中如何創建語言:“創建語言”本身是一個問題,解決這個問題的方法就是一個“程序”。我們知道對于“程序”使用DSL可以得到更高的效率。于是MPS提供了用來“創建語言”的DSL。對應于語言的三個方面,MPS提供了三種語言:Structure Language用來創建語言的“結構”;Editor Language用來創建語言的“編輯器”;Transformation Language用來創建語言的“語義”。

    2)平臺、框架、庫和語言:MPS提供了三種基本的語言:Base Language是一種最小化的通用語言;Collection Language是一種專門用來處理集合的語言;User Interface Language是用戶界面語言。

    3MPS的起步:MPS目前剛剛起步,可能適用于以下兩個方面:Java應用程序;創建你的應用程序的配置/腳本語言。

     

    感想:

    1.       關于“編程”本質的討論。

    關于“編程”的本質,作者在文中說:“今天,百分之九十九的程序員認為編程就是編寫一串計算機能夠執行的指令集;我們被教育說計算機建立在圖靈機模型之上,因此它們用指令集的術語來“思考””。這句話放到五年前說還差不多,當前MDA技術的發展,很多程序員已經脫離了這個誤區。其實,從最早期的計算機教材中就已經清楚的說明:程序是從問題域到解決空間的一個清晰無誤的解決方案。選擇計算機指令集作為程序的表達方式只不過是一種無奈的選擇,當前的很多技術已經盡力要脫出這個巢臼。以MDA技術為例,當前很多的MDA工具已經可以不寫一行代碼解決一些經典的問題,例如用ArcStyler編寫Web訪問的程序,只需要建立模型然后進行代碼生成和配置即可。還有RoseEMFUML工具,可以把大部分的編程工作放到構建UML類圖中,只是在最后進行少量的代碼補充工作。Together更是使代碼和UML圖一致化,同時用不同的方法展現程序。因此,其實“編程”的本質在很多程序員的心里已經達成了共識,大家不甘心在“編寫計算機指令集”這棵樹上吊死,只是如何才能找到更好的解決方案目前還眾說紛紜,希望LOP是一條光明之路。

    2.       程序和本文之間關系的討論

    萬惡的MFC也曾經給我一些啟蒙教育,其中最出色的就是它的“文檔-框架-視圖”結構,雖然它把著名的MVC模式解釋得一塌糊涂,不過當時的我還是覺得一個文檔可以對應多個視圖是一個很棒的想法。當然,在MVC中我才真正領略了modelView的實質所在。對于程序來說,其根本實質可以稱之為model,而其表現形式可以稱之為view。在目前看來,大部分程序的view都是以文本形式表現的,例如java代碼。不過,UML在前幾年就已經顛覆了這個“程序即文本”的觀點。UML的成功就在于它提供了適當的圖形化符號來對應程序的結構部分。但是當前我們還是不能完全離開文本代碼的,不過在圖形(例如類圖或者程序流程圖)和文本之間尋找一個適當的平衡是一個很有意義的事情。我記得曾經在一篇文章中有人專門討論過這個問題:http://www.softmetaware.com/oopsla2003/bettin.pdf

    3.       Transformation Language本質是什么,是否可以很好的規定語言的語義?

    LOP的精華部分應該是這個Transformation Language,因為如果這個環節能夠很好的解決的話,可以說這個工作也就成功了一大半。因為對于定義一個新的語言,其結構特征和編輯器都不是關鍵問題,使用MOF應該可以定義出一個語言的結構部分。但是如何讓一個模型運行起來卻一直不能解決。雖然有可執行UML的提法,但是好像并沒有完全解決問題。

    可以說MDA是一個理想的解決方案,它可以定義建模語言,定義建模語言到主流編程語言的代碼生成,但是無法解決如何在建模語言中定義語義性。一旦可以在建模語言中定義運行語義,就可以徹底拋棄當前的編程語言,從而把編程徹底的變為“建模”。

    Transformation Language的想法是利用這個語言定義語言之間的轉換,將一個自定義的語言轉換為當前流行的編程語言,然后利用此編程語言進行運行。作者想盡力描繪出一個美好的畫面,但是在關鍵的部分還是語焉不詳。且不論定義一個新的語言需要多么廣闊的專業知識和創造力,僅僅定義兩種語言之間的映射,就是一項浩大的工程啊。“念天地之悠悠,獨愴然而淚下”。

    4.       最終討論,LOP是否能夠提升編程的抽象層次,最終提高程序員的生產力?LOP適用于哪些方面?

    從文中看來,LOP并不像MDA那樣著力于提高編程的抽象層次,它并不想用“建模”來替代“編程”。而是獨辟蹊徑,提供給程序員一個創造新語言的工具,對于每個專業領域,都能夠快速的開發出一個DSL,使用這個DSL可以大大提高這個領域的生產力。照此來看,LOP似乎又可以稱為“DSL Generator”。至于是否能夠總體上提升生產力,還是要看具體情況而定。無論如何,LOP走出了一條新路,對它的創造者,我表示深深的敬佩。

    另外,MPS可能會在下個月提供下載,試用之后,再做評論。

    主站蜘蛛池模板: 免费毛片在线视频| 成年私人影院免费视频网站| 亚洲一级Av无码毛片久久精品 | 亚洲影院在线观看| 成人国产精品免费视频| 亚洲一区二区精品视频| 国产成人无码精品久久久免费| 狠狠色婷婷狠狠狠亚洲综合| a一级爱做片免费| 久久国产亚洲精品麻豆| 98精品全国免费观看视频| 亚洲视频在线免费观看| 最近中文字幕免费完整| 亚洲看片无码在线视频| 影音先锋在线免费观看| 老司机午夜免费视频| 国产亚洲一区区二区在线| 在线人成免费视频69国产| 亚洲人成电影亚洲人成9999网| 99久9在线|免费| 亚洲熟妇无码av另类vr影视| 国产乱子伦精品免费无码专区| 免费观看又污又黄在线观看| 国产亚洲色婷婷久久99精品| 亚洲黄色免费电影| 亚洲国产美女精品久久久| 亚洲AV无码一区二三区| 国产99视频精品免费专区| 亚洲国产成人精品青青草原| 国产色爽免费视频| 日韩精品无码免费专区午夜| 亚洲国产日韩女人aaaaaa毛片在线| 最近2019中文免费字幕| igao激情在线视频免费| 久久精品国产亚洲AV嫖农村妇女| 毛片免费vip会员在线看| 2022国内精品免费福利视频| 亚洲国产高清在线精品一区 | 免费精品国产自产拍在线观看| 亚洲色偷偷偷鲁综合| 免费人妻精品一区二区三区|