簡體   English   中英

為什么Perl常用於編寫CGI腳本?

[英]Why is Perl commonly used for writing CGI scripts?

我計划在我的網站上添加一個更好的搜索功能,所以我認為我會用C語言寫它並使用CGI作為訪問它的方法。 但就基於CGI的東西而言,Perl似乎是最受歡迎的語言。 這是為什么? 用C或機器代碼編程是不是更快?

如果有的話,用腳本語言編寫它有什么好處?

謝謝。

在CGI變得流行的那一天,Perl是最容易使用的語言。 人們可以很快拿起“寶貝Perl”,由於程序是一個文本文件,他們可以輕松上傳並傳遞它。 由於Perl起初是一種系統管理語言,許多服務器已經安裝了它。 當在某些托管服務上制作CGI腳本時,Perl很可能已經存在。 不僅如此,Perl腳本在任何平台上幾乎都是相同的,因此您在本地編寫的內容很可能在不同的機器上完全相同。

在大型計划中為“偶然程序員”編程更快,因為他們在制作有用的程序之前學習的東西較少; 他們可以從零開始,並在一小時內運行一個Perl程序,即使它們只是貨物結果。 他們不必擔心編寫和編譯C程序所帶來的所有事情,然后將其轉移到另一個主機(可能是一個不同的平台)。

Perl有一個快速的立足點,你仍然可以看到今天的影響。 如果Perl今天必須從頭開始,我認為它不一定能勝過其他任何東西。 PHP肯定已經接管了低端,快速啟動的人群(對於大多數人來說,它可能是最初的正確工具)。

Perl也有很多文本處理功能,這並沒有受到傷害。 有些人談論CPAN,但是當Perl開始注意到CGI編程時,這幾乎不存在。

但是,Perl並不像過去那樣特別適合CGI編程。 它仍然可以完成它始終擁有的所有優秀功能,但現在各種其他語言都在兼顧功能,可用性和社區意識。

我在1994年開始編寫CGI的東西,我仍然看到大多數框架都是如此令人難以置信且令人難以置信。 我真的希望我們之前有Seaside,因為你甚至都不知道其他框架讓你做的所有愚蠢的事情。 如果我們都學會了Smalltalk,世界會變得多好多少。 :)

安全,一方面。 如果你用C語言編寫,你必須非常小心,以確保你的所有字符串處理都是正確的,這樣你就不會引入緩沖區溢出等。在任何體面的腳本語言中,其他人已經為你做過。 您可能有其他安全漏洞,但除非運行時或擴展模塊中存在錯誤,否則您將不會有緩沖區溢出。 這種好處不僅限於腳本語言; Java和C#等編譯語言也提供了它,並且可以在C ++中使用std::string和C以及良好的字符串庫獲得(盡管通常更加困難)。

在Securitywise中,Perl還有另一個在許多其他系統中看不到的有用功能:“污點”模式。 這使您不會盲目地將用戶輸入作為數據庫查詢,命令行等的一部分傳遞給其他系統。這在編寫CGI腳本時是一個很好的好處,因為在將未經檢查的用戶輸入傳遞給shell之前,腳本會干凈地死掉。執行。 污點模式並不完美,因為無污染的過程取決於程序員正確地執行操作,但它至少有助於捕獲您錯過的代碼路徑。

此外,在這一點上,Perl已經被用於CGI腳本很長一段時間了,因此已經存在大量的庫,框架等,以使編寫新腳本更容易。 加上CPAN可以執行任何操作。

好的,其余答案給出了很好的客觀原因。 為了完整起見,這是一個主觀評價,給它一些顏色:

我寫:

  • 純C中的CGI軟件(專業用於金錢)。 這包括創建整個CGI庫(就在CGI庫可用之前的幾天)。
  • 我在Perl中的CGI庫
  • 使用CPAN在Perl中使用CGI。

基於這些經驗,純粹的C對於“看看我所做的這個很酷的技術成就”的角度給予了最大的滿足。 特別是當CGI是品牌閃亮的時代,新的靜態HTML是各地的主要內容。

由於其他答案中列出的所有客觀原因,我自己的Perl CGI在技術上比C更容易。

而CPAN Perl項目是唯一能夠提供相當不錯的交付周轉時間的項目,並使我能夠專注於構建業務邏輯而不是管道。

使用Perl的最大優勢是CPAN

除了已經提到的答案之外,對於基本的Web應用程序,網絡傳輸速度是比語言選擇更常見的瓶頸。 在Perl中編寫Web應用程序通常比C更容易,因此運行時速度的微小差異不值得創建應用程序所需的額外工作。 實際上,C有時用於計算密集型Web應用程序的某些部分。

由於缺乏自動內存管理,字符串操作(通常是Web開發的很大一部分)在C中非常痛苦並且容易出錯。 請記住,腳本執行時間通常不是瓶頸或可以通過適當的緩存機制來規避。 在許多情況下,最好選擇一種能夠最大限度地提高開發人員生產力的語言,而不是不必要地犧牲開發時間來提高性能,而這些開發時間將不會被網站用戶忽視。

但是,這個一般原則並不完全適用於您的情況,因為搜索引擎可能會從優化的低級代碼中受益。 這並不意味着你必須用C語言做所有事情:已知PHP解釋器的速度很慢,但由於大多數庫函數都是用C語言實現的,所以你可以僥幸逃脫。 我建議用您選擇的高級語言編寫應用程序,並且只重新實現C中已被識別為botlenecks的部分。

我認為使用腳本語言的好處是大多數人使用更高級別的動態語言比使用C語言更有效率。

很多人似乎都擔心速度,但實際上它通常很好......如果它確實成為一個問題,大多數腳本語言都有一個擴展機制,你可以在C中編寫模塊,並仍然在更高級別的腳本語言中使用它們(像perl中的XS,或pythons c-api)

當時CGI是在網絡發展初期發明的,它是對Web請求進行任何動態處理的唯一方式,例如響應提交的表單或點擊圖像映射。 Web服務器軟件本身只能提供靜態內容,因此需要外部程序來處理交互式內容。

第一批網站管理員可能也是系統管理員,他們通常精通Perl。 我記得第一個NCSA httpd服務器帶有用Perl,C和shell編寫的示例CGI程序。 shell腳本很快就被丟棄了,因為它們不安全,除了非常簡短的CGI程序之外什么都不好。 C程序運行良好,但Perl更方便。

我的猜測是Perl作為與CGI一起使用的事實上的標准語言起飛有幾個原因:

  • 系統管理員對此很熟悉。
  • 快速,安全的庫變得廣泛可用; CGI.pm模塊標配Perl。
  • Perl在速度和易開發性之間提供了良好的折衷。

沒有必要使用Perl的原因; 任何可以使用Unix環境變量的語言都是合適的。

也就是說,CGI已經失寵,因為它相對於在Web服務器的地址空間中運行的語言(例如PHP)來說非常慢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM