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

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

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

    冒號(hào)和他的學(xué)生們(連載10)——超級(jí)范式

    冒號(hào)和他的學(xué)生們

    ——程序員提高班紀(jì)事

    1. 超級(jí)范式

    智能繁衍:機(jī)器人生產(chǎn)機(jī)器人                                             ——題記


    引號(hào)忽然想起一事,問道:“有一本名為《C++模版元編程》的書,既然提到了模板,想來也屬于泛型編程吧?”

    冒號(hào)答道:“模板元編程Template Metaprogramming,與GP密切相關(guān)但自成一派,隸屬于另一種編程范式——元編程Metaprogramming),簡(jiǎn)稱MP。這里的前綴‘meta-’常譯作‘元’,其實(shí)就是‘超級(jí)’、‘行而上’的意思。比如,元數(shù)據(jù)Metadata)是關(guān)于數(shù)據(jù)的數(shù)據(jù),元對(duì)象Metaobject)是關(guān)于對(duì)象的對(duì)象,依此類推,元編程自然是關(guān)于程序的程序,或者說是編寫、操縱程序的程序。”

    嘆號(hào)皺著眉:“聽著有點(diǎn)繞。”

    冒號(hào)投影出另一段代碼——

    C++(元編程):

    template <int N>

    struct factorial

    {

         enum { value = N * factorial<N - 1>::value };

    };

    template <>            // 特化specialization

    struct factorial<0>    // 遞歸中止

    {

         enum { value = 1 };

    };

    void main()

    {

        cout << factorial<5>::value << endl; // 等價(jià)于cout << 120 << endl;

    }

    “以上用模板元編程實(shí)現(xiàn)了階乘運(yùn)算。”冒號(hào)講解道,“與前面三種基本范式的階乘實(shí)現(xiàn)有著根本的不同:這里階乘的值是在編譯時(shí)而非運(yùn)行時(shí)計(jì)算出來的。換句話說,這段代碼以模板形式通過編譯器生成了新的代碼,并在編譯期間獲得執(zhí)行。”

    嘆號(hào)不解:“這又說明什么呢?”

    冒號(hào)并不直接回答:“假設(shè)你需要批量處理用戶文檔,其格式結(jié)構(gòu)預(yù)先給定,但既不像CSV(逗號(hào)分隔)那么簡(jiǎn)單,也不像XML那么標(biāo)準(zhǔn),并且用戶隨時(shí)可能改變格式標(biāo)準(zhǔn),請(qǐng)問如何設(shè)計(jì)這段程序?”

    嘆號(hào)略一思索,便回答:“三大模塊:閱讀器讀出輸入文檔,解析器按照格式標(biāo)準(zhǔn)去解析,處理器對(duì)解析結(jié)果進(jìn)行處理。”

    “顯然關(guān)鍵在解析器,如果你是從頭做起,那么問題至少有四。”冒號(hào)扳著指頭數(shù):“第一、費(fèi)時(shí)寫解析器代碼;第二、費(fèi)時(shí)調(diào)試解析器代碼;第三、如果用戶更改格式標(biāo)準(zhǔn),你得重復(fù)做上兩件事;第四、如果這段程序是大型程序的一部分,任何改動(dòng)都可能意味著軟件的重新編譯、連接、測(cè)試、打包、部署等等。如果因?yàn)槟愕木壒使静坏貌活l頻發(fā)布補(bǔ)丁包的話,你的飯碗恐怕是朝不保夕了。”

    還是句號(hào)機(jī)靈:“既然談到了元編程,一定是利用元編程,根據(jù)不同的格式標(biāo)準(zhǔn)自動(dòng)生成相應(yīng)的解析器代碼。不過——此法雖一勞永逸,但難度似乎不小啊。”

    “思路對(duì)頭!”冒號(hào)贊許道,“大家聽說過LexYacc嗎?它們能根據(jù)格式標(biāo)準(zhǔn)生成相應(yīng)的解析器代碼。更妙的是,格式標(biāo)準(zhǔn)不限于靜態(tài)數(shù)據(jù),甚至可以含有動(dòng)態(tài)指令!這意味著用戶不僅能定義業(yè)務(wù)數(shù)據(jù)格式,還能定義業(yè)務(wù)流程乃至領(lǐng)域特定語(yǔ)言DSL(Domain Specific Language),而這其實(shí)涉及到另一種編程范式:語(yǔ)言導(dǎo)向式編程Language-Oriented Programming)。如果在此基礎(chǔ)上再用圖形界面包裝一下,那么你的客戶會(huì)欣喜地發(fā)現(xiàn),他們的經(jīng)理只要點(diǎn)點(diǎn)鼠標(biāo)就可以改變整個(gè)業(yè)務(wù)流程了,而這一切不僅不需要軟件開發(fā)方的參與,連本公司的技術(shù)人員也免了。這時(shí)候倒是你的老板發(fā)愁了:你的設(shè)計(jì)太過完美,客戶的后續(xù)開發(fā)費(fèi)怕是賺不到了。”

    眾人一樂。

    冒號(hào)續(xù)道:“如果知道LexYacc本來就是編寫編譯器和解釋器的工具,你就不會(huì)驚訝于它們的強(qiáng)大了。順帶說一句,編譯器本身就是元編程的典型范例——把高級(jí)語(yǔ)言轉(zhuǎn)化為匯編語(yǔ)言或機(jī)器語(yǔ)言的程序,不就是能寫程序的程序嗎?其實(shí)元編程的例子比比皆是:許多IDEVisual StudioDelphi、Eclipse等均能通過向?qū)?、拖放控件等方式自?dòng)生成代碼;UML建模工具將類圖轉(zhuǎn)換為代碼;Servlet引擎將JSP轉(zhuǎn)換為Java代碼等等。”

    逗號(hào)恍然大悟:“原來元編程就是編寫能自動(dòng)生成源代碼的程序。”

    “也不盡然。”冒號(hào)修正道,“自動(dòng)生成源代碼的編程也屬于另一種編程范式——生成式編程Generative Programming)的范疇。有的元編程雖不生成源代碼,卻能修改程序。從低級(jí)的匯編語(yǔ)言到一些高級(jí)的動(dòng)態(tài)語(yǔ)言如Perl、Python、Ruby、JavaScriptLisp、Prolog等均支持此類功能。”

    問號(hào)問道:“編寫病毒算不算元編程?”

    “編寫一個(gè)只是刪除或感染文件的病毒,不必用到元編程。”冒號(hào)應(yīng)道,“但如果要求此病毒能自我變異,那就需要元編程了。”

    引號(hào)自言自語(yǔ):“程序的程序,就是程序的平方。”

    “也可以是程序的立方,四次方……理論上是無限次方。元程序?qū)⒊绦蜃鳛閿?shù)據(jù)來對(duì)待,能自我發(fā)現(xiàn)和自我賦權(quán),有著其他程序所不具備的自覺性、自適應(yīng)性智能性,可以說是一種最高級(jí)的程序。它要求編程者超越常規(guī)的編程思維,在一種嶄新的高度上理解編程。想象一下,”冒號(hào)激情勃發(fā),“如果有一天機(jī)器人能自我學(xué)習(xí)、自我完善,甚至能生產(chǎn)機(jī)器人,實(shí)現(xiàn)‘智能繁衍’,是不是很美妙?”

    “我怎么覺得特恐怖呢?”嘆號(hào)此言令人忍俊不禁。

    posted on 2008-05-10 00:02 鄭暉 閱讀(2031) 評(píng)論(3)  編輯  收藏 所屬分類: 冒號(hào)和他的學(xué)生們

    評(píng)論

    # re: 冒號(hào)和他的學(xué)生們(連載10)——超級(jí)范式 2008-05-10 00:29 Lone_wolf

    “如果有一天機(jī)器人能自我學(xué)習(xí)、自我完善,甚至能生產(chǎn)機(jī)器人,實(shí)現(xiàn)‘智能繁衍’,是不是很美妙?”
    可能到時(shí)候不是"美妙"了,是嘆號(hào)說的"恐怖"了..  回復(fù)  更多評(píng)論   

    # re: 冒號(hào)和他的學(xué)生們(連載10)——超級(jí)范式 2008-08-05 14:54 Odin

    那肯定是跟《機(jī)械公敵》一樣了  回復(fù)  更多評(píng)論   

    # re: 冒號(hào)和他的學(xué)生們(連載10)——超級(jí)范式 2008-09-11 14:48 卡拉揚(yáng)

    醍醐灌頂??!  回復(fù)  更多評(píng)論   

    導(dǎo)航

    統(tǒng)計(jì)

    公告

    博客搬家:http://blog.zhenghui.org
    《冒號(hào)課堂》一書于2009年10月上市,詳情請(qǐng)見
    冒號(hào)課堂

    留言簿(17)

    隨筆分類(61)

    隨筆檔案(61)

    文章分類(1)

    文章檔案(1)

    最新隨筆

    積分與排名

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲精品mv在线观看| 国产日产亚洲系列最新| 牛牛在线精品免费视频观看| 综合亚洲伊人午夜网| 国产精彩免费视频| 91亚洲国产成人精品下载| 日本免费一区二区久久人人澡| 亚洲卡一卡2卡三卡4麻豆| 免费下载成人电影| 免费一级毛suv好看的国产网站| 免费一级做a爰片久久毛片潮喷| 日本亚洲欧美色视频在线播放| 国产亚洲?V无码?V男人的天堂| 国产精品免费福利久久| 亚洲av成本人无码网站| 亚洲一区二区三区四区在线观看| 永久黄网站色视频免费观看| 国产综合激情在线亚洲第一页| 国产一区二区三区免费看| 午夜亚洲乱码伦小说区69堂| 亚洲国语精品自产拍在线观看 | 精品福利一区二区三区免费视频| 亚洲视频日韩视频| 亚洲免费一级视频| 日韩毛片免费一二三| 国产精品久久亚洲不卡动漫| 在线观看免费大黄网站| 久久精品电影免费动漫| 一级中文字幕免费乱码专区 | 精品亚洲A∨无码一区二区三区| 国产伦精品一区二区三区免费迷| 色www免费视频| 无码欧精品亚洲日韩一区夜夜嗨| 亚欧在线精品免费观看一区| aa级毛片毛片免费观看久| 亚洲精品又粗又大又爽A片| 亚洲av再在线观看| 毛片免费视频播放| 91香蕉国产线观看免费全集| 日本三级在线观看免费| 亚洲综合久久1区2区3区|