Perl 指導委員會談發展戰略: Perl 7 沒那么快發布
隨著 Perl 5.36 即將發布,Perl 指導委員會在一篇博客中談論了 Perl 語言當前的發展策略以及未來的發展計劃,同時也解答了一些常見的問題。
誰在決定 Perl 的方向?
2020 年 6 月,Perl 官方宣布 Perl 7 計劃。Perl 7 的一個關鍵想法是通過啟用許多廣泛使用的模塊 / 編譯指示,來減少代碼頂部所需的樣板,但這將以破壞一些向后兼容性為代價。
該想法引發了很多激烈的討論,有些人認為拋棄 Perl 的關鍵優勢 “向后兼容性” 是非常糟糕的想法,另一些人則認為墨守成規得不到更好的發展。
這些討論引發了另一個新問題:誰有權利決定 Perl 的發展方向和具體計劃?原作者 Larry Wall ?但他已經有近 20 年沒有參與 Perl 的開發了。最終,社區在討論之后創建了一個新的治理結構 :為 Perl 5 作出最多貢獻的核心團隊通過選舉推出三個人,這三個人組成的 Perl 指導委員會 (PSC) 擁有 Perl 未來的最終決策權。
Perl 當前發展戰略
第一屆 PSC 在 2020 年底當選,隨后為 Perl 制定了如下的戰略:
- 現有的合理編寫的 Perl 5 代碼應該能在未來的 Perl 版本下繼續運行(繼續保持向后兼容性)。但有時這是不可能的,比如某些安全漏洞可能需要破壞向后兼容性的更改才能修復。
- 推動語言向前發展,提高引入新功能的速度。所以引入了 RFC 流程,任何人都可以使用該流程來對 Perl 語言提出修改。
- 讓人們更容易使用這些新功能。
該策略的核心是功能保護和版本包捆綁。
特性保護
如果一個新的語言特性不能向后兼容,那么它就會受到 “特性保護” 的保護。比如 ,Perl 5.010 引入了 say 關鍵字。但默認情況下無法啟用它,因為有人可能在代碼中有一個 say 函數,那么新的關鍵字就會與之沖突。因此需要用到 feature pragma (編譯指示功能):
use feature 'say';
say "hello, world";
但并不是所有的新語言特性都有保護。如果新的語法,在所有舊版本的 Perl 中都會導致語法錯誤,那么就不需要保護了。例如,Perl 5.36.0 引入了新的語法,允許一次從一個列表中處理 N 項:
foreach my ($key, $value) (%hash) {
…
}
這個新語法沒有特性保護,所以可以在第 0 行使用 (即在 use v5.36 之前)。
版本包捆綁
Perl 5.36.0 引入了版本包捆綁(Version bundles)功能,解決了 Perl 被詬病已久的 “樣板文件” 問題。該功能只需將這一行放在代碼頂部:
use v5.36;
這一行相當于以前的:
require v5.36;
use strict;
use warnings;
use feature 'say';
use feature 'state';
use feature 'current_sub';
use feature 'fc';
use feature 'lexical_subs';
use feature 'signatures';
use feature 'isa';
use feature 'bareword_filehandles';
use feature 'bitwise';
use feature 'evalbytes';
use feature 'postderef_qq';
use feature 'unicode_eval';
use feature 'unicode_strings';
no feature 'indirect';
no feature 'multidimensional';
也就是說,版本包捆綁功能,讓開發者使用簡單的 use v...; 語句即可達成這些效果:
- 告訴 perl 解釋器和人類讀者,當前代碼需要 perl 5.36.0 或更高版本才能運行;
- 支持當前版本 Perl 提供的所有非實驗性功能;
- 使用了許多已被廣泛實踐過的附加編譯指示。
該功能極大地減少了在代碼頂部編寫的樣板文件,解決了 Perl 這個詬病已久的問題。
Perl 7 咋樣了?
目前,Perl 的計劃是繼續引入新功能,并解決所有現有的實驗性功能,實驗性功能要么被刪除,要么成為非實驗性功能(包含在版本包捆綁中)。
在未來的某個時候,Perl 指導委員會可能會認為:這些新的功能加在一起,代表了一個足夠大的進步,足以證明 Perl 的新方向是正確的。如果發生這種情況,那么 Perl 版本將被提升到 7.0。
我們有很多好的想法在工作中,如果我們能夠保持去年的勢頭,那么事情看起來很有希望。與此同時,我們將繼續發布 5.XX 版本。(畫餅大師?)
即使 Perl 版本將被提升到 7.0,默認情況下 Perl 7 仍將向后兼容 Perl 5 —— 必須將 use v7; 放在代碼頂部,才能使用 V7 所有新功能。
感興趣的朋友可以移步 Perl 指導委員會的博客作進一步閱讀。
本文轉自OSCHINA
本文標題:Perl 指導委員會談發展戰略: Perl 7 沒那么快發布
本文地址:https://www.oschina.net/news/197534/what-happened-to-perl-7