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

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

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

    posts - 176, comments - 240, trackbacks - 0, articles - 7

    從編寫代碼到制造代碼

    Posted on 2009-02-15 18:21 canonical 閱讀(2092) 評論(2)  編輯  收藏 所屬分類: 設計理論

        軟件開發作為一種工程技術,它所研究的一個重點就是如何才能有效降低軟件產品的研發成本。在這一方向上,組件技術取得了空前的成功。它所提供的基本圖景是 像搭積木一樣從無到有的組裝出最終的產品。在某種意義上,這是對現代建筑工業的模仿和致敬。新材料,預制件,框架結構,這些建筑學的進展在軟件領域被一一 復制,建筑工地上的民工自然也成為了程序員們學習的楷模。畢竟,在組件的世界中碼代碼,基本上也是一種“搬磚”的行為。

        值得慶幸的是,軟件開發作為一種智力活動,它天生具有一種“去民工化”的傾向。信息產品有著與物質世界產品完全不同的抽象本質。在物理空間中,建造100 棟房屋,必須付出100倍的努力,老老實實的干上100遍。而在概念空間中建造100棟房屋,我們卻可以說其他房屋與第一棟一模一樣,加點平移旋轉變換即 可。一塊磚填了地基就不能用來蓋屋頂,而一段寫好的代碼卻可以在任何可用的場合無損耗的被使用。一棟建好的房屋發現水管漏水要大動干戈,而在完成的軟件中 補個局部bug卻是小菜一碟。在抽象的世界中有效的進行生產,所依賴的不應該是大干,苦干的堆砌,而應該是發現某種可用于推導的原理,基于這些原理,輸入 信息可以立刻轉換為最終的結果,而不需要一個逐步構造的過程。即我們有可能超越組裝性生產,實現某種類似于數學的原理性生產。http://canonical.javaeye.com/blog/325051

        代碼復用是目前軟件業中鼓吹降低生產成本的主要口號之一。但是在組件技術的指向下,一般所復用的只是用于構建的磚塊,而并不是某種構造原理。即使在所有信 息已經確定的情況下,我們仍然不可能從需求立刻得到可執行的產品。很多代碼即使我們在想象中已經歷歷在目,卻仍然需要一行行把它們謄寫下來。當我們發現系 統中已經沒有任何組件值得抽象的時候,仍然留下來眾多的工作需要機械化的執行。代碼復用的理想國距離我們仍然非常的遙遠。

        子例程(subroutine)是最早的代碼重用機制。這就像是將昨天已經完成的工作錄制下來,在需要的時候重新播放。函數(function)相對于子 例程更加強大。很多代碼看起來并不一樣,但是如果把其中的差異部分看作是變量,那么它們的結構就可以統一了。再加上一些判斷和循環,很多面目迥異的東西其 實是存在著大量共享信息的。面向對象技術是一次飛躍性的發展。眾多相關信息被打包到一個名稱(類型)中,復用的粒度和復雜度都大大提升。派生類從基類繼 承,可以通過重載實現對原有代碼的細致調整。不過,這種方式仍然無法滿足日益增長的復用需求。很多時候,一個名稱并不足以標定我們最終需要的代碼結構,在 實際使用的時候還需要補充更多的信息。類型參數化,即泛型技術,從事后的角度看其實是一種明顯的解決方案。根據參數動態的生成基類自然可以吸納更多的變 化。經歷了所謂Modern C++的發展之后,我們現在已經非常明確,泛型并非僅僅能夠實現類型共變,而是可以從類型參數中引入更豐富的結構信息,它的本質是一種代碼生成的過程。http://canonical.javaeye.com/blog/57244 認清了這一點,它的擴展就非常明顯了

       BaseClass<ArgClass> --> CodeGenerator<DSL>

    DSL(或者某種模型對象)相對于普通的類型(Class),信息密度要大很多,它可以提供更豐富也更完整的輸入信息。而CodeGenerator也不必拘泥于基礎語言本身提供的各種編譯機制,而是可以靈活應用各種文本生成技術。http://canonical.javaeye.com/blog/309395 CodeGenerator在這里所提供的正是根據輸入模型推導出完整實現代碼的構造原理。

        現在很多人熱衷于開發自己的簡易代碼生成工具,這些工具也許可以在簡單的情形下減輕一些體力工作,但是生成的代碼一般不能直接滿足需求,仍然需要手工執行 大量的刪改工作。當代碼生成之后,它成為一種固化的物質產品,不再能夠隨著代碼生成工具的改進而同步改進,在長期的系統演化過程中,這些工具并不一定能夠 減少累積的工作量。

       修正過程  ==> CodeGenerator<DSL>

    為了改進以上代碼生產過程,一些人試圖在CodeGenerator中引入越來越多的可配置性,將各種變化的可能內置在構造原理中。顯然這會造成CodeGenerator的不正常的腫脹。當更多的偶然性被包含在原理中的時候,必然會破壞原理的簡單性和普適性。

       輸入信息 + 一段用于推導的原理 + 修正補充 = 真實模型

    必須存在[修正補充]這一項才能維持以上方程的持久平衡。

        為了擺脫人工修正過程,將模型調整納入到概念世界中,我們需要超越繼承機制的,更加強大的,新的技術手段。其實在當前的技術背景下,這一技術已經是呼之欲出了。這就是AOP, Aspect Oriented Programming。http://canonical.javaeye.com/blog/34941

          Biz ==[AOP extends]==> CodeGenerator<DSL>

    繼承僅僅能夠實現同名方法之間的簡單覆蓋,而AOP所代表的技術原理卻是在代碼結構空間中進行任意復雜的刪改操作,它潛在的能力等價于人工調整。

        為了實現上述生產模式,需要對編程語言,組件模型,框架設計等方面進行一系列改造。目前通用的AOP實現和元編程技術其實并不足以支持以上模式。http://canonical.javaeye.com/blog/275015
        這一生產模式將會如何演化,也是一個有趣的問題。按照級列理論,我們立刻可以得到如下發展方向:

        Context0 + DSL1 + EXT0 = DSL0  
        Context1 
    + DSL2 + EXT1 = DSL1 
       

     http://canonical.javaeye.com/blog/33824

    Witrix平臺中BizFlow可以看作是對DaoWebAction的修正模型,但是它本身具有完整的意義,可以直觀的被理解。在BizFlow的基礎上可以逐步建立SeqFlow,StateFlow等模型。http://canonical.javaeye.com/blog/126467

          現在有些人試圖深挖函數式語言,利用模式匹配之類的概念,做符號空間的全局優化。但是我們需要認識到通用的機制是很少的,能夠在通用語言背景下被明確提出 的問題更是很少的。只有在特定領域中,在掌握更多局部信息的情況下,我們才能提出豐富的問題,并作出一定背景下的解答。DSL的世界中待做的和可做的工作 很多。http://canonical.javaeye.com/blog/147065

          對于程序員而言,未來將變得越來越豐富而復雜,它將持續拷問我們的洞察力。我們不是一行行的編寫代碼,把需求一條條的翻譯到某種實現上,而是不斷發明局部的生產原理,依靠自己制定的規則在抽象的空間中不斷的創造新的表象。

    Feedback

    # re: 從編寫代碼到制造代碼  回復  更多評論   

    2009-02-16 11:51 by 董銳
    都是作者自己寫的嗎?好厲害啊!

    # re: 從編寫代碼到制造代碼  回復  更多評論   

    2009-03-09 21:58 by CoderDream
    一堆javaeye的鏈接,博主很不厚道啊!
    主站蜘蛛池模板: 1000部无遮挡拍拍拍免费视频观看| 一边摸一边爽一边叫床免费视频| 国产免费无码一区二区| 亚洲av无码不卡私人影院| 日本亚洲高清乱码中文在线观看| 美女黄网站人色视频免费国产| 亚洲AV无码AV男人的天堂不卡| 全免费a级毛片免费看不卡| 337P日本欧洲亚洲大胆艺术图 | 国产精品亚洲mnbav网站| 免费播放国产性色生活片| 亚洲色婷婷综合开心网| 中国一级全黄的免费观看| 亚洲av鲁丝一区二区三区| 国产成人精品免费视频网页大全| 亚洲AV无码乱码麻豆精品国产| 成人五级毛片免费播放| 免费看美女午夜大片| 亚洲成AV人片在线观看WWW| 亚洲免费中文字幕| 亚洲AⅤ男人的天堂在线观看| 亚洲人成人网站在线观看| 日本免费中文字幕| 亚洲AV日韩综合一区尤物| 免费人成年激情视频在线观看| 亚洲黄片手机免费观看| 久久久久亚洲AV无码观看| 永久免费看bbb| 国产精品福利在线观看免费不卡 | 亚洲人成黄网在线观看| 免费理论片51人人看电影| h片在线观看免费| 亚洲成人免费电影| 亚洲国产精品自在拍在线播放| 四虎影视成人永久免费观看视频 | 91精品国产免费久久国语蜜臀 | 国产成人精品日本亚洲直接| www.亚洲色图| 亚洲一区二区在线免费观看| 亚洲AV无码AV吞精久久| 亚洲国产精品久久|