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

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

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

    buaawhl

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      3 隨筆 :: 5 文章 :: 2 評論 :: 0 Trackbacks

    腳本的未來

    1. 編程模型的比較

    下面是一些關于多態、靈活性的簡單例子。假設我們有如下類型定義。

     

    class Dog {

        run();

    };

     

    class Car {

        run();

    };

     

    class Chair{

       stand();

    };

     

    dog, car, chair 分別是這些類型的實例 instance.

    我們有個公用函數。

     

    makeItRun( param){

        param.run();

    }

     

    分別調用這些實例的Run方法

    A. 解釋腳本,如JavaScript, Python, Ruby, FP

     

    makeItRun( dog); // OK

    makeItRun( car); // Ok

    makeItRun( chair); // Runtime Error

     

    特點:  根據符號、名字進行綁定, 運行期松耦合. 相當于語法直接支持Reflection。

    B. 虛擬機編譯語言,如 Java, C#

     

    makeItRun(param){

        param.run();

    }

     

    makeItRun( dog); // Compilation Error

    makeItRun( car); // Compilation Error

    makeItRun( chair); // Compilation Error

     

    我們必須 Dog Car 實現相同的接口比如Runnable.

     

    interface Runnable{

        run();

    }

     

    并且這么定義

    makeItRun(Runnable param){

        param.run();

    }

     

    這樣.

     

    makeItRun( dog); // Ok

    makeItRun( car); // Ok

    makeItRun( chair); // Compilation Error

     

    特點: 根據類型契約綁定. 編譯期類型檢查

     

    C. Reflection API

    我們可以使用 Reflection API 達到類似于解釋腳本的效果.

     

    makeItRun(Object param){

        methodInvoke(param, “run”);

    }

     

    makeItRun( dog); // Ok

    makeItRun( car); // Ok

    makeItRun( chair); // Runtime Error

     

    特點: 語法本身不支持名稱符號綁定,需要使用Reflection API, 這些APIClass 結構元數據支持.

     

     

    D. C++ Template

    <class T>

    makeItRun(T param){

        param.run();

    }

     

    makeItRun( dog); // Ok

    makeItRun( car); // Ok

    makeItRun( chair); // Compilation  Error

     

    特點: 編譯期名稱、符號綁定. Very cool.

    注意: Java范型不支持這種方式。Java范型進行編譯期類型檢查。也是類型綁定的。C++ Template并不是真正的范型編程,只是一種代碼生成機制。

    總結:

    運行期名稱符號綁定,并不適合大規模復雜系統開發,因為沒有編譯期類型檢查,不支持Java Interface那樣的契約編程。

    至于Ruby on Rails, 很像一個簡單的代碼生成器.

     

    對于大型系統,比起運行期名字綁定,C++ Template 的編譯期綁定也許更適合,至少有編譯期檢查。

     

    解釋腳本最適合哪些領域?

    解釋腳本是運行期名稱綁定,松耦合。

    什么系統需要這樣的特性?

    對了.  SOA, Web Services, such buzzwords – 定位服務名稱,調用注冊的對象方法.

     

    2. 腳本的可能未來

    (1) 服務器段流程控制

    JavaScript, Ruby, Python, FP 支持Continuation. 有時用作狀態機流程控制。

    Continuation 甚至比狀態機. 可以跳到運行棧的任何一層。 (類似于Exception Throw/Handling).

     

    個人觀點,并不欣賞這種使用方法。因為web-based services應該設計為盡量無狀態的。狀態應該盡量保持在客戶端,比如AJAX/Flex. 有人說,如果有人刷新了URL,客戶端保存的所有的中間狀態都會丟失,最好服務器段記錄所有的中間狀態,這樣用戶下次可以回到上次的斷點。對于 long-session 的應用,這是對的. 但是對于long-session 的應用來說,為了均衡負載,系統更應該被設計為無狀態的。所以,使用腳本的Continuation特性,仍然沒有太大的意義。

     

    (2) Web Service 客戶端

    AJAX/Flex 也可以看作Web Service 客戶端.

     

    腳本調用Web Service,我欣賞這種用法。用腳本表達Web服務調用非常方便清楚,不需要Reflection API Code 生成。

     

    (3) Mobile Code 客戶端遷移到 服務端

    假設我們有如下的Web Service客戶端腳本,

    If(service.do() == ok) {

         nextService.do();

         nextService2.do();

    }else{

         backService.do();

         backService2.do();

    }

     

    這通常意味著要訪問三次Web Service Server. 每一次需要組裝一次SOAP 或者XML-RPC 消息.

    把整個Script一次發送過去如何?

    服務器解釋整個腳本,一次執行所有的服務請求,一次返回最終結果。

    這涉及到安全問題。幸好腳本比機器碼或者VM指令更容易管理和控制,解決這個問題應該不難。

     

    (4) DSL, LOP ?

    Domain Specific Languages Business Rule, Workflow Definition 要求用戶友好,更加像英語,而不是編程語言。

    普通用戶喜歡 關鍵字,而不是 API。

     

    If a greater-than b then do …   // keywords way

    If(greater(a, b)) { … // API way

     

    腳本是更高級的語言,通常比編譯語言更加友好。一些腳本( Lisp, Scheme, etc)可以定義更多的關鍵字

     

    posted on 2005-11-19 14:05 buaawhl 閱讀(131) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 免费观看激色视频网站(性色)| 精品一区二区三区免费毛片| 亚洲国产精品无码AAA片| 国产亚洲成av人片在线观看| 亚洲国产综合第一精品小说| 亚洲中文字幕无码久久2020 | 亚洲理论精品午夜电影| 亚洲AV第一成肉网| 大地资源在线资源免费观看| 永久在线免费观看| 亚洲福利在线播放| 久久精品国产亚洲AV麻豆不卡| 亚洲AV电影天堂男人的天堂| 天堂亚洲免费视频| 亚洲白色白色在线播放| 人禽杂交18禁网站免费| 中文字幕亚洲专区| 亚洲日韩国产欧美一区二区三区 | 国产精品视频免费一区二区三区| 亚洲日韩精品无码专区网站| 中文字幕亚洲精品无码| 日本免费久久久久久久网站| 成人au免费视频影院| 午夜亚洲www湿好大| 特级aaaaaaaaa毛片免费视频| 久久久久久精品免费看SSS| 亚洲色欲色欲www| 51精品视频免费国产专区| 亚洲va久久久久| 中文字幕日韩亚洲| 国产免费丝袜调教视频| 亚洲国产成人精品不卡青青草原| 一本久久免费视频| 国产在线ts人妖免费视频| 中国人免费观看高清在线观看二区 | 国产国产人免费人成免费视频| 国产精品免费视频观看拍拍| 国产zzjjzzjj视频全免费| 亚洲中文字幕一二三四区| 亚洲中文字幕久久精品无码喷水| 久久一区二区三区免费|