Perl最初是由Larry Wall為UNIX開發(fā)的一種腳本語言,其目的是為了將UNIX shell的易用性和編程語言(比如C)的強(qiáng)大功能與可塑性結(jié)合起來。Perl很快成為了UNIX系統(tǒng)管理員們的偏愛的語言。
隨著World Wide Web的發(fā)展,Perl的用途有了極大的拓展。公共網(wǎng)關(guān)接口(CGI)提供了在網(wǎng)絡(luò)服務(wù)器和程序之間傳遞數(shù)據(jù)并利用網(wǎng)頁返回結(jié)果的簡單方法。而Perl則迅速成為了CGI編程的主要語言。
在功能強(qiáng)大的Win32移植版本出現(xiàn)之后,Perl也有力地入侵,成為為NT系統(tǒng)的腳本語言之一,特別是在系統(tǒng)管理、網(wǎng)站管理與編程方面大顯身手。
曾經(jīng),在主流的分析家們認(rèn)為CGI程序和Perl將會(huì)很快被Java,ActiveX和其他新的專門為網(wǎng)絡(luò)開發(fā)的技術(shù)所取代。然而,他們沒有料到的是, Perl繼續(xù)在發(fā)展壯大,Microsoft的Active Server Pages(ASP)和Apache服務(wù)器的mod_perl都支持在服務(wù)器上直接運(yùn)行perl程序,以及數(shù)據(jù)界面如DBI,Perl DataBase界面,為后臺(tái)數(shù)據(jù)庫與Perl的整合提供穩(wěn)定的API。
這篇文章探討了為什么Perl變得越來越重要的原因,不局限于網(wǎng)絡(luò),而是做為一種廣泛用途的計(jì)算機(jī)語言。這些原因包括:
Ousterhout繼續(xù)道:就在我們接近二十世紀(jì)的尾聲的時(shí)候,人們編寫程序的方法發(fā)生了一個(gè)跟本性的轉(zhuǎn)變。這個(gè)轉(zhuǎn)變是人們從C和C++這樣的系統(tǒng)程序語言轉(zhuǎn)向了Perl或Tcl這樣的腳本語言。雖然許多人正處于這樣的轉(zhuǎn)變之中,但很少人意識(shí)到了它的發(fā)生,更少有人明白它為什么在發(fā)生....
腳本語言是被設(shè)計(jì)來完成與系統(tǒng)程序語言所不同的任務(wù)的,這導(dǎo)致了它們之間根本性的差異。系統(tǒng)程序語言的設(shè)計(jì)是從底層開始建立數(shù)據(jù)結(jié)構(gòu)和算法,從最初級(jí)的計(jì)算機(jī)元素如內(nèi)存單元開始。與之相反,腳本語言被設(shè)計(jì)用來做“膠著”的工作:它們假定已經(jīng)存在很多有效的組件,然后將它們連接起來。系統(tǒng)程序語言使用嚴(yán)格的數(shù)據(jù)類型來控制復(fù)雜性,而腳本語言則沒有數(shù)據(jù)類型,以便方便地連結(jié)組件并提供快速開發(fā)應(yīng)用程序的能力。
腳本語言和系統(tǒng)程序語言是互補(bǔ)的,而且從60年代起主要的操作系統(tǒng)都同時(shí)支持它們。然而,近期的一些趨勢,如更快的計(jì)算機(jī)、更好的腳本語言的出現(xiàn),圖形用戶界面和組件體系結(jié)構(gòu)的重要性不斷增加,和英特網(wǎng)的發(fā)展,使得腳本語言的應(yīng)用大大拓展。腳本語言將有越來越多的應(yīng)用,而系統(tǒng)程許語言則主要被用來開發(fā)各種組件,這樣的趨勢在下個(gè)十年中還會(huì)繼續(xù)。
系統(tǒng)管理員們是最早利用腳本語言的強(qiáng)大功能的人。任何一個(gè)操作系統(tǒng)中,都存在這種問題。一般是為了自動(dòng)完成某種重復(fù)性的工作。即使Macintosh系統(tǒng)也需要一些用戶定義的自動(dòng)操作。任務(wù)可能很簡單,比如自動(dòng)備份和恢復(fù)系統(tǒng),或者很復(fù)雜,比如周期性地儲(chǔ)存硬盤上所有文件,或者存儲(chǔ)二十四小時(shí)內(nèi)所有系統(tǒng)設(shè)置的改動(dòng)。有些時(shí)候已經(jīng)有這樣的工具可以完成這些工作,但自動(dòng)操作需要有控制程序來啟動(dòng)它們,提取和轉(zhuǎn)化它們的輸出,以及協(xié)調(diào)這些程序的工作。
許多系統(tǒng)都內(nèi)置了一些腳本語言,如VMS的DCI,MS-DOS的BAT文件,UNIX的shell腳本,IBM的Rexx,Windows的 Visual Basic and Visual Basic for Applications,還有Applescripts都是專用于某種系統(tǒng)的腳本語言的好例子。Perl的獨(dú)特在于他打破了腳本語言與某個(gè)操作系統(tǒng)的緊密聯(lián)系,而成為了一種在多個(gè)平臺(tái)下廣泛使用的腳本語言。
有些腳本語言,特別是Perl和Visual Basic,或者算上Tcl和Python,都做為多用途的語言而被廣泛使用。成功的腳本語言一個(gè)長處在于它們很容易調(diào)用操作系統(tǒng)功能/服務(wù)。更高一層次來說,做為一種多用途的腳本語言,它們必須穩(wěn)健到你可以使用它們編寫復(fù)雜應(yīng)用程序的程度。腳本語言可以用來編寫原型,建模和做測試,但當(dāng)腳本語言運(yùn)行足夠迅速和穩(wěn)健的時(shí)候,原型就直接成為了應(yīng)用程序。
那么,為什么不使用那些多用途的程序語言如C,C++或Java替代腳本語言呢?答案很簡單:成本。開發(fā)時(shí)間比硬件和內(nèi)存更昂貴。腳本語言容易學(xué)習(xí)并且使用起來很簡單。
正如Ousterhout指出的,腳本語言通常沒有什么數(shù)據(jù)類型概念。腳本不區(qū)分整數(shù)和浮點(diǎn)數(shù),變量是沒有類型的。這是腳本語言善于快速開發(fā)的原因之一。大概念是“不著急處理細(xì)節(jié)”。因?yàn)槟_本語言擅長調(diào)用系統(tǒng)工具來做難做的事情(如拷貝文件和建立目錄或文件夾),尚未實(shí)現(xiàn)的細(xì)節(jié)就可以用編譯語言易于寫成的小程序來處理。
對(duì)于編譯語言來說數(shù)據(jù)類型有什么用呢?它使得內(nèi)存管理更加容易,但對(duì)于程序員來說更難了。想想看:當(dāng)FORTRAN流行的時(shí)候一個(gè)程序員賺多少錢一小時(shí)?內(nèi)存值多少錢?而現(xiàn)在呢?時(shí)代變了。內(nèi)存便宜,程序員很貴!
系統(tǒng)語言必須把任何東西都寫出來,這使得編譯復(fù)雜數(shù)據(jù)結(jié)構(gòu)更容易,但是程序員更難編寫。腳本語言盡量多地自己做出假定,盡量少地要求明確指定。這讓腳本語言更容易學(xué)習(xí),寫起來也更快。其代價(jià)是編寫復(fù)雜的數(shù)據(jù)結(jié)構(gòu)和算法時(shí)很困難。但是Perl在復(fù)雜數(shù)據(jù)結(jié)構(gòu)和算法方面都做得很好,同時(shí)也沒有犧牲寫簡單程序時(shí)的簡便。
確實(shí),除某些有硬件特異性的語言之外,大部分情況下解釋型語言程序都比編譯語言要慢。解釋型語言的優(yōu)勢在于,它寫的程序在解釋器所能安裝的任何系統(tǒng)上都可以運(yùn)行。解釋器負(fù)責(zé)處理那些系統(tǒng)特異性的細(xì)節(jié)問題,而不是應(yīng)用程序本身。(當(dāng)然也有例外,比如這個(gè)應(yīng)用程序可能調(diào)用了某個(gè)不可移殖的系統(tǒng)特性)
操作系統(tǒng)命令解釋器如MS-DOS的command.com以及早期版本的UNIX C shell是解釋器運(yùn)行的很好例子:腳本里的命令一條一條都喂到解釋器里去。對(duì)于效率影響最大的就是循環(huán):循環(huán)中的每一條命令在每次運(yùn)行的時(shí)候都重新解釋。有些人認(rèn)為所有的解釋型語言都這么...緩慢、低效、一次一行。不過事實(shí)并不是這樣。
實(shí)際上有一些中間型語言,運(yùn)行的時(shí)候被編譯成某些中間碼,然后被解釋器裝載運(yùn)行。Java就是一個(gè)例子,這讓它成為了一種很有價(jià)值的跨平臺(tái)語言。所有在不同硬件上的java解釋器都能交流并共享數(shù)據(jù)和進(jìn)程資源。對(duì)于嵌入系統(tǒng)來說這是非常棒的,因?yàn)榍度胂到y(tǒng)實(shí)際上就是一種特殊目的的硬件。然而Java并不是一種腳本語言。它需要數(shù)據(jù)聲明,而且是預(yù)先編譯的。(除非你把實(shí)時(shí)編譯也算在內(nèi)—雖然它實(shí)際上只是生成代碼)
Perl也是一種中間型語言。Perl代碼根據(jù)需要一塊一塊地進(jìn)行編譯,所不同的是編譯好的可執(zhí)行部分被存在內(nèi)存中而不是寫成文件。任何一塊Perl代碼塊只被編譯一次。Perl在設(shè)計(jì)上的優(yōu)勢使得所有這些優(yōu)化都很值得。Perl保留了解釋語言的可移殖性,又有了接近編譯語言的執(zhí)行速度。已經(jīng)快經(jīng)歷了十年歷史的Perl,擁有數(shù)十萬的開發(fā)者,現(xiàn)在又將經(jīng)歷它的五次脫胎換骨,它運(yùn)行得既簡潔又迅速。雖然在啟動(dòng)的時(shí)候可能會(huì)有一些延遲,因?yàn)樾枰恍r(shí)間編譯代碼,但是相對(duì)于代碼執(zhí)行的時(shí)間來說這很短暫。而且,像”fast CGI”這樣的技術(shù)可以將反復(fù)執(zhí)行的腳本鏡像存在保留在內(nèi)存中來避免啟動(dòng)延遲,除非這個(gè)腳本是第一次運(yùn)行。
不管怎么說,Perl 5.005將有一個(gè)由牛津大學(xué)的Malcolm Beattie所寫的編譯器。這個(gè)編譯器將消除編譯過程中的啟動(dòng)延遲,并加入一些小的加速技術(shù)。它也消除了某些編寫商業(yè)應(yīng)用程序的程序員對(duì)腳本語言的生理恐懼。(使用編譯器之后,其他人將無法再看到源代碼)
Perl處理信息方面的很大一部分能力來源于一種叫做正則表達(dá)式的特殊語法。正則表達(dá)式賦予了Perl極大的處理和操作自由文本中的模式的能力。其他語言也有支持正則表達(dá)式的,(Java甚至有自由/免費(fèi)的正則表達(dá)式庫),但是沒有一種能像Perl一樣結(jié)合得這么好。
很多年以來,總的趨勢一直都是將文本文件整合到特殊的應(yīng)用文件格式中。唯有Unix,將ASCII文本定義為統(tǒng)一的程序文件交換格式,而其他的那些系統(tǒng)則讓不兼容的文件格式越來越多。急劇扭轉(zhuǎn)了這個(gè)趨勢的,是互聯(lián)網(wǎng)的出現(xiàn)。它的HTML數(shù)據(jù)格式是由有標(biāo)記的ASCII文本組成的。由于互聯(lián)網(wǎng)的重要性, HTML—以及與它相伴的ASCII文本—如今處在數(shù)據(jù)交換格式的中心地位,幾乎所有的應(yīng)用程序都可以輸出它。微軟甚至計(jì)劃提供HTML方式的桌面。 HTML的繼承者,XML(可擴(kuò)展標(biāo)記語言)如今已被廣泛認(rèn)為將成為混和環(huán)境下的標(biāo)準(zhǔn)文件交換格式。
HTML的強(qiáng)大顯著地增強(qiáng)了Perl的力量。它是種理想的語言,無論是在核實(shí)用戶輸入在HTML表格中的內(nèi)容,操作大量HTML內(nèi)容,還是提取和分析各種/海量log文件的時(shí)候。
這只是Perl處理文本強(qiáng)大能力的一方面。Perl不僅給你許多分解數(shù)據(jù)的方法,還給你許多將數(shù)據(jù)粘回一起的辦法。因此Perl在處理信息流并重新組裝方面也很理想??梢院茌p易地將信息轉(zhuǎn)換后輸入另一個(gè)程序或進(jìn)行分析匯總。
有人說下一代的應(yīng)用程序?qū)⒉粫?huì)是現(xiàn)在這些程序的樣子,而是“信息化應(yīng)用程序”,其中文本將構(gòu)成大部分的用戶界面。假想一個(gè)典型的企業(yè)內(nèi)部網(wǎng)的應(yīng)用程序系統(tǒng):一個(gè)人力資源系統(tǒng),雇員通過它來選擇哪個(gè)公共基金會(huì)來投資他們的養(yǎng)老金,隨時(shí)了解他們帳戶里的數(shù)目,并取得相應(yīng)信息來幫助他們投資。這個(gè)系統(tǒng)的界面將包含許多信息化的文檔(一般是以HTML的形式),一些基于表格的簡單CGI程序,以及到后臺(tái)實(shí)時(shí)股票行情系統(tǒng)的鏈接(可能是英特網(wǎng)上的服務(wù))。
利用傳統(tǒng)的編程技術(shù)建立這樣一個(gè)系統(tǒng)是很不實(shí)際的。任何一個(gè)公司的投資策略都會(huì)有不同,傳統(tǒng)編程技術(shù)投入的巨大工作量在這樣一個(gè)局限的項(xiàng)目里無法得到回報(bào)。而用web做為前臺(tái),利用perl腳本完成鏈接到后臺(tái)數(shù)據(jù)庫的任務(wù)的話,你可能不需要很多時(shí)間就能完成這樣一個(gè)系統(tǒng)。
或者來看看Amazon.com,它可能是最成功的新網(wǎng)絡(luò)經(jīng)濟(jì)的例子了。Amazon提供一個(gè)信息前臺(tái),以及一個(gè)后臺(tái)數(shù)據(jù)庫和訂單系統(tǒng),然后——你猜對(duì)了——用perl將它們連在了一起。
Perl對(duì)數(shù)據(jù)庫的鏈接是由一組被功能強(qiáng)大的數(shù)據(jù)庫獨(dú)立界面支持的,它們被稱為DBI。Perl+fast-cgi+DBI可能是互聯(lián)網(wǎng)上使用最廣泛的數(shù)據(jù)庫鏈接/連接系統(tǒng)了。ODBC模塊也可以提供類似功能。
考慮到Perl強(qiáng)大的前臺(tái)文本處理能力,以及后臺(tái)的數(shù)據(jù)庫鏈接功能,因此你應(yīng)該開始明白為什么Perl在新一代信息化應(yīng)用中會(huì)起到越來越重要的作用了。
Perl的模式匹配和處理功能在其他方面的應(yīng)用包括生物醫(yī)學(xué)研究,以及數(shù)據(jù)挖掘。任何大的文本數(shù)據(jù)庫,從人類基因組計(jì)劃的基因序列分析到某些大網(wǎng)站的日志文件分析,都可以用Perl來處理。最終Perl進(jìn)一步被用來做基于網(wǎng)絡(luò)的研發(fā)和專門的英特網(wǎng)搜尋應(yīng)用。在模式匹配和網(wǎng)絡(luò)socket開發(fā)方面的優(yōu)勢成為英特網(wǎng)的通訊方面的基石,也使Perl成為建立網(wǎng)絡(luò)機(jī)器人的最佳語言,這些機(jī)器人用于在英特網(wǎng)上查找關(guān)鍵信息。
在編制基于socket的客戶端-服務(wù)器應(yīng)用程序的時(shí)候Perl比C或C++要簡單。用Perl編寫自由文本處理程序比任何語言都更簡單。Perl有一個(gè)由Perl寫成的成熟的調(diào)試器,以及許多選項(xiàng)可以用來建立安全的應(yīng)用程序。幾乎任何一方面的應(yīng)用都有免費(fèi)的Perl模塊可以使用,當(dāng)需要的時(shí)候便可以動(dòng)態(tài)加載。
Perl可以很容易的用編譯好的C/C++甚至Java寫的函數(shù)進(jìn)行擴(kuò)展。這表明調(diào)用一些還沒用Perl寫的功能或系統(tǒng)服務(wù)也很容易。當(dāng)在非UNIX系統(tǒng)下運(yùn)行的時(shí)候,由于可以調(diào)用這個(gè)系統(tǒng)的特殊功能,因此這種拓展能力變得更加有價(jià)值。
Perl也可以在編譯程序中被調(diào)用,或者被插入到其他語言編寫的程序中。人們正在建立一種標(biāo)準(zhǔn)的方法,將Perl整合到Java中去,也就是說Java的類將可以用Perl來寫。目前為止,這些程序需要內(nèi)嵌Perl解釋器。不過1997年的第四季度O’Reilly & Associates的Perl資源工具箱將包含一個(gè)新的后臺(tái)編譯器,將Perl編譯為Java字節(jié)碼以解決這個(gè)問題。
然而,如前所說,開發(fā)固有的圖形界面已經(jīng)變得不那么重要,因?yàn)閣eb正逐漸成為多數(shù)應(yīng)用程序標(biāo)準(zhǔn)的圖形界面。“webtop”做為通用的跨平臺(tái)應(yīng)用正在快速的取代“desktop”。只要寫一個(gè)“webtop”便可以用在UNIX,Mac,Windows/NT,Windows/95…任何一個(gè)有網(wǎng)頁瀏覽器的系統(tǒng)。
實(shí)際上,越來越多的網(wǎng)站采用Perl和web來為一些傳統(tǒng)的程序創(chuàng)建更簡單易用的界面。比如Purdue大學(xué)網(wǎng)絡(luò)計(jì)算中心為三十種電路模擬工具設(shè)計(jì)了一個(gè)網(wǎng)頁界面,使用Perl從使用者填好的表格中提取數(shù)據(jù)并轉(zhuǎn)化為命令行,發(fā)給Hub上連著的程序。
Perl一直支持的多任務(wù)模型是“fork”和“wait”。最小的調(diào)度單位是進(jìn)程,它適用于UNIX。Windows/NT的多線程機(jī)制并不太一樣,因此 Perl的可移殖性目前便受到了限制。不過如果在進(jìn)程控制和其他應(yīng)用之間建立抽象層,問題就解決了。而且,調(diào)和UNIX和Win32系統(tǒng)Perl接口的進(jìn)程控制代碼的工作正在進(jìn)行,1997年的第四季度就會(huì)完成。
Perl進(jìn)入像NT這樣的Win32平臺(tái)是有很多原因的。盡管有Visual Basic和Visual Basic for Apllications存在,Win32平臺(tái)上的腳本語言支持依然比較弱。雖然VB是解釋型腳本語言,但它依然是一種類型化的語言,用起來比較繁瑣。而且它也沒有像Perl那樣強(qiáng)大的字符串處理能力。當(dāng)建立大型NT站點(diǎn)的時(shí)候,系統(tǒng)管理員們則明顯的認(rèn)識(shí)到圖形用戶界面的限制,對(duì)于管理數(shù)百臺(tái)計(jì)算機(jī)來說腳本語言是必須的。
很多時(shí)候會(huì)有這種情況,一些有經(jīng)驗(yàn)的系統(tǒng)管理員常常被叫去管理那些不使用UNIX系統(tǒng)的站點(diǎn),這時(shí)使用Perl是將UNIX的優(yōu)點(diǎn)帶到其他系統(tǒng)去的好辦法。
你也不能低估web的影響力量?,F(xiàn)在網(wǎng)上有數(shù)以千計(jì)用Perl編寫的CGI程序和站點(diǎn)管理工具,支持Perl對(duì)于任何服務(wù)器平臺(tái)說都是必需的。對(duì)于 Microsoft的NT服務(wù)器來說,O’Reilly和Netscape更顯得重要,對(duì)Perl的支持是必須的。ActiveState的 PerlScript??可以讓Perl在支持ASP的NT網(wǎng)絡(luò)服務(wù)器,如Microsoft的IIS和O’Reilly的WebSite中的動(dòng)態(tài)腳本引擎上運(yùn)行。
除了核心的Perl語言解釋器之外,ActiveState Perl的Win32??接口還包括特別針對(duì)Win32環(huán)境的模塊。比如它提供了對(duì)自動(dòng)操作對(duì)象的全面支持。隨著越來越多的Windows系統(tǒng)資源和組件支持Perl端口,Win32版本的Perl將能夠使用越來越多的系統(tǒng)功能。
Perl5添加了一個(gè)擴(kuò)展機(jī)制,獨(dú)立的模塊可以利用這個(gè)機(jī)制動(dòng)態(tài)地加載到Perl程序之中。這導(dǎo)致了如今數(shù)百個(gè)附加模塊的開發(fā),其中許多重要的模塊現(xiàn)在已經(jīng)成為了Perl標(biāo)準(zhǔn)發(fā)行版本的一部分。附加的模塊可以在綜合Perl存檔網(wǎng)絡(luò)(CPAN)上得到。最好的進(jìn)入CPAN的界面大概是www.perl.com,那里還包括許多書評(píng),文章以及其他一些Perl程序員和使用者們關(guān)心的信息。
過去對(duì)使用自由軟件曾經(jīng)有的偏見,如今已經(jīng)被粉碎了,因?yàn)槿藗冋J(rèn)識(shí)到過去這些年來有許多最重大的計(jì)算機(jī)技術(shù)突破是從自由軟件社區(qū)中產(chǎn)生的。 Internet本身很大程度上就是一個(gè)合作的自由軟件項(xiàng)目,而且它的發(fā)展也是被那些自發(fā)組織的有遠(yuǎn)見的開發(fā)者所引導(dǎo)。類似的,在網(wǎng)絡(luò)服務(wù)器平臺(tái)中占有很大一塊市場的是Apache,它也是一個(gè)自由軟件項(xiàng)目,由大量的合作開發(fā)者社團(tuán)創(chuàng)立,拓展和管理的。
除了持續(xù)不斷的開發(fā)之外,Perl社區(qū)還通過新聞組和郵件提供活躍的技術(shù)支持。同時(shí)還存在無數(shù)咨詢及付費(fèi)的技術(shù)支持項(xiàng)目。無數(shù)的書籍提供了極好的文檔材料,包括其中最著名的。Programming Perl,作者是Larry Wall,Randal Schwarz和Tom Chirstiansen。The Perl Journal和www.perl.com提供關(guān)于一些最新進(jìn)展的信息。
總的來說,由于巨大的開發(fā)者團(tuán)體和自由軟件社區(qū)合作的傳統(tǒng),Perl具有和可以和最大的公司媲美的開發(fā)和支持資源。
好,我們來看看這個(gè)情況。你嶄新的網(wǎng)絡(luò)公司已經(jīng)全面啟動(dòng),你賣了多得超出你想象的瀏覽器,服務(wù)器和網(wǎng)絡(luò)應(yīng)用程序,你的公司大踏步的前進(jìn),最新的市場調(diào)查顯示你的客戶一年之內(nèi)就已經(jīng)超過了三十萬。
現(xiàn)在唯一討厭的問題是那三十萬買了你的瀏覽器的家伙們可能會(huì)碰到點(diǎn)什么問題。他們可能不清楚到底他們要上的網(wǎng)在哪里,他們可能想要找人幫忙,他們可能想要找*你*來給他們技術(shù)支持。
當(dāng)這種事情發(fā)生的時(shí)候,你大概會(huì)想:“好吧,那我寫一些技術(shù)文章放到網(wǎng)上。”但是你開始著手這個(gè)計(jì)劃的時(shí)候你會(huì)發(fā)現(xiàn),你需要一種內(nèi)容管理系統(tǒng),一種發(fā)布系統(tǒng),一些日志分析,然后收集和報(bào)告用戶們?cè)谀愕木W(wǎng)站上的反饋,你早就該做這件事了。
幸運(yùn)的是你知道Perl,然后你用Perl在三個(gè)月時(shí)間搞定了所有東西,僅僅靠了4個(gè)十分繁忙的技術(shù)支持工程師們的一些業(yè)余時(shí)間。
跨平臺(tái)的GUI界面如今用HTML或本地運(yùn)行上都做的很好,比如在企業(yè)內(nèi)部網(wǎng),或者是互聯(lián)網(wǎng)上。
Perl提供了方便的數(shù)據(jù)結(jié)構(gòu)接口以及商業(yè)數(shù)據(jù)庫的界面模塊。它為我提供了系統(tǒng)級(jí)的工具用于進(jìn)程控制,文件管理,以及進(jìn)程間通訊(只要有socket存在)。它讓我可以用庫,模塊,包,還有子程序等等東西創(chuàng)建我的程序。它還可以讓我寫一些能夠修改自身的程序,雖然看起來有點(diǎn)怪,不過有時(shí)候這個(gè)很必要。
Perl給我的最大好處在于我只需要原來五分之一的時(shí)間就可以完成一個(gè)復(fù)雜的任務(wù)。這個(gè)對(duì)于管理人員和客戶都很有吸引力,不過最感興趣的是那些為這個(gè)付錢的人。
由于它的穩(wěn)健和可塑性,它已經(jīng)成為CAASD中很多程序員使用的工具,用來開發(fā)概念模型的快速原型。交通流管理實(shí)驗(yàn)室(T-lab)已經(jīng)在使用數(shù)以百計(jì)的 Perl程序,從簡單的數(shù)據(jù)界西和描點(diǎn)制圖,到測算空間領(lǐng)域的復(fù)雜性,并計(jì)算飛行器傳過這些領(lǐng)域的飛行時(shí)間。這些程序的大小從10行一直到1200行。因?yàn)樵S多這樣的程序都高強(qiáng)度地使用I/O,因此Perl由于其多樣地解析和搜索特性成為完成這些任務(wù)最自然的選擇。
iPrint系統(tǒng)包括一個(gè)前臺(tái)系統(tǒng)(網(wǎng)站)和后臺(tái)進(jìn)程,免去了操作打印機(jī)需要的所有前期手工過程,并為iPrint會(huì)計(jì)系統(tǒng)提供所有需要的信息。這個(gè)系統(tǒng)里接近80000行的程序中95%都使用Perl v5.003寫的,運(yùn)行在WindowsNT4.0上。iPrint非常依賴RDBMS(SQL服務(wù)器),而所有與服務(wù)器的交互都是用Perl和ODBC 完成的。iPrint使用了包括MIME和Win32::ODBC在內(nèi)的許多CPAN模塊。
作者先使用CGI程序建立一個(gè)SGML文檔,填一個(gè)小表格,然后將在用戶的home目錄下產(chǎn)生一個(gè)部分完成的SGML文檔,它也可以在Microsoft Windows中被加載。而后作者可以用自己喜歡的編輯器來完成這個(gè)文檔。利用CGI程序,用戶可以看到文檔的變化(’cvs diff’)以及用HTML方式在遞交之前看到他們的SGML文檔(’cvs commit’)。作者可以用關(guān)鍵詞搜索SGML庫(使用glimpse方法),以及追蹤版本變化(’cvs log’)。編輯們也可以利用CGI程序建立時(shí)間表。
Amazon.com建立了一個(gè)基本的SGML精簡類,然后建立了一些子類來進(jìn)行不同模式下對(duì)網(wǎng)站不同部分的提煉(含圖片的HTML或沒有圖片的HTML,將來可能還有PointCast,XML,braille等等)。
所有的代碼都是使用Perl寫的。它使用了CGI以及HTML::Parser模塊。
尋找了各種合適的可擴(kuò)充打印服務(wù)系統(tǒng)之后,發(fā)現(xiàn)MIT Project Athena的Palladium可以做為不錯(cuò)的開發(fā)基礎(chǔ)。不過它是獨(dú)立打印服務(wù)器系統(tǒng),不符合我們的要求,醫(yī)院需要一種分布式的服務(wù)器。我們花費(fèi)了兩個(gè)月的時(shí)間希望將Palladium移殖到醫(yī)院的平臺(tái)上然后做些修改,但是最終我們發(fā)現(xiàn)這太不經(jīng)濟(jì)了。最后我們決定自己來建立我們要的系統(tǒng),使用Perl做為核心程序,Tcl/Tk做GUI管理界面。Palladium有30000行源代碼,而我們更復(fù)雜的分布式服務(wù)器系統(tǒng)只涌了5000行的Perl以及四個(gè)人月的工作量就完成了第一個(gè)版本。這個(gè)Perl程序在一臺(tái)運(yùn)行UNIX的60MHz的Pentium機(jī)器上運(yùn)行的速度已經(jīng)足夠快,所以沒有必要再用C 重寫任何代碼。
The Hub是一個(gè)可以用www訪問的各種模擬工具與相關(guān)信息的收集,它是高度模塊化的系統(tǒng),有接近12000行的Perl代碼。它包含了幾個(gè)組成部分:a)通過www訪問的用戶界面。b)提供訪問控制(安全與隱私)以及任務(wù)控制(運(yùn)行、中止,以及程序狀態(tài)函數(shù))。 c)支持邏輯(虛擬)資源組織與管理。在Hub上,用戶何以:a)上載與操作輸入文件。b)運(yùn)行程序。 c)瀏覽與下載輸出文件。所有過程都是通過www瀏覽器實(shí)現(xiàn)。其內(nèi)部結(jié)構(gòu)是一系列專門的服務(wù)程序(用perl5寫成)組成的分布式實(shí)體。這些服務(wù)程序控制了本地和遠(yuǎn)端的軟件與硬件資源。硬件資源包括任意的硬件平臺(tái),軟件資源包括該平臺(tái)上所有程序。(目前的版本還不支持交互式和基于GUI的程序)
The Hub允許各種工具根據(jù)它們的域被組織在一起并且可以交叉引用。資源可以通過一種特別設(shè)計(jì)用來描述工具與硬件特性的語言逐步地向這個(gè)系統(tǒng)添加。例如,一個(gè)新的設(shè)備可以僅僅通過描述它的型號(hào),運(yùn)行模式,操作系統(tǒng)等信息便很容易的添加到Hub系統(tǒng)中。類似地,一個(gè)新工具軟件可以通過“告訴”Hub系統(tǒng)它的位置,輸入方法(如命令行語句),可以運(yùn)行在何種機(jī)器上(如Sparc5),以何種形式整合到Hub系統(tǒng)中(如電路模擬程序)等等信息來被整合進(jìn)入Hub系統(tǒng)。這些工作通??梢栽诎胄r(shí)內(nèi)完成。
為了實(shí)現(xiàn)這種功能,Hub解析URL的方式和標(biāo)準(zhǔn)的面向文檔的web服務(wù)器不同。URL的結(jié)構(gòu)與底層的文件系統(tǒng)分離開來,而采用一種上下文敏感的方式解析(基于服務(wù)器上儲(chǔ)存的用戶詳細(xì)狀態(tài)),以此來完成虛擬帳戶和自由存取控制。Lab引擎可以提供它的高性能計(jì)算能力給Hub系統(tǒng)隨時(shí)調(diào)用。當(dāng)一個(gè)用戶請(qǐng)求運(yùn)行一個(gè)程序時(shí),lab引擎使用用戶指定的輸入文件來決定(通過人工智能子系統(tǒng)-同樣是使用Perl編寫的)使用哪些資源來運(yùn)行,選擇一個(gè)合適的平臺(tái)(如工作站解決2-D問題,超級(jí)計(jì)算機(jī)解決3-D問題),將相關(guān)輸入文件傳到相應(yīng)的平臺(tái),通過遠(yuǎn)端服務(wù)器啟動(dòng)程序。當(dāng)計(jì)算結(jié)束之后,遠(yuǎn)端服務(wù)器提示lab引擎,然后取回輸出文件,遞交給用戶。
最初的原型系統(tǒng):半導(dǎo)體模擬Hub,包含來自四個(gè)大學(xué)的十三個(gè)半導(dǎo)體技術(shù)工具程序。在不到一年的時(shí)間里,超過250個(gè)用戶進(jìn)行了超過13000次的模擬運(yùn)算。提供VLSI設(shè)計(jì)的Hub,計(jì)算機(jī)體系結(jié)構(gòu)和并行計(jì)算技術(shù)也在最近幾個(gè)月被添加進(jìn)來。目前他們維護(hù)了十四個(gè)左右的程序。這些Hub系統(tǒng)現(xiàn)在在 purdue大學(xué)的一些本科生課程和研究生課程中被使用,同時(shí)也用來協(xié)助合作性的研究。經(jīng)常使用這個(gè)系統(tǒng)的包括Puedue大學(xué)的一些學(xué)生和來自歐州和美國不同地區(qū)的一些研究人員。
Copyright ?? 2004 O’Reilly Media, Inc.
聯(lián)系客服