2011年7月11日 星期一

PHP Pear & Pecl & Perl CPAN

雖然說 PHP 有類似 Perl 的 CPAN 的 Pear 以及 Pecl 套件庫可用。

但不管是 Pear 或是 Pecl 套件數目都不多,有許多套件都是 Alpha 或是 Beta 的狀態,許多套件也未含詳細文件。

Pecl 的套件數: 265
Pear 的套件數: 569

所以我好奇去查了一下 Perl CPAN 的模組數:

69899 Uploads
22954 Distributions
96895 Modules
9060   Uploaders

這個數字比起來實在是相差太多。

我想原因有幾個,大多 PHP Programmer 少有上傳套件的習慣,也沒有這樣的需求。

50% 以上的 PHP Programmer 都是將 PHP 跟 HTML 合併在一起寫死,頂多也只會用到 MySQL ,所以更不可能作成模組上傳,就算整理出來作成套件,更沒有上傳到 Pear 的習慣。

Pear 以及 Pecl 其實並沒有提供一個很好的文件平台,也沒有制式化的文件檢查

Pear 以及 Pecl 的上傳其實沒有 Unit Test 的程序,所有上傳上去的東西,並不會在不同的平台上測試,所以沒有人可以保證你的套件在不同平台上是不是可以運行。  題外話: 其實 PHPUnit 很不錯,文件很完整、詳細,但是不知為何沒有人想要把它整合至 Pear 或是 Pecl 。

此外,Pear, Pecl 的製作門檻,對大多 PHP Programmer 的程度來說也許算高 (?) ,不得而知。

我想 Pear 或是 Pecl 的平台也許是類似 vim.org 遇到的情況 - 急就章的方式,寫了許多相當 unsafe, dirty 的網站程式,也就更不可能整理程式碼開放出來讓大家改進,也因為夠 dirty 夠 unsafe,所以就更不想去動他,所以就造成了僵持不下的狀況 (?) 。 (不得而知)

之前上 Pear 註冊帳號,發現 Pear 對於使用者註冊帳號這檔事情相當嚴格(也許是 PHP Programmer 濫竽充數的關係 ? ),Pear 以及 Pecl 需要經過人工審核,確實你真的有套件要上傳、有 Bug 要 Report,經過 2 分鐘至幾天的審核通過最後才可以上傳套件。

(也就是你如果不是認真的,就別來亂之類的意思 XD )


CPAN

Perl 的 CPAN 文化很不一樣,帳號註冊相對的比較自由,模組上傳也很自由,你要為模組取什麼名字都可以,你要上傳什麼樣無釐頭的模組都可以 (Acme:: 開頭模組 )。

在 CPAN 上頭,每一天都有人發展新的模組,每一天都有好幾百個模組被上傳、更新,舊的模組若不適用,就會被新的模組取而代之。 在 Twitter 上有 cpan_new 帳號,會自動將所有剛上傳的模組發佈出來,各式各樣的 Service 都有可能會寫出模組可呼應  (Net:: 開頭或是 WWW:: 開頭的模組) 。

模組的相關資訊也容易被整合至 CPAN:


在上頭你可以看到每個 Release 的狀況,可回溯到每個版本,或是查看測試報表,版本控制相關資訊 、Rating、 Review 等等資訊。

雖然 CPAN 上有些模組是壞的、沒有維護,但是只要作者有撰寫測試,就可以直接在 cpan.org 上看到測試報告,並且如果模組在平台上測試時如果沒有通過測試,就不會安裝到系統上,可以保證你系統的穩定度。

CPAN 上的 Smoke Test 也會將你的模組於不同平台、不同的 Perl 版本來測試並產生報表,以 Data::Flow 模組來說: 



如果對於該模組的相依模組穩定度感到不安心,你也可以透過 Dependency 頁面去查看所有相依模組的穩定度 ( 譬如像 Ruby 常有相依模組壞掉的狀況 ):



此外 CPAN 也透過 POD 的文件格式來製作模組文件,在文件中各種的 Refer 都可以正確的被導向到正確的頁面,且由於 POD 結構中包含許多格式,也因此文件的架構就會比較清楚、容易閱讀。



除此之外,也有較完整的 Bug Tracker ,是由 Best Practical 所開發的 RT (Request Tracker) 系統 (以 Moose 的 RT 頁面為例):



另外如果你需要在離線時安裝、瀏覽模組,也有 CPANMini 可使用,可製作一份最小的 CPAN Mirror 於你的電腦上安裝使用,連線時,也可再透過 CPANMini 更新。