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