perl數組硬引用_Perl 繼續前行,Perl 7 將是下一代(硬核老王點評版)

54bd2dbbaee8edb0fb3e5007e138996a.png

它是默認帶有現代行為的 Perl 5,將為以后更大的變化奠定基礎。

  • 來源:https://linux.cn/article-12349-1.html
  • 作者:Brian D Foy
  • 譯者:Xingyu.Wang

(本文字數:5043,閱讀時長大約:8 分鐘)

近日 召開的 Perl 大會是在云端舉辦的 ,在會上 Sawyer X 宣布 Perl 有了新的前進計劃。Perl 7 的開發工作已經在進行中,但不會有代碼或語法上的巨大變化。它是默認帶有現代行為的 Perl 5,將為以后更大的變化奠定基礎。

硬核老王:在經歷了 Perl 6 失敗的巨大痛苦之后,Perl 社區終于從陰霾的心情中走出了。但是失去的黃金 20 年卻是挽回不了了,否則別說 PHP,都不會有 Python 什么事。我認為,Perl 7 是一條自我救贖之路,應該,或許,會有新的 Perl 7、Perl 8 吧……

Perl 7 基本上是 Perl 5.32

Perl 7.0 將會是 Perl 5 系列的 5.32,但會有不同的、更合理的、更現代的默認行為。你不需要啟用大多數你已經設置過的默認行為,因為這些已經為你啟用了。這個大版本跳躍為我們一直以來的工作方式和未來可以做的事情之間設定了一個界限。

硬核老王:可以理解為,Perl 是一個 Perl 5 兄弟們親手打下的家族企業,而 Perl 6 是外面請來的職業經理人,結果經理人要對家族企業采用現代化管理,差點雞飛蛋打。現在好了,Perl 6 分家出去單過了,親兒子 Perl 7 準備重振家業。

請記住,Perl 是一門“按我的意思做”的語言,其默認行為可能就是你想要的。在 Perl 4 和 Perl 5 的早期,這很容易。但是,幾十年過去了,現在的世界更加復雜了。我們不斷地往其中添加編譯指令,但由于 Perl 對向后兼容的承諾,我們不能改變其默認行為。現在,我們又回到了 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 及以后的版本中稍有好轉,因為我們可以通過使用設置最低版本來免去設置 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 二十年前如日中天,那個時候,不說終端運行的腳本,就是互聯網上主要的互動程序(CGI),也幾乎全是用 Perl 寫的。但是在風口時代它的主要精力都在折騰 Perl 6,而 Perl 5 系列不但很多地方顯得老舊,歷史包袱也過重。向前不能保持原有的精巧習慣,向后不能跟上現代的軟工理念。

Perl 7 是一個新的機會,即使不指定版本,也可以把其中的一些行為變成默認行為。Perl 5 仍然有它的極度向后兼容的行為,但 Perl 7 將以最小的歷史包袱獲得現代實踐的新生。我個人希望 簽名(signatures)功能能夠入選到新的版本,但要讓 Unicode 成為默認行為還有很多工作要做,所以你可能需要保留其中的一些編譯指令:

use utf8;use open qw(:std :utf8);

你可能會丟掉一些你肯定不應該使用的垃圾功能,比如間接對象表示方式。Larry Wall 說他必須為 C++ 程序員做點什么。

my $cgi = new CGI;??# 間接對象,但在 Perl 7 不這樣用了my $cgi = CGI->new; # 直接對象

但是,這個功能在 Perl 7 中并沒有真正消失。它在 v5.32 中已經可以 通過設置關閉 了,但現在有了不同的默認行為。

Perl 5 怎么了?

沒有人要把 Perl 5 從你身邊奪走,它將進入長期維護模式 —— 比最新用戶版本的兩年滾動支持時間的兩倍都要長得多。這可能要從現在支持到十年后了(或者說 Perl 5 已經人過中年了)。

硬核老王:這樣挺好,舊時代的繼續留在舊時代,新生代的輕裝前行。

什么時候開始?

這項工作現在就在進行,但你不需要擔心,大約六個月后,才會出現第一個候選版本。我們的目標是在明年發布 Perl 7.0 的用戶版本,并在這期間發布一些候選版本。

這也是一個容易實現的承諾,因為 Perl 7 基本上就是 v5.32,默認行為不同而已。沒有大的重寫,也沒新的功能,盡管目前一些實驗性的功能可能會穩定下來(請把“簽名”功能選入!)。

CPAN 怎么辦?

CPAN( 綜合 Perl 檔案網(Comprehensive Perl Archive Network))有近 20 萬個模塊。人們正在使用的處于維護狀態的模塊應該還能用,對于其它的模塊會有一個兼容模式。記住 Perl 7 主要是 v5.32,所以你應該不需要修改太多。

你可能不知道 Perl5 Porters 幾乎會針對所有的 CPAN 模塊測試其新版本。這個用于檢查更改可能對 Perl 社區產生影響的工具已有很長的歷史了。作為一個模塊的作者,我經常會收到來自不同人的消息,主要是 Andreas Koenig 或 Slaven Rezi?,他們說我的模塊中的一些奇怪的東西可能會在新的 Perl 版本中出問題。通常,我總是需要更新一些東西來解決這些問題。追蹤現有代碼中的問題已經不是問題了。修復代碼應該不會那么繁瑣,因為它仍然是 Perl 5,但有更好的實踐。

硬核老王:知道當年 Perl 為什么強悍嗎?有一個主要的原因是,Perl 有個無所不包的 CPAN 倉庫。

會不會有一個單獨的 Perl 7 的 CPAN?沒有人說不能有,但是在跳轉到 Perl 7 的過程中,開發人員不希望重做已經可以工作的東西。這個變化應該是可以控制的,盡量減少副作用。

另外,PAUSE( Perl 作者上載服務器(Perl Authors Upload Server))在過去的幾年里得到了不少人的喜愛。這使他們可以更容易適應未來的需要。從事這方面工作的人都是經驗豐富、才華橫溢的人,他們讓代碼庫變得更加容易管理。

為什么要跳到大版本?

一個主要版本可以與用戶訂立不同的契約。跳轉到一個主要版本可以用新的默認行為來改變這個契約,即使這與過去有沖突。如果你愿意的話,總會有辦法將所有這些設置都重置為舊的 Perl 5 默認行為。不過在語法和行為上,Perl 7 的代碼(大部分)仍然是 v5.32 的代碼。

Sawyer 談到了 Perl 用戶的三個主要細分市場:

  • 絕不會改變他們的代碼的人
  • 使用新功能的人
  • 從零開始的人

Perl 5 的社會契約是 極度后向兼容(extreme backward compatibility),并且在這方面取得了驚人的成功。問題是,極度后向兼容對那些不會更新代碼的人有效,但對另外兩部分人沒有幫助。要使用新功能的人不得不在每個程序中加入挺長的例行模板部分,而從零開始的人們則想知道為什么他們創建一個程序就必須包含這么多,才能不讓 StackOverflow 上的人因為少了那些編譯指令而呵斥他們。

硬核老王:迎合新血才是最重要的,讓舊代碼和舊人們自己過吧。

為什么是 7,而不是 6?

這個答案分為兩部分。 首先,“Perl 6” 已經被現在稱為 Raku 的產品所采用。很久以前,我們認為這件非常雄心勃勃的重寫工作將取代 v5.8。但最后,這件事并沒有發生,Perl 語言依舊繼續過著自己的生活。

因此,下一個可用數字為 7。如此而已。這只是序列中的下一個基數。版本跳躍這事情并不稀奇:PHP 直接從 5 升到了 7 —— 難道是我們從 PHP 社區偷學到的跳躍技能?看看一下歷史上的其他奇怪的版本變化:

  • 從 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 這個數字有點不吉利么,而版本 7 這個數字就好多了。

有什么消失了么?

消失的東西不多。有些東西在默認情況下會被禁用,但同樣,這本質上是調整旋鈕和撥盤指向不同地方的 Perl 5.32。即使在 Perl 5 的土地上,有些東西你也應該學會不需要。以下這些都是第一輪變化的可能目標:

  • 間接對象符號
  • 裸詞文件柄(標準文件柄除外)
  • 偽多維數組和哈希值(老的 Perl 4 花招)
  • Perl 4 風格的原型定義(使用 :prototype() 代替)

硬核老王:是該學會放棄了,又不是區塊鏈,什么舊的都不能丟下。

增加了什么?

增加的也不多。Perl 7 主要是 Perl v5.32,但默認啟用了所有的功能。你不需要做任何事情就可以獲得大多數新功能,比如 postfix 解引用 ,新的 isa 操作符 ,或者其他一些功能。這就是一個主要版本可以提供的新社會契約的好處。這是一個硬邊界,新功能可以在一邊默認存在,而不干擾另一邊。

硬核老王:多增加點新的編程語言技能吧!哪怕是語法糖。

那我現在應該做什么?

如果你需要一個舊版的 Perl 來運行你的代碼,你繼續好了。那些舊版本是不會消失的。就像 Perl 5.6 到現在仍然可以使用,如果那是你希望運行的版本的話。

如果你的代碼在那些約束和警告下運行沒有問題,而且你使用的是現代 Perl 風格,可能你大部分代碼都不用動。如果你有一些裸詞的文件柄,就開始轉換這些,間接對象符號也一樣。

如果你的代碼比較凌亂,你也不是沒有機會。在從 Perl 5 到 7 的過渡過程中,會有兼容模式來幫助你(但不是 Perl 5 到 8)。一個編譯指令可以把那些旋鈕和撥盤設置回舊的設置(但這最多也就是一個版本的事情)。

use compat::perl5;??# 行為類似 Perl 5 的默認行為

對于模塊來說,還有一些問題需要解決,但也會有一個兼容機制來解決這些問題。

硬核老王:代碼實在寫的爛(辯解:我這不是爛,是 Perl 的古怪傳統),那沒辦法,只能給你一次機會。

好消息是,這些東西已經被主要的 Perl 利益相關者在生產環境中進行了測試。這不是紙上談兵:我們已經在做了,一些粗陋的地方正在調整打磨。

而且,v5.32 中已經有了一些這些旋鈕和撥盤,比如,你可以這樣關閉間接對象表示:

no feature qw(indirect);

預期會有更多的旋鈕或撥盤,或許像這樣:

no multidimensional;no bareword::filehandle;

我在《 為 Perl 7 做準備 》一書中收集了所有這些信息,這是我通過 Perl School 和 LeanPub 提供的最新產品。

硬核老王:本文作者 brian d foy 也是《 精通 Perl(Mastering Perl)》 的作者,我是這本書是中文譯者之一。

一句話總結

Perl 7 是 v5.32,設置不同而已。你的代碼如果不是亂七八糟的,應該可以用。預計一年內會有用戶發布。

硬核老王:作為一個老 Perl 程序員,這個消息讓我又動心了,認真考慮是不是再投回 Perl 的懷抱,哦不,是 Perl 7 的懷抱。

點擊“了解更多”可訪問文內鏈接

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533145.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533145.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533145.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

html文檔加載,html加載

SQL中進行Join操作時,可以按照以下步驟進行優化。為了方便說明,設表A和表B,且A、B表都有個名為name的列。對A、B表進行join操作。 估計表的大小。 根據每次加載數據的大小,來估計表大小。 也可以在Hive的數據庫存儲路徑下直接查看…

spark將rdd轉為string_八、Spark之詳解Tranformation算子

RDD中的所有轉換(Transformation)算子都是延遲加載的,也就是說,它們并不會直接計算結果。相反的,它們只是記住這些應用到基礎數據集(例如一個文件)上的轉換動作。只有當發生一個要求返回結果給Driver的動作時,這些轉換才會真正運行…

html的過渡屬性,CSS3屬性transition(過渡)多屬性詳解

transform呈現的是一種變形結果,而transition呈現的是一種過渡,通俗點說就是一種動畫轉換過程,如漸顯、漸弱、動畫快慢等。transition和transform是兩種不同的動畫模型。transition屬性是一個簡寫屬性,用于設置四個過渡屬性transi…

2021年呼和浩特高考段考成績查詢,2019屆呼和浩特市高三段考成績排名分析

原標題:2019屆呼和浩特市高三段考成績排名分析不忘初心 天道酬勤╳?校對:劉姝坤?文稿:王濤老師?聲明:如有轉載請聯系并注明出處好樂(巨人)教育2019高三普文理集訓段考班火熱招生中全呼市唯一一家吃住學一體封閉式管理的學校唯一…

dj打碟怎么學_學DJ要不要去培訓學校?

酒吧學DJ打碟他有很多種的說法,有些酒吧他是自己招學生,當這樣的酒吧在現今是挺少的,也有,但要求很高。還有一種就是說你自己在酒吧里上班的人自己招私人徒弟什么的,那也是就學DJ打碟,那一搬酒吧都是怎么學…

html設置table表格的弧度,用CSS3和table標簽實現一個圓形軌跡的動畫的示例代碼

html:其實就是根據table標簽把幾個實心圓div進行等邊六角形的排布,并放入一個div容器中,然后利用CSS3的循環旋轉的動畫效果對最外層的div容器進行自轉實現,當然不要忘了把div容器的外邊框設置圓形弧度的。BMI色盲色弱心率開始測試…

ios時間相差多少天_上海自駕拉薩,走川進青出,應如何規劃線路?需要多少天時間?...

線路總覽上海自駕西藏拉薩,川進青出,全程約8000公里,需用時18~25天,行程主要分為4段:1、進藏之前:上海—成都,2000公里,3~5天;2、川藏線進:成都—拉薩&#x…

儒林外史每回概括簡短10字_早安心語正能量經典短句 一句話的簡短勵志語錄

1、人生就兩件事, 一件是拿事兒把時間填滿,另一件是拿感覺把心填滿 。早安!早安心語正能量經典短句 一句話的簡短勵志語錄點擊添加圖片描述(最多60個字)2、憑著一股子信念往前沖,到哪兒都是優秀的人。生活它從來不會允諾我們一份輕…

半個小時用計算機怎么算,CPA機考計算器操作指南,掌握這些快捷鍵,考試“延長”半小時!...

原標題:CPA機考計算器操作指南,掌握這些快捷鍵,考試“延長”半小時!注冊會計師考試就是一場在有限的時間內得分最多的比拼游戲!不僅要求考生學習各種專業知識,同時還需要掌握一定的策略。例如注會考試采用機…

c均值聚類matlab程序_機器學習筆記-9-聚類

1 K-means算法K-means是最普及的聚類算法,算法接受一個未標記的數據集,然后將數據聚類成不同的組。它是一個迭代算法,假設我們想要將數據聚類成 n 個組,其方法為:選擇K個隨機的點,稱為聚類中心對于數據集中的每一個數據…

php井字游戲代碼_PHP初級筆試題:Tic-Tac-Toe(n階井字棋)判斷勝負

//Tic-Tac-Toe$n 5;//五階棋盤$res array();function check($arr){$n $GLOBALS[n];$res $GLOBALS[res];//已經下過這一步,返回false;沒有,賦值if (isset($res[$arr[1]][$arr[2]])) {return false;} else {$res[$arr[1]][$arr[2]] $arr[0…

js與html編碼不同,js與html中unicode編碼的使用

【轉】javascript和html中unicode編碼和字符轉義的詳解不是十分理解unicode和html轉義的情況下,可能會誤用,所以下面會對它們再做比較容易理解的解釋: 1.html中的轉義:在html中如果遇到轉義字符(如“ ”),不管你的頁面字符編碼是utf-8 ...javascript和html中unicode編碼和字符轉…

g標簽 怎么設置svg_SVG g元素

SVG 元素SVG 元素用于將SVG形狀分組在一起。分組后,您可以像變形單個形狀一樣變換整個形狀。與 不能單獨成為轉換目標的嵌套 元素相比,這是一個優勢。您還可以設置分組元素的樣式,并像對待單個元素一樣重復使用它們。元素g是用來組合對象的容…

html和css哪個優先,CSS3 | 樣式和優先級

css3一般介紹:CSS注釋:/*CSS*/CSS長度單位:1.px(像素)2.em(倍數,一般用于文字)一、HTML嵌套CSS3樣式:1.外部(推薦)例如HTML文件為index.html將樣式放入另一文件中,index.css以上兩個文件放入同一文件夾下2.…

java上傳視頻到七牛云_Java進階學習:將文件上傳到七牛云中

Java進階學習:將文件上傳到七牛云中通過本文,我們將講述如何利用七牛云官方SDK,將我們的本地文件傳輸到其存儲空間中去。JavaSDK:https://developer.qiniu.com/kodo/sdk/1239/java#server-upload官方SDK:https://devel…

計算機網絡討論4,計算機網絡實驗四

實驗四IEEE 802.3協議分析和以太網一、實驗目的1、分析802.3協議2、熟悉以太網幀的格式二、實驗環境與因特網連接的計算機網絡系統;主機操作系統為windows;Ethereal、IE 等軟件。三、實驗步驟(注:本次實驗先完成前面的“1 俘獲并分析以太網幀…

rust新版組隊指令_Rust最新控制臺命令2017

物品名稱物品代碼電池battery.small骨頭碎片bone.fragments空的豆罐頭can.beans.empty空的金槍魚罐頭can.tuna.empty攝像頭cctv.camera木炭charcoal煤coal石油crude.oil炸藥explosives動物脂肪fat.animal火藥gunpowder高級金屬礦hq.metal.ore金屬碎片metal.fragments金屬礦meta…

python實現mini-batch_Mini-Batch 、Momentum、Adam算法的實現

def random_mini_batches(X,Y,mini_batch_size64,seed0):"""從(X,Y)中創建一個隨機的mini-batch列表參數:X - 輸入數據,維度為(輸入節點數量,樣本的數量)Y - 對應的是X的標簽,【1 | 0】(藍|紅)&#xf…

html5+shim腳本,HTML5探秘:用requestAnimationFrame優化Web動畫

requestAnimationFrame是什么?在瀏覽器動畫程序中,我們通常使用一個定時器來循環每隔幾毫秒移動目標物體一次,來讓它動起來。如今有一個好消息,瀏覽器開發商們決定:“嗨,為什么我們不在瀏覽器里提供這樣一個…

計算機科學與技術的專業論述,關于計算機科學專業的論文題目 計算機科學專業論文題目怎樣定...

【100道】關于關于計算機科學專業的論文題目匯總,作為大學生的畢業生應該明白了計算機科學專業論文題目怎樣定,選一個好的題目后續的計算機科學專業論文寫作起來會更輕松!一、比較好寫的計算機科學專業論文題目:1、計算機科學與技術專業應用型人才培養改革調研分析—…