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

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

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

    冒號和他的學生們(連載21)——后臺腳本

     

    冒號和他的學生們

    ——程序員提高班紀事

     

    21.后臺腳本

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

     

    “剩下四種動態語言,我們將之歸為后臺腳本語言。”冒號說著畫了張圖表——

    用戶

    前臺語言Visual BasicDelphiJavaScript

    平臺語言JavaC#

    后臺腳本語言PerlPHPPythonRuby

    系統語言CC++D

    機器


    引號聽得仔細:“我記得您開始是把這些語言劃分為C族靜態語言、非C族靜態語言和動態語言三類的。”

    冒號解釋:“那是按語法來劃分的,偏重理論;現在是按應用來劃分,偏重實踐。”

    句號旋即聯想到:“這種分法貌似三層架構——前臺語言對應表現層;平臺語言和后臺腳本語言對應業務邏輯層;系統語言對應數據層。”

    “的確有些神似,但千萬不可混淆。”冒號提醒道,“三層架構(three-tier architecture)是模塊設計上的邏輯劃分;而這里是按語言應用范圍進行的物理劃分——與用戶交互的是前臺語言,與機器交互的是系統語言,介于其中的為前臺提供服務同時又需要底層系統服務的是后臺語言。”

    逗號詢問:“后臺語言又細分成平臺語言與后臺腳本語言?”

    “這是基于程序(program)與腳本(script)、靜態與動態而分的。”冒號進行說明,“其實PerlPHPPythonRuby都有自己的虛擬機(Virtual Machine),從這種意義上說它們也可作為平臺語言。但在實際應用中,它們沒有Java平臺和.NET平臺那種凝聚力和核心作用,通常作為輕量級的解決方案。”

    問號想探個究竟:“這是由于它們都是動態語言的緣故嗎?”

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

    嘆號揣測:“說不定在不久的將來,動態語言也會成為主流的主角。”

    “世易時移,殊難逆料。但有一點可以肯定,語言的發展趨勢一定是動靜結合、剛柔并濟。”冒號斷言,“一方面以JavaC#為代表的靜態語言中嫁接了動態語言的枝條;另一方面以Java.NET為代表的平臺與動態語言的交壤地帶也在逐步擴大。比如JRuby允許RubyJava之間互相調用,類似的還有JythonIronRubyIronPython等等。此外值得一提的是,動態語言最活躍的舞臺當數LAMPL-A-M-P。”

    引號接茬:“LLinuxAApacheMMySQLPPHP。”

    冒號補充道:“P也可指PerlPython,甚至Ruby。”

    句號調侃:“可惜Ruby的‘R’比‘P’多了一根尾巴。”

    “有人為了自圓其說,干脆讓P表示‘Programming language’,這下所有語言都囊括其中了。老外就喜歡玩這種首字母縮略(acronym)的文字游戲。”冒號語帶調笑,“前面我們曾提及,網絡應用是生長動態語言最肥沃的土壤,而LAMP就是這塊土壤上搭建的平臺。作為開源網絡平臺,LAMP以其開放靈活、開發迅速、成本低廉等特色而與Java平臺和.NET平臺鼎足三分,尤其受中小企業的歡迎。LAMPLinux是操作系統,ApacheWeb服務器,MySQL是數據庫系統,而我們當下最關心的是‘P族語言’:PHPPerlPython還有Ruby。”

    問號建議:“作為動態語言,它們的共性上節課已經談了不少,能說說它們的個性嗎?”

    “它們的個性極為鮮明:Perl凝練晦澀,Python優雅明晰,Ruby精巧靈動,PHP簡明單純。先看老大哥Perl,它博采眾家之長,綜合了C語言的結構、sed的正則表達式、AWK的關聯數組(associative array)Lisp的表(list)和Unix Shell的命令,此外還有借鑒了一種語言,你們知道是哪種嗎?”冒號忽然賣了個關子。

    逗號猜想:“應該是某種OOP語言吧。”

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

    嘆號幽了一默:“我見過Perl的代碼,人文氣息沒聞出來,但我懷疑有乙醚氣息——看一會就覺得暈暈乎乎的。”

    眾人大笑。

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

    引號感到驚奇:“對空白符敏感?這個倒真怪異。”

    冒號見慣不怪:“雖然有點違反習慣,但非常符合Python一貫的規范簡潔的風格——一方面從語法上保證了良好的編碼風格;另一方面,每個代碼塊不再需要起始的大括號或begin/end之類的,減少了的代碼行數。此外許多人抱怨Python中的自引用self太多,殊不知這也是它倡導顯式表達的一種體現。”

    嘆號好奇地問:“Ruby怎么樣?據說它將取代Java。”

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

    逗號有些懷疑:“框架竟然捧紅了語言,框架真有這么重要嗎?”

    “如果Web應用中動態頁面較少或業務邏輯不復雜,框架的價值并不大。以前CGI編程就是往Perl之類的代碼中嵌入HTML代碼,如同Java中的ServletPHP則單純地在HTML代碼中插入PHP代碼,如同早期的JSP。沒有MVC,也不管什么三層架構,更沒有ORM。但是——”冒號拖了個轉折音,“一旦業務邏輯變得復雜,開發人員增多,手工作坊式編程開始捉襟見肘,引入框架這個流水生產線來提高生產力便是大勢所趨。”

    句號不解:“我想PerlPythonPHP一定也有不少框架,Java中的框架更是泛濫成災,何以獨獨RoR脫穎而出?”

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

    嘆號愈發擔憂:“聽這意思,Java還是危險啊!”

    “言之過早。”冒號不以為然,“首先RoR還有待進一步檢驗,目前無論是應用廣度還是深度上尚無法與Java相提并論;其次Java在性能、安全等方面還是有不少優勢,而這些對于大型和關鍵性的應用來說尤為重要。即使在中小型web應用中,RoR較之PHP還遠為不及。”

    問號接下話題:“PHP為何如此流行?”

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

    引號突然想起:“我記得您在第一堂課提到PHP還能用于桌面應用。”

    “不僅PHPPerlPython還有Ruby,都能作為前臺語言來開發命令行或圖形界面的應用。同樣地,VBDelphiJavaScript也能作為后臺語言。現代語言都趨向通用化和全能化,以爭取更多的生存空間。”言及于此,冒號收住話題,“語言簡評該告一段落了,現在請大家每人寫一句對本節課的感言。”

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

    嘆號——沒有最好的語言,只有最合適的語言。

    逗號——沒有糟糕的語言,只有糟糕的程序員。

    問號——沒有一種語言是萬能的,只會一種語言是萬萬不能的。

    引號——廢除對語言的宗教信仰,建立對語言的哲學思維。

    句號——編程就是在人腦和電腦之間尋找最佳平衡點的過程。


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

    眾人欣然領賞而去。

    posted on 2008-06-24 03:14 鄭暉 閱讀(2903) 評論(6)  編輯  收藏 所屬分類: 冒號和他的學生們

    評論

    # re: 冒號和他的學生們(連載21)——后臺腳本 2008-06-25 19:35 kooyee

    跟蹤這個系列好久,終于占上沙發了  回復  更多評論   

    # re: 冒號和他的學生們(連載21)——后臺腳本 2008-06-26 11:51 ChenWeili

    太精彩了,醍醐灌頂.
    急盼下文。  回復  更多評論   

    # re: 冒號和他的學生們(連載21)——后臺腳本 2008-06-26 17:25 鄭暉

    @大人物
    廣告請另尋佳處,抱歉刪貼。  回復  更多評論   

    # re: 冒號和他的學生們(連載21)——后臺腳本 2008-07-29 12:27 UMU

    會太多語言也不好……雖然思想不會亂,但是打代碼時常常因為習慣問題打錯,最常見的是很喜歡 ;  回復  更多評論   

    # re: 冒號和他的學生們(連載21)——后臺腳本 2008-08-05 17:46 leweslove

    喜歡C和C++
    吃飯靠JAVA  回復  更多評論   

    # re: 冒號和他的學生們(連載21)——后臺腳本 2008-08-08 15:37 Stone_Boy

    文筆很好啊
    .
    ~  回復  更多評論   

    導航

    統計

    公告

    博客搬家:http://blog.zhenghui.org
    《冒號課堂》一書于2009年10月上市,詳情請見
    冒號課堂

    留言簿(17)

    隨筆分類(61)

    隨筆檔案(61)

    文章分類(1)

    文章檔案(1)

    最新隨筆

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 麻豆精品不卡国产免费看| 亚洲无人区一区二区三区| 青青草免费在线视频| 97视频免费在线| 日韩精品无码区免费专区| 91九色精品国产免费| 国产99视频精品免费观看7| 成视频年人黄网站免费视频| 久久99九九国产免费看小说| 免费无码又黄又爽又刺激| 毛片在线免费视频| 国产精品四虎在线观看免费| 亚洲av日韩av欧v在线天堂| 亚洲国产成人a精品不卡在线| 久久精品国产亚洲Aⅴ香蕉| 亚洲女初尝黑人巨高清| 亚洲国产精品自在在线观看| 亚洲高清在线mv| 中文字幕在线观看亚洲日韩| 亚洲精品无码专区久久| 美女黄频视频大全免费的| 91av免费在线视频| 久章草在线精品视频免费观看| 最近中文字幕大全免费视频| 久久久久久99av无码免费网站| 国产一级一片免费播放i| 亚洲日韩在线观看| 亚洲成在人天堂在线| 色婷五月综激情亚洲综合| 精品在线视频免费| 国产成人免费ā片在线观看老同学 | 亚洲AV色欲色欲WWW| 一级看片免费视频| 亚欧免费一级毛片| www.999精品视频观看免费| 免费永久国产在线视频| 亚洲国产精品无码久久SM| 亚洲免费黄色网址| 亚洲Aⅴ在线无码播放毛片一线天| 久久国产免费直播| 日韩在线免费视频|