perl数组硬引用_Perl 继续前行,Perl 7 将是下一代(硬核老王点评版)
它是默認帶有現(xiàn)代行為的 Perl 5,將為以后更大的變化奠定基礎(chǔ)。
- 來源:https://linux.cn/article-12349-1.html
- 作者:Brian D Foy
- 譯者:Xingyu.Wang
(本文字數(shù):5043,閱讀時長大約:8 分鐘)
近日 召開的 Perl 大會是在云端舉辦的 ,在會上 Sawyer X 宣布 Perl 有了新的前進計劃。Perl 7 的開發(fā)工作已經(jīng)在進行中,但不會有代碼或語法上的巨大變化。它是默認帶有現(xiàn)代行為的 Perl 5,將為以后更大的變化奠定基礎(chǔ)。
硬核老王:在經(jīng)歷了 Perl 6 失敗的巨大痛苦之后,Perl 社區(qū)終于從陰霾的心情中走出了。但是失去的黃金 20 年卻是挽回不了了,否則別說 PHP,都不會有 Python 什么事。我認為,Perl 7 是一條自我救贖之路,應(yīng)該,或許,會有新的 Perl 7、Perl 8 吧……
Perl 7 基本上是 Perl 5.32
Perl 7.0 將會是 Perl 5 系列的 5.32,但會有不同的、更合理的、更現(xiàn)代的默認行為。你不需要啟用大多數(shù)你已經(jīng)設(shè)置過的默認行為,因為這些已經(jīng)為你啟用了。這個大版本跳躍為我們一直以來的工作方式和未來可以做的事情之間設(shè)定了一個界限。
硬核老王:可以理解為,Perl 是一個 Perl 5 兄弟們親手打下的家族企業(yè),而 Perl 6 是外面請來的職業(yè)經(jīng)理人,結(jié)果經(jīng)理人要對家族企業(yè)采用現(xiàn)代化管理,差點雞飛蛋打。現(xiàn)在好了,Perl 6 分家出去單過了,親兒子 Perl 7 準備重振家業(yè)。
請記住,Perl 是一門“按我的意思做”的語言,其默認行為可能就是你想要的。在 Perl 4 和 Perl 5 的早期,這很容易。但是,幾十年過去了,現(xiàn)在的世界更加復(fù)雜了。我們不斷地往其中添加編譯指令,但由于 Perl 對向后兼容的承諾,我們不能改變其默認行為。現(xiàn)在,我們又回到了 C 語言的舊時代,在開始做一些事情之前,我們必須包含大量的例行模板:
use utf8;use strict;use warnings;use open qw(:std :utf8);no feature qw(indirect);use feature qw(signatures);no warnings qw(experimental::signatures);這一點在 v5.12 及以后的版本中稍有好轉(zhuǎn),因為我們可以通過使用設(shè)置最低版本來免去設(shè)置 strict 指令:
use v5.32;use utf8;use warnings;use open qw(:std :utf8);no feature qw(indirect);use feature qw(signatures);no warnings qw(experimental::signatures);硬核老王:不可否認,Perl 二十年前如日中天,那個時候,不說終端運行的腳本,就是互聯(lián)網(wǎng)上主要的互動程序(CGI),也幾乎全是用 Perl 寫的。但是在風(fēng)口時代它的主要精力都在折騰 Perl 6,而 Perl 5 系列不但很多地方顯得老舊,歷史包袱也過重。向前不能保持原有的精巧習(xí)慣,向后不能跟上現(xiàn)代的軟工理念。
Perl 7 是一個新的機會,即使不指定版本,也可以把其中的一些行為變成默認行為。Perl 5 仍然有它的極度向后兼容的行為,但 Perl 7 將以最小的歷史包袱獲得現(xiàn)代實踐的新生。我個人希望 簽名(signatures)功能能夠入選到新的版本,但要讓 Unicode 成為默認行為還有很多工作要做,所以你可能需要保留其中的一些編譯指令:
use utf8;use open qw(:std :utf8);你可能會丟掉一些你肯定不應(yīng)該使用的垃圾功能,比如間接對象表示方式。Larry Wall 說他必須為 C++ 程序員做點什么。
my $cgi = new CGI;??# 間接對象,但在 Perl 7 不這樣用了my $cgi = CGI->new; # 直接對象但是,這個功能在 Perl 7 中并沒有真正消失。它在 v5.32 中已經(jīng)可以 通過設(shè)置關(guān)閉 了,但現(xiàn)在有了不同的默認行為。
Perl 5 怎么了?
沒有人要把 Perl 5 從你身邊奪走,它將進入長期維護模式 —— 比最新用戶版本的兩年滾動支持時間的兩倍都要長得多。這可能要從現(xiàn)在支持到十年后了(或者說 Perl 5 已經(jīng)人過中年了)。
硬核老王:這樣挺好,舊時代的繼續(xù)留在舊時代,新生代的輕裝前行。
什么時候開始?
這項工作現(xiàn)在就在進行,但你不需要擔(dān)心,大約六個月后,才會出現(xiàn)第一個候選版本。我們的目標是在明年發(fā)布 Perl 7.0 的用戶版本,并在這期間發(fā)布一些候選版本。
這也是一個容易實現(xiàn)的承諾,因為 Perl 7 基本上就是 v5.32,默認行為不同而已。沒有大的重寫,也沒新的功能,盡管目前一些實驗性的功能可能會穩(wěn)定下來(請把“簽名”功能選入!)。
CPAN 怎么辦?
CPAN( 綜合 Perl 檔案網(wǎng)(Comprehensive Perl Archive Network))有近 20 萬個模塊。人們正在使用的處于維護狀態(tài)的模塊應(yīng)該還能用,對于其它的模塊會有一個兼容模式。記住 Perl 7 主要是 v5.32,所以你應(yīng)該不需要修改太多。
你可能不知道 Perl5 Porters 幾乎會針對所有的 CPAN 模塊測試其新版本。這個用于檢查更改可能對 Perl 社區(qū)產(chǎn)生影響的工具已有很長的歷史了。作為一個模塊的作者,我經(jīng)常會收到來自不同人的消息,主要是 Andreas Koenig 或 Slaven Rezi?,他們說我的模塊中的一些奇怪的東西可能會在新的 Perl 版本中出問題。通常,我總是需要更新一些東西來解決這些問題。追蹤現(xiàn)有代碼中的問題已經(jīng)不是問題了。修復(fù)代碼應(yīng)該不會那么繁瑣,因為它仍然是 Perl 5,但有更好的實踐。
硬核老王:知道當年 Perl 為什么強悍嗎?有一個主要的原因是,Perl 有個無所不包的 CPAN 倉庫。
會不會有一個單獨的 Perl 7 的 CPAN?沒有人說不能有,但是在跳轉(zhuǎn)到 Perl 7 的過程中,開發(fā)人員不希望重做已經(jīng)可以工作的東西。這個變化應(yīng)該是可以控制的,盡量減少副作用。
另外,PAUSE( Perl 作者上載服務(wù)器(Perl Authors Upload Server))在過去的幾年里得到了不少人的喜愛。這使他們可以更容易適應(yīng)未來的需要。從事這方面工作的人都是經(jīng)驗豐富、才華橫溢的人,他們讓代碼庫變得更加容易管理。
為什么要跳到大版本?
一個主要版本可以與用戶訂立不同的契約。跳轉(zhuǎn)到一個主要版本可以用新的默認行為來改變這個契約,即使這與過去有沖突。如果你愿意的話,總會有辦法將所有這些設(shè)置都重置為舊的 Perl 5 默認行為。不過在語法和行為上,Perl 7 的代碼(大部分)仍然是 v5.32 的代碼。
Sawyer 談到了 Perl 用戶的三個主要細分市場:
- 絕不會改變他們的代碼的人
- 使用新功能的人
- 從零開始的人
Perl 5 的社會契約是 極度后向兼容(extreme backward compatibility),并且在這方面取得了驚人的成功。問題是,極度后向兼容對那些不會更新代碼的人有效,但對另外兩部分人沒有幫助。要使用新功能的人不得不在每個程序中加入挺長的例行模板部分,而從零開始的人們則想知道為什么他們創(chuàng)建一個程序就必須包含這么多,才能不讓 StackOverflow 上的人因為少了那些編譯指令而呵斥他們。
硬核老王:迎合新血才是最重要的,讓舊代碼和舊人們自己過吧。
為什么是 7,而不是 6?
這個答案分為兩部分。 首先,“Perl 6” 已經(jīng)被現(xiàn)在稱為 Raku 的產(chǎn)品所采用。很久以前,我們認為這件非常雄心勃勃的重寫工作將取代 v5.8。但最后,這件事并沒有發(fā)生,Perl 語言依舊繼續(xù)過著自己的生活。
因此,下一個可用數(shù)字為 7。如此而已。這只是序列中的下一個基數(shù)。版本跳躍這事情并不稀奇:PHP 直接從 5 升到了 7 —— 難道是我們從 PHP 社區(qū)偷學(xué)到的跳躍技能?看看一下歷史上的其他奇怪的版本變化:
- 從 Solaris 2.6 到 Solaris 7
- 從 Java 1.4 至 Java 5
- 從以 Postgres 9.x 為主要版本變成了以 Postgres 10 為主要版本
- Windows 3.1 至 Windows 95(98、ME、2000、XP、Vista、7、8、10)
- TeX(每個新版本都更趨近于圓周率 π )
至少我們沒跳到 Perl 34!
硬核老王:言外之意,你們跳得,我也跳得~而且,你們不覺得版本 6 這個數(shù)字有點不吉利么,而版本 7 這個數(shù)字就好多了。
有什么消失了么?
消失的東西不多。有些東西在默認情況下會被禁用,但同樣,這本質(zhì)上是調(diào)整旋鈕和撥盤指向不同地方的 Perl 5.32。即使在 Perl 5 的土地上,有些東西你也應(yīng)該學(xué)會不需要。以下這些都是第一輪變化的可能目標:
- 間接對象符號
- 裸詞文件柄(標準文件柄除外)
- 偽多維數(shù)組和哈希值(老的 Perl 4 花招)
- Perl 4 風(fēng)格的原型定義(使用 :prototype() 代替)
硬核老王:是該學(xué)會放棄了,又不是區(qū)塊鏈,什么舊的都不能丟下。
增加了什么?
增加的也不多。Perl 7 主要是 Perl v5.32,但默認啟用了所有的功能。你不需要做任何事情就可以獲得大多數(shù)新功能,比如 postfix 解引用 ,新的 isa 操作符 ,或者其他一些功能。這就是一個主要版本可以提供的新社會契約的好處。這是一個硬邊界,新功能可以在一邊默認存在,而不干擾另一邊。
硬核老王:多增加點新的編程語言技能吧!哪怕是語法糖。
那我現(xiàn)在應(yīng)該做什么?
如果你需要一個舊版的 Perl 來運行你的代碼,你繼續(xù)好了。那些舊版本是不會消失的。就像 Perl 5.6 到現(xiàn)在仍然可以使用,如果那是你希望運行的版本的話。
如果你的代碼在那些約束和警告下運行沒有問題,而且你使用的是現(xiàn)代 Perl 風(fēng)格,可能你大部分代碼都不用動。如果你有一些裸詞的文件柄,就開始轉(zhuǎn)換這些,間接對象符號也一樣。
如果你的代碼比較凌亂,你也不是沒有機會。在從 Perl 5 到 7 的過渡過程中,會有兼容模式來幫助你(但不是 Perl 5 到 8)。一個編譯指令可以把那些旋鈕和撥盤設(shè)置回舊的設(shè)置(但這最多也就是一個版本的事情)。
use compat::perl5;??# 行為類似 Perl 5 的默認行為對于模塊來說,還有一些問題需要解決,但也會有一個兼容機制來解決這些問題。
硬核老王:代碼實在寫的爛(辯解:我這不是爛,是 Perl 的古怪傳統(tǒng)),那沒辦法,只能給你一次機會。
好消息是,這些東西已經(jīng)被主要的 Perl 利益相關(guān)者在生產(chǎn)環(huán)境中進行了測試。這不是紙上談兵:我們已經(jīng)在做了,一些粗陋的地方正在調(diào)整打磨。
而且,v5.32 中已經(jīng)有了一些這些旋鈕和撥盤,比如,你可以這樣關(guān)閉間接對象表示:
no feature qw(indirect);預(yù)期會有更多的旋鈕或撥盤,或許像這樣:
no multidimensional;no bareword::filehandle;我在《 為 Perl 7 做準備 》一書中收集了所有這些信息,這是我通過 Perl School 和 LeanPub 提供的最新產(chǎn)品。
硬核老王:本文作者 brian d foy 也是《 精通 Perl(Mastering Perl)》 的作者,我是這本書是中文譯者之一。
一句話總結(jié)
Perl 7 是 v5.32,設(shè)置不同而已。你的代碼如果不是亂七八糟的,應(yīng)該可以用。預(yù)計一年內(nèi)會有用戶發(fā)布。
硬核老王:作為一個老 Perl 程序員,這個消息讓我又動心了,認真考慮是不是再投回 Perl 的懷抱,哦不,是 Perl 7 的懷抱。
點擊“了解更多”可訪問文內(nèi)鏈接
總結(jié)
以上是生活随笔為你收集整理的perl数组硬引用_Perl 继续前行,Perl 7 将是下一代(硬核老王点评版)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华立学院计算机组成原理考试,广东工业大学
- 下一篇: 中琪家宝贝网名怎么起?