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

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

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

    冒號(hào)和他的學(xué)生們(連載21)——后臺(tái)腳本

     

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

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

     

    21.后臺(tái)腳本

    操千曲而后曉聲,觀千劍而后識(shí)器                          ——《文心雕龍•知音》

     

    “剩下四種動(dòng)態(tài)語(yǔ)言,我們將之歸為后臺(tái)腳本語(yǔ)言。”冒號(hào)說(shuō)著畫(huà)了張圖表——

    用戶(hù)

    前臺(tái)語(yǔ)言Visual BasicDelphiJavaScript

    平臺(tái)語(yǔ)言JavaC#

    后臺(tái)腳本語(yǔ)言PerlPHPPythonRuby

    系統(tǒng)語(yǔ)言CC++D

    機(jī)器


    引號(hào)聽(tīng)得仔細(xì):“我記得您開(kāi)始是把這些語(yǔ)言劃分為C族靜態(tài)語(yǔ)言、非C族靜態(tài)語(yǔ)言和動(dòng)態(tài)語(yǔ)言三類(lèi)的。”

    冒號(hào)解釋?zhuān)?#8220;那是按語(yǔ)法來(lái)劃分的,偏重理論;現(xiàn)在是按應(yīng)用來(lái)劃分,偏重實(shí)踐。”

    句號(hào)旋即聯(lián)想到:“這種分法貌似三層架構(gòu)——前臺(tái)語(yǔ)言對(duì)應(yīng)表現(xiàn)層;平臺(tái)語(yǔ)言和后臺(tái)腳本語(yǔ)言對(duì)應(yīng)業(yè)務(wù)邏輯層;系統(tǒng)語(yǔ)言對(duì)應(yīng)數(shù)據(jù)層。”

    “的確有些神似,但千萬(wàn)不可混淆。”冒號(hào)提醒道,“三層架構(gòu)(three-tier architecture)是模塊設(shè)計(jì)上的邏輯劃分;而這里是按語(yǔ)言應(yīng)用范圍進(jìn)行的物理劃分——與用戶(hù)交互的是前臺(tái)語(yǔ)言,與機(jī)器交互的是系統(tǒng)語(yǔ)言,介于其中的為前臺(tái)提供服務(wù)同時(shí)又需要底層系統(tǒng)服務(wù)的是后臺(tái)語(yǔ)言。”

    逗號(hào)詢(xún)問(wèn):“后臺(tái)語(yǔ)言又細(xì)分成平臺(tái)語(yǔ)言與后臺(tái)腳本語(yǔ)言?”

    “這是基于程序(program)與腳本(script)、靜態(tài)與動(dòng)態(tài)而分的。”冒號(hào)進(jìn)行說(shuō)明,“其實(shí)PerlPHPPythonRuby都有自己的虛擬機(jī)(Virtual Machine),從這種意義上說(shuō)它們也可作為平臺(tái)語(yǔ)言。但在實(shí)際應(yīng)用中,它們沒(méi)有Java平臺(tái)和.NET平臺(tái)那種凝聚力和核心作用,通常作為輕量級(jí)的解決方案。”

    問(wèn)號(hào)想探個(gè)究竟:“這是由于它們都是動(dòng)態(tài)語(yǔ)言的緣故嗎?”

    冒號(hào)回答:“理論上動(dòng)態(tài)語(yǔ)言同樣能承擔(dān)大型應(yīng)用,但實(shí)踐上它們多作為粘合語(yǔ)言或用于中小型應(yīng)用。用句時(shí)髦的話(huà)來(lái)形容,暫時(shí)還是主流的配角非主流的主角。畢竟在效率、類(lèi)型安全、可用資源、開(kāi)發(fā)工具、技術(shù)支持等方面,它們與JavaC#相比尚有一定差距。另外它們同屬‘草根’語(yǔ)言,雖有開(kāi)源社區(qū)的大力支持,在影響力上與后者未可同日而語(yǔ)。”

    嘆號(hào)揣測(cè):“說(shuō)不定在不久的將來(lái),動(dòng)態(tài)語(yǔ)言也會(huì)成為主流的主角。”

    “世易時(shí)移,殊難逆料。但有一點(diǎn)可以肯定,語(yǔ)言的發(fā)展趨勢(shì)一定是動(dòng)靜結(jié)合、剛?cè)岵?jì)。”冒號(hào)斷言,“一方面以JavaC#為代表的靜態(tài)語(yǔ)言中嫁接了動(dòng)態(tài)語(yǔ)言的枝條;另一方面以Java.NET為代表的平臺(tái)與動(dòng)態(tài)語(yǔ)言的交壤地帶也在逐步擴(kuò)大。比如JRuby允許RubyJava之間互相調(diào)用,類(lèi)似的還有JythonIronRubyIronPython等等。此外值得一提的是,動(dòng)態(tài)語(yǔ)言最活躍的舞臺(tái)當(dāng)數(shù)LAMPL-A-M-P。”

    引號(hào)接茬:“LLinuxAApacheMMySQLPPHP。”

    冒號(hào)補(bǔ)充道:“P也可指PerlPython,甚至Ruby。”

    句號(hào)調(diào)侃:“可惜Ruby的‘R’比‘P’多了一根尾巴。”

    “有人為了自圓其說(shuō),干脆讓P表示‘Programming language’,這下所有語(yǔ)言都囊括其中了。老外就喜歡玩這種首字母縮略(acronym)的文字游戲。”冒號(hào)語(yǔ)帶調(diào)笑,“前面我們?cè)峒埃W(wǎng)絡(luò)應(yīng)用是生長(zhǎng)動(dòng)態(tài)語(yǔ)言最肥沃的土壤,而LAMP就是這塊土壤上搭建的平臺(tái)。作為開(kāi)源網(wǎng)絡(luò)平臺(tái),LAMP以其開(kāi)放靈活、開(kāi)發(fā)迅速、成本低廉等特色而與Java平臺(tái)和.NET平臺(tái)鼎足三分,尤其受中小企業(yè)的歡迎。LAMPLinux是操作系統(tǒng),ApacheWeb服務(wù)器,MySQL是數(shù)據(jù)庫(kù)系統(tǒng),而我們當(dāng)下最關(guān)心的是‘P族語(yǔ)言’:PHPPerlPython還有Ruby。”

    問(wèn)號(hào)建議:“作為動(dòng)態(tài)語(yǔ)言,它們的共性上節(jié)課已經(jīng)談了不少,能說(shuō)說(shuō)它們的個(gè)性嗎?”

    “它們的個(gè)性極為鮮明:Perl凝練晦澀,Python優(yōu)雅明晰,Ruby精巧靈動(dòng),PHP簡(jiǎn)明單純。先看老大哥Perl,它博采眾家之長(zhǎng),綜合了C語(yǔ)言的結(jié)構(gòu)、sed的正則表達(dá)式、AWK的關(guān)聯(lián)數(shù)組(associative array)Lisp的表(list)和Unix Shell的命令,此外還有借鑒了一種語(yǔ)言,你們知道是哪種嗎?”冒號(hào)忽然賣(mài)了個(gè)關(guān)子。

    逗號(hào)猜想:“應(yīng)該是某種OOP語(yǔ)言吧。”

    Perl中確有不少C++的影子,但它的對(duì)象模型在5.0以后才引入,典型的半路出家,遠(yuǎn)不如前面的特征那么自然。與其說(shuō)是一種自然而然的發(fā)展,不如說(shuō)是在OOP潮流裹挾下的一種身不由己的迎合。真正深入骨髓的借鑒是自然語(yǔ)言。”冒號(hào)給出了答案,“Perl的發(fā)明者Wall是一名語(yǔ)言學(xué)家,他認(rèn)為程序語(yǔ)言應(yīng)該與自然語(yǔ)言一樣,簡(jiǎn)潔自然、易讀易寫(xiě)、表達(dá)多樣、不拘一格。Perl還有不少的格言或哲學(xué),使得編程語(yǔ)言一改嚴(yán)謹(jǐn)刻板的面孔,散發(fā)出濃郁的人文氣息。”

    嘆號(hào)幽了一默:“我見(jiàn)過(guò)Perl的代碼,人文氣息沒(méi)聞出來(lái),但我懷疑有乙醚氣息——看一會(huì)就覺(jué)得暈暈乎乎的。”

    眾人大笑。

    “有人僅用一行Perl代碼就實(shí)現(xiàn)了RSA算法,你看了那還不得當(dāng)場(chǎng)暈倒啊?”冒號(hào)打趣道,“Perl的各種魔符好似一把把鋒利的剪刀,做起文本裁剪之類(lèi)的工作來(lái)游刃有余。這是它最大的長(zhǎng)處,當(dāng)初Perl就是Wall用來(lái)做Unix系統(tǒng)管理的,以后在CGI上的廣泛應(yīng)用也得益于此。但它既精練又復(fù)雜,影響了可讀性、一致性、整潔性和可維護(hù)性。不熟悉該語(yǔ)言的固然如讀天書(shū),熟悉語(yǔ)言而不熟悉問(wèn)題的也頗費(fèi)思量。相比之下Python被認(rèn)為是Perl有力的挑戰(zhàn)者,不僅在于它天然的OO設(shè)計(jì),更重要的是它對(duì)程序員友好度大大超過(guò)PerlPython也有一系列的被稱(chēng)為禪(Zen)的哲學(xué),不少與Perl是針?shù)h相對(duì)的。比如:Perl認(rèn)為做一件事可以有多種方法,而Python認(rèn)為一件事應(yīng)該最好只有一種方法;Perl追求語(yǔ)言的表現(xiàn)力,Python追求簡(jiǎn)單優(yōu)雅;Perl喜歡隱性暗示,Python強(qiáng)調(diào)顯性明示;Perl強(qiáng)調(diào)緊湊,Python強(qiáng)調(diào)松散; Perl的語(yǔ)法和語(yǔ)義豐富,Python的語(yǔ)法和語(yǔ)義簡(jiǎn)單而類(lèi)庫(kù)豐富。或許Python最讓人不習(xí)慣的是它對(duì)空白符敏感性。”

    引號(hào)感到驚奇:“對(duì)空白符敏感?這個(gè)倒真怪異。”

    冒號(hào)見(jiàn)慣不怪:“雖然有點(diǎn)違反習(xí)慣,但非常符合Python一貫的規(guī)范簡(jiǎn)潔的風(fēng)格——一方面從語(yǔ)法上保證了良好的編碼風(fēng)格;另一方面,每個(gè)代碼塊不再需要起始的大括號(hào)或begin/end之類(lèi)的,減少了的代碼行數(shù)。此外許多人抱怨Python中的自引用self太多,殊不知這也是它倡導(dǎo)顯式表達(dá)的一種體現(xiàn)。”

    嘆號(hào)好奇地問(wèn):“Ruby怎么樣?據(jù)說(shuō)它將取代Java。”

    “不要輕言‘取代’二字。”冒號(hào)規(guī)誡道,“Java沒(méi)有取代C++,也不會(huì)被Ruby取代,至多只是一種再分配。不過(guò)Ruby的確是門(mén)很可愛(ài)的語(yǔ)言,兼具Perl的表現(xiàn)力和Python的可讀性。Ruby背后最具特色的理念是:關(guān)注程序員使用語(yǔ)言時(shí)的感受超過(guò)語(yǔ)言本身的功能。通俗地說(shuō),兵器的稱(chēng)手比鋒利更重要;文雅地說(shuō),應(yīng)給予程序員更多的人文關(guān)懷。就拿代碼塊(block)和迭代器(iterator)來(lái)說(shuō),雖然均非Ruby首創(chuàng),但其語(yǔ)法最為賞心悅目。類(lèi)似的例子比比皆是。然而真正讓Ruby變得炙手可熱的是web應(yīng)用框架 Ruby on RailsRoR)的成功,它們還催生了Java平臺(tái)上的Groovy語(yǔ)言和Groovy on Grails框架。RoR奉行的CoC Convention over Configuration)和DRY Don't repeat yourself )原則以及MVC架構(gòu)看似了無(wú)新意,但與Ruby結(jié)合之后,便如一只猱身而上靈貓,立刻襯托出Java.NET大象般的身影。”

    逗號(hào)有些懷疑:“框架竟然捧紅了語(yǔ)言,框架真有這么重要嗎?”

    “如果Web應(yīng)用中動(dòng)態(tài)頁(yè)面較少或業(yè)務(wù)邏輯不復(fù)雜,框架的價(jià)值并不大。以前CGI編程就是往Perl之類(lèi)的代碼中嵌入HTML代碼,如同Java中的ServletPHP則單純地在HTML代碼中插入PHP代碼,如同早期的JSP。沒(méi)有MVC,也不管什么三層架構(gòu),更沒(méi)有ORM。但是——”冒號(hào)拖了個(gè)轉(zhuǎn)折音,“一旦業(yè)務(wù)邏輯變得復(fù)雜,開(kāi)發(fā)人員增多,手工作坊式編程開(kāi)始捉襟見(jiàn)肘,引入框架這個(gè)流水生產(chǎn)線來(lái)提高生產(chǎn)力便是大勢(shì)所趨。”

    句號(hào)不解:“我想PerlPythonPHP一定也有不少框架,Java中的框架更是泛濫成災(zāi),何以獨(dú)獨(dú)RoR脫穎而出?”

    冒號(hào)作出分析:“各種web應(yīng)用框架是不少,但在RoR之前輕量級(jí)套餐式解決方案并不多。Perl中的CatalystPython中的Pylon還有PHP中的CakePHP等都是效仿之作。此外,PerlPHP由于過(guò)于流行,反而有不少的歷史包袱,人們習(xí)慣了將表示邏輯和業(yè)務(wù)邏輯編織在一起。至于Java企業(yè)解決方案,框架太多,搭配組合更多,增加了選擇的難度。即使采用最常見(jiàn)的Struts+Spring+Hibernate組合,維護(hù)起來(lái)也比RoR繁雜得多。”

    嘆號(hào)愈發(fā)擔(dān)憂(yōu):“聽(tīng)這意思,Java還是危險(xiǎn)啊!”

    “言之過(guò)早。”冒號(hào)不以為然,“首先RoR還有待進(jìn)一步檢驗(yàn),目前無(wú)論是應(yīng)用廣度還是深度上尚無(wú)法與Java相提并論;其次Java在性能、安全等方面還是有不少優(yōu)勢(shì),而這些對(duì)于大型和關(guān)鍵性的應(yīng)用來(lái)說(shuō)尤為重要。即使在中小型web應(yīng)用中,RoR較之PHP還遠(yuǎn)為不及。”

    問(wèn)號(hào)接下話(huà)題:“PHP為何如此流行?”

    “因?yàn)樗?jiǎn)單、專(zhuān)一。”冒號(hào)答得很干脆,“與PythonRuby一開(kāi)始就定位通用語(yǔ)言不同,PHP是專(zhuān)為網(wǎng)絡(luò)而生的。同早期的Perl相似,PHP起初主要起文本過(guò)濾器的作用,只不過(guò)Perl多處理文件流(file stream),而PHP多處理套接字流(socket stream)。PHP的語(yǔ)法簡(jiǎn)單,且為網(wǎng)絡(luò)應(yīng)用度身定造,受到網(wǎng)絡(luò)開(kāi)發(fā)人員的追捧當(dāng)在情理之中。但它實(shí)用而不完美,比如:變量名大小寫(xiě)敏感而函數(shù)名大小寫(xiě)不敏感;函數(shù)命名規(guī)則不一致;不支持namespaceunicode;與Perl一樣,它的對(duì)象模型不是先天的,直到PHP 5才真正完善;對(duì)線程支持不足;相比PerlPythonRuby,它的功能稍顯單薄等等。”

    引號(hào)突然想起:“我記得您在第一堂課提到PHP還能用于桌面應(yīng)用。”

    “不僅PHPPerlPython還有Ruby,都能作為前臺(tái)語(yǔ)言來(lái)開(kāi)發(fā)命令行或圖形界面的應(yīng)用。同樣地,VBDelphiJavaScript也能作為后臺(tái)語(yǔ)言。現(xiàn)代語(yǔ)言都趨向通用化和全能化,以爭(zhēng)取更多的生存空間。”言及于此,冒號(hào)收住話(huà)題,“語(yǔ)言簡(jiǎn)評(píng)該告一段落了,現(xiàn)在請(qǐng)大家每人寫(xiě)一句對(duì)本節(jié)課的感言。”

    眾人沉思片刻,揮筆而就——

    嘆號(hào)——沒(méi)有最好的語(yǔ)言,只有最合適的語(yǔ)言。

    逗號(hào)——沒(méi)有糟糕的語(yǔ)言,只有糟糕的程序員。

    問(wèn)號(hào)——沒(méi)有一種語(yǔ)言是萬(wàn)能的,只會(huì)一種語(yǔ)言是萬(wàn)萬(wàn)不能的。

    引號(hào)——廢除對(duì)語(yǔ)言的宗教信仰,建立對(duì)語(yǔ)言的哲學(xué)思維。

    句號(hào)——編程就是在人腦和電腦之間尋找最佳平衡點(diǎn)的過(guò)程。


    冒號(hào)讀罷大悅,順手一掌拍出五記馬屁:“精彩之極!可謂字字珠璣、句句聯(lián)璧啊。茲決定,給諸位的獎(jiǎng)賞是——下課!”

    眾人欣然領(lǐng)賞而去。

    posted on 2008-06-24 03:14 鄭暉 閱讀(2911) 評(píng)論(6)  編輯  收藏 所屬分類(lèi): 冒號(hào)和他的學(xué)生們

    評(píng)論

    # re: 冒號(hào)和他的學(xué)生們(連載21)——后臺(tái)腳本 2008-06-25 19:35 kooyee

    跟蹤這個(gè)系列好久,終于占上沙發(fā)了  回復(fù)  更多評(píng)論   

    # re: 冒號(hào)和他的學(xué)生們(連載21)——后臺(tái)腳本 2008-06-26 11:51 ChenWeili

    太精彩了,醍醐灌頂.
    急盼下文。  回復(fù)  更多評(píng)論   

    # re: 冒號(hào)和他的學(xué)生們(連載21)——后臺(tái)腳本 2008-06-26 17:25 鄭暉

    @大人物
    廣告請(qǐng)另尋佳處,抱歉刪貼。  回復(fù)  更多評(píng)論   

    # re: 冒號(hào)和他的學(xué)生們(連載21)——后臺(tái)腳本 2008-07-29 12:27 UMU

    會(huì)太多語(yǔ)言也不好……雖然思想不會(huì)亂,但是打代碼時(shí)常常因?yàn)榱?xí)慣問(wèn)題打錯(cuò),最常見(jiàn)的是很喜歡 ;  回復(fù)  更多評(píng)論   

    # re: 冒號(hào)和他的學(xué)生們(連載21)——后臺(tái)腳本 2008-08-05 17:46 leweslove

    喜歡C和C++
    吃飯靠JAVA  回復(fù)  更多評(píng)論   

    # re: 冒號(hào)和他的學(xué)生們(連載21)——后臺(tái)腳本 2008-08-08 15:37 Stone_Boy

    文筆很好啊
    .
    ~  回復(fù)  更多評(píng)論   

    導(dǎo)航

    統(tǒng)計(jì)

    公告

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

    留言簿(17)

    隨筆分類(lèi)(61)

    隨筆檔案(61)

    文章分類(lèi)(1)

    文章檔案(1)

    最新隨筆

    積分與排名

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 人妻巨大乳hd免费看| 亚洲男人天堂av| 亚洲精品无码高潮喷水A片软| 最近免费中文字幕大全高清大全1| 精品国产人成亚洲区| 色妞www精品视频免费看| 永久免费毛片手机版在线看| 亚洲一区电影在线观看| 中文字幕无码视频手机免费看| 亚洲成在人线电影天堂色| 日本h在线精品免费观看| 亚洲精品日韩中文字幕久久久| 亚洲中文字幕久久精品无码喷水 | 亚洲AV成人无码网站| 免费观看大片毛片| 狠狠入ady亚洲精品| 亚洲乱码中文字幕手机在线| 亚洲视频在线免费| 亚洲精品夜夜夜妓女网| 免费A级毛片无码视频| 亚洲天堂福利视频| 女人18毛片水真多免费看| 亚洲AV无码专区在线观看成人| 免费一级特黄特色大片在线观看| 二区久久国产乱子伦免费精品 | 国产传媒在线观看视频免费观看 | 国产免费区在线观看十分钟| 久久精品国产精品亚洲蜜月| 四虎精品视频在线永久免费观看| 亚洲综合在线一区二区三区| 亚洲国产中文v高清在线观看| 免费人成激情视频在线观看冫| 亚洲精品国产福利片| 精品久久洲久久久久护士免费| 日韩在线一区二区三区免费视频| 亚洲AV无码一区二区二三区软件| 免费无码A片一区二三区| 永久免费观看黄网站| 亚洲日产2021三区| 亚洲国产精品自在拍在线播放| 久久A级毛片免费观看|