銀川智虎網絡科技有限公司 - 為(wèi)你思考,為(wèi)你實現!為(wèi)客戶創造與傳遞品牌價值是我們的最終使命!
羽之科網絡微信公衆号 掃一(yī)掃關注
tel-icon全國(guó)服務熱線:0951-5137001,18295277030
掃一(yī)掃關注羽之科網絡微信公衆号

Erlang 二十年(nián),如何在編程語言中占據一(yī)席之地?

分類:網站優化   作者:小(xiǎo)羽   發布時間:2019-08-02 09:18:46   點擊次數:1194

1998 年(nián)開(kāi)源發布的 Erlang 項目,在全球範圍内隻是個(gè)小(xiǎo)衆編程語言。


根據 TIOBE 最新發布的語言排行榜,Erlang 僅排名在第 65 位,市(shì)場份額占有小(xiǎo)于 0.1%。但是作為(wèi)一(yī)門(mén)函數編程語言,它擁有著(zhe)強大的并行處理能(néng)力和容錯(cuò)機(jī)制,簡單好用且易學。最開(kāi)始,Erlang 之父 Joe Armstrong 編寫的初衷針對的是類似于電(diàn)話交換機(jī)那樣的高(gāo)可用性、高(gāo)可靠性系統,但後來卻成就(jiù)了可靠性達到(dào) 99.9999999% 的目前世界上(shàng)最複雜(zá)的 ATM 交換機(jī)!


須臾二十載,如今的 Erlang 項目仍然煥發著(zhe)生(shēng)機(jī),并在技(jì)術(shù)淘汰中穩穩站住了腳跟。那麽 Erlang 在這些年(nián)中經曆了哪些發展階段?Erlang 語言的知識階梯如何影響了對它的采用?Erlang 及其社區未來的發展方向是怎樣的?......下(xià)面就(jiù)讓我們一(yī)探究竟。


聲明:本文已獲作者 Fred T-H 翻譯授權。


以下(xià)為(wèi)譯文:


大約在 10 年(nián)前,我加入了Erlang社區,當時正值Erlang語言的第一(yī)個(gè)炒作階段。我們都被告知,Erlang語言代表著(zhe)并發性和并行性開(kāi)發的未來,因為(wèi)它能(néng)夠以最輕松和最快速的方式完成開(kāi)發。你還(hái)可以得到(dào)免費(fèi)的Erlang分發包,因為(wèi)它已經變成了一(yī)個(gè)開(kāi)源軟件(jiàn)。在那個(gè)年(nián)代,一(yī)切都開(kāi)始變得不可思議。虛拟機(jī)也剛剛獲得了SMP支持,而在此之前,要想真正利用同一(yī)台計算(suàn)機(jī)上(shàng)的所有CPU,你必須在那台機(jī)器(qì)運行多(duō)個(gè)虛拟機(jī)。


在這篇文章中,我想先花點時間對這十年(nián)的大部分時間作個(gè)反思。然後我會(huì)介紹一(yī)些這期間發生(shēng)在Erlang上(shàng)的事(shì)情,例如炒作階段對Erlang的影響?Erlang語言的知識階梯如何影響了對它的采用?以及我在Erlang社區的十年(nián)中自(zì)身發生(shēng)了什麽變化?最後,我将探讨一(yī)下(xià)我認為(wèi)Erlang及其社區的發展方向。


炒作階段


炒作周期(或技(jì)術(shù)成熟度曲線)在一(yī)個(gè)産品或技(jì)術(shù)的生(shēng)命周期中引入了“階段”這個(gè)概念。這是一(yī)個(gè)營銷概念,而不是一(yī)個(gè)科學概念,但是用它來描述事(shì)情的發展往往會(huì)很有用。而我最感興趣的部分是“炒作階段”,它就(jiù)像一(yī)股發生(shēng)在編程社區的淘金熱。你可能(néng)見(jiàn)過一(yī)個(gè)或多(duō)個(gè)這樣的炒作階段,通(tōng)常他們似乎都依附于某個(gè)殺手級應用程序,吸引著(zhe)每個(gè)人蜂擁而至。


我能(néng)想到(dào)的“炒作”的例子有:炒作Ruby on Rails的“如何在 15 分鍾内構建一(yī)個(gè)博客引擎”的視頻(https://www.youtube.com/embed/Gzj723LkRJY,其中的“看(kàn)看(kàn)我沒有做的所有事(shì)情!”仍然是一(yī)句有趣的話),炒作Kubernetes 的“在Kubernetes下(xià)使用Go語言”的文章(Kubernetes在此以前已經有了大量使用,但在那之後确實進入了一(yī)個(gè)爆發期)。在某種程度上(shàng),對Elixir和Phoenix的炒作或許也可以列入這個(gè)名單。


在這樣的一(yī)個(gè)炒作階段,大量的新來者蜂擁而至,都想來看(kàn)看(kàn)能(néng)撈點什麽好處。有些人會(huì)留下(xià),但多(duō)數人會(huì)很快離開(kāi)。大多(duō)數人的停留時間可能(néng)隻是幾個(gè)月(yuè)或幾年(nián),能(néng)真正地安頓下(xià)來并且堅持幾十年(nián)的人非常少見(jiàn)。絕大多(duō)數人都是一(yī)些絡繹不絕的先期采用者,他們從(cóng)一(yī)個(gè)技(jì)術(shù)沖浪到(dào)另一(yī)個(gè)技(jì)術(shù),嗅探最佳的機(jī)會(huì),希望先行采用某種框架、語言或工(gōng)具包,來獲取一(yī)定的競争優勢。


所以通(tōng)常的想法是,首先你要擁有一(yī)個(gè)真正的殺手級應用程序,然後人們就(jiù)會(huì)湧入你的生(shēng)态系統。殺手級應用程序會(huì)驅動這股人潮,隻要你把它構造出來,人們就(jiù)會(huì)蜂擁而至。如果你能(néng)留住他們中的小(xiǎo)部分并保持他們的活躍度,那麽在可以預見(jiàn)的未來,你将會(huì)擁有一(yī)個(gè)活躍的社區。這用一(yī)種奇怪的方式,讓我想起了“雨随犁至”這個(gè)理論:


上(shàng)帝加快犁地的速度。……這是奇妙的“人類主宰自(zì)然”的理論假定,天上(shàng)的雲會(huì)分配取之不盡的雨水(shuǐ)…而[犁]是讓野蠻變成文明的工(gōng)具;能(néng)把沙漠變成農場或花園。……或者更簡潔的表達,就(jiù)是“雨随犁至”。


這一(yī)理論的基本前提是,通(tōng)過人類的定居和農業(yè)活動可以影響幹旱和半幹旱地區氣候的永久變化,使這些地區更加濕潤。這一(yī)理論在 19 世紀 70 年(nián)代被廣泛推廣,作為(wèi)美國(guó)大平原(曾被稱為(wèi)“美國(guó)大沙漠”)開(kāi)墾定居的理由。這也被用來證明南(nán)澳大利亞在同一(yī)時期的邊界土(tǔ)地上(shàng)小(xiǎo)麥種植的擴張是合理的。


如果我們能(néng)讓一(yī)個(gè)大項目一(yī)直進行,開(kāi)發人員(yuán)就(jiù)會(huì)出現,然後它就(jiù)會(huì)自(zì)我維系下(xià)去。我認為(wèi)這種觀點顯然是錯(cuò)誤的,因為(wèi)盡管Erlang在其最熱的炒作階段擁有了數十個(gè)殺手級應用程序,但是,它的社區仍然維持在很小(xiǎo)的規模。下(xià)面,就(jiù)讓我們看(kàn)看(kàn)在那個(gè)時代,Erlang都有哪些殺手級應用程序:


ejabberd(誕生(shēng)于 2002 年(nián),第一(yī)個(gè)穩定版本發布于 2005 年(nián)):它是迄今為(wèi)止最具可擴展性的主機(jī)聊天服務器(qì)之一(yī)(即使不是之最)。Ejabberd曾經是一(yī)個(gè)巨大的成功,在某種程度上(shàng)來說現在仍然是。到(dào)目前為(wèi)止,在StackOverflow上(shàng)仍然能(néng)看(kàn)到(dào)關于它的模塊的提問。在 2011 年(nián)左右,它衍生(shēng)出了MongooseIM分支,現在這兩個(gè)解決方案仍然處在維護中。


CouchDB(2005):是根據CAP定理,用Erlang編寫的第一(yī)個(gè)流行數據庫,也是當時新潮的多(duō)主文檔存儲解決方案之一(yī)。雖然現在MongoDB是該領域的王者,但CouchDB在存儲引擎方面仍然有其精神繼承者,最出名的是BarrelDB,它現在還(hái)在維護中。


RabbitMQ(2007):幾乎占據整個(gè)AMQP市(shì)場的一(yī)個(gè)消息隊列軟件(jiàn),它現在仍在用并且很有價值。在流式工(gōng)作負載方面,它經常被和Kafka一(yī)起讨論,盡管它們具有明顯不同的特性和用例。


Facebook Chat(2008):Facebook Chat的初始版本是用Erlang編寫的。由于許多(duō)内部因素,如系統穩定性的考慮,和内部C++工(gōng)程師(shī)的強勢地位,以及已經有了C++實現的一(yī)套解決方案等等,後來它用C++全部改寫。


WhatsApp( 2009 年(nián), 2014 年(nián)被收購):在Facebook的聊天系統擺脫了Erlang語言後,他們最終購買了WhatsApp這個(gè)衆所周知的隻用了 50 個(gè)工(gōng)程師(shī)開(kāi)發的服務于 9 億用戶的跨平台應用程序。它今天仍在使用,事(shì)實上(shàng),WhatsApp的開(kāi)發者決定比以前更加深入地參與Erlang和Elixir社區中。


Riak(2009):是分布式系統世界展現自(zì)己優勢的最佳例子之一(yī)。Riak是一(yī)個(gè)真正可靠的分布式鍵值數據庫店,它是Basho Technology公司開(kāi)發的一(yī)個(gè)當前仍在醫(yī)療保健系統和其他關鍵基礎設施中運行的NoSQL數據庫産品。在Basho Technology遭遇财務危機(jī)并被迫破産時(這在很大程度上(shàng)是因為(wèi)公司違反了信托責任,迅速走向了敗亡),Bet365 買下(xià)了它的所有知識産權,并優雅地将其開(kāi)放(fàng)源代碼,現在Riak數據庫仍然在開(kāi)源世界中運行,盡管它的支持力度和過去最好的時期比稍稍不如。


以上(shàng)提到(dào)的殺手級應該程序,很多(duō)都是在喬·阿姆斯特朗的《Erlang編程》一(yī)書問世的時候出現的。它們制造了一(yī)場對Erlang大量采用的完美風暴,同時也為(wèi)Erlang吸引了大量的旁觀者,甚至對黑(hēi)客新聞網站都産生(shēng)了明顯的影響,以至于它強制要求在某一(yī)天所有讨論都必須是關于Erlang的内部機(jī)制。


然而,喧嚣之後,留下(xià)來的人很少。


我認為(wèi),現在的殺手級應用程序的出現和過去相(xiàng)反,它是出于人們想在最初的炒作階段分一(yī)杯羹的貪婪。任何應用程序,總有一(yī)個(gè)弱小(xiǎo)的、早期的階段,有人嗅出了它技(jì)術(shù)的有趣之處,決定喜歡它,并且将它構建出來,如果碰巧它成了一(yī)個(gè)殺手級的應用程序,那麽就(jiù)會(huì)進入一(yī)個(gè)更大的炒作階段。人人都盼望從(cóng)天上(shàng)掉餡餅,一(yī)個(gè)成功的故事(shì)會(huì)培養更多(duō)的模仿者。另一(yī)個(gè)常見(jiàn)的現象是“重塑世界”階段,每個(gè)人都花時間重新實現現有的一(yī)切,所以你會(huì)看(kàn)到(dào)很多(duō)很多(duō)“與語言無關”的公告。


但是殺手級的應用程序本身從(cóng)來就(jiù)不能(néng)夠實現開(kāi)源語言的自(zì)我維系。其中一(yī)個(gè)有趣的結果是,像RabbitMQ和Ejabberd這樣的産品,盡管很受歡迎,但其用戶社區比貢獻者社區要大得多(duō)。成千上(shàng)萬的公司使用他們的産品,但他們不一(yī)定會(huì)參與到(dào)Erlang社區中來。


毫無疑問,部分原因在于Erlang的大多(duō)數殺手級應用程序都在專門(mén)的基礎設施中:你創建了一(yī)個(gè)其他人都可以使用的高(gāo)可靠性黑(hēi)盒組件(jiàn),如果它工(gōng)作得足夠好,他們就(jiù)不需要查看(kàn)盒子内部。現在好了,幾十個(gè)開(kāi)發人員(yuán)已經為(wèi)數千種其他産品和服務提供了基礎設施。而按照(zhào)定義,專業(yè)化的基礎設施是一(yī)個(gè)不需要大量人員(yuán)就(jiù)能(néng)産生(shēng)巨大影響的地方。所以它們的貢獻者群體和社區總是比靠近最終産品的群體和社區要小(xiǎo)得多(duō)。例如,擁有數不清的網頁開(kāi)發人員(yuán)的Web開(kāi)發框架,或者更通(tōng)用的基礎設施,都可以把它們用到(dào)小(xiǎo)規模的部署項目上(shàng),因為(wèi)任何企業(yè)都可能(néng)找到(dào)它們的用途。


但是,即使沒有這些因素,也很容易讓人覺得,Erlang錯(cuò)過了一(yī)個(gè)巨大的機(jī)會(huì),那就(jiù)是它在炒作階段沒有獲得更大的蛋糕份額。


知識階梯


我不想用諸如“過去可以發生(shēng)或者應該發生(shēng)”這樣的描述來做反事(shì)實推理。相(xiàng)反,我想挖掘我在Erlang社區多(duō)年(nián)的教學和寫作中所看(kàn)到(dào)的常見(jiàn)學習模式。這些也是我現在正在Elixir社區中看(kàn)到(dào)的模式,我覺得這可能(néng)是預示著(zhe)Elixir可能(néng)有著(zhe)相(xiàng)似未來的一(yī)種迹象。


我最鍾愛的一(yī)個(gè)理論是,像編程語言(及其生(shēng)态系統)這樣的技(jì)術(shù)主題具有多(duō)層複雜(zá)性,需要學習和發現各種概念。我第一(yī)次開(kāi)始表達這種理論是在Learn You Some Erlang的網站上(shàng),用一(yī)個(gè)我稱之為(wèi)Erlang第九圈的圖表。


我認為(wèi)學習一(yī)項技(jì)術(shù)并不是無休止的痛苦(至少,它不應該如此),這話是不是說得有點假心假意,我隻是喜歡雙關語。但簡單地說,對任何新技(jì)術(shù)的學習,通(tōng)常有一(yī)個(gè)更“核心”的主題路(lù)徑或次序,這樣就(jiù)有了“知識階梯”這樣的東西(xī),在這個(gè)知識階梯上(shàng),越有價值的知識/概念被放(fàng)得越高(gāo),也越難到(dào)達,所以實際情況是,到(dào)達越高(gāo)的地方的人會(huì)越來越少。


對Erlang來說, 我認為(wèi)它的“知識階梯”可能(néng)是這樣的:


函數式編程;


隔離進程和并發性;


可靠的并發性(links, monitors, timeouts);


OTP行為(wèi)模式和其他系統抽象;


如何構建OTP系統;


如何構建發布版本并處理其生(shēng)命周期;


如何保持系統始終在線,以及如何運作。


如果你是第一(yī)次接觸Erlang,并且從(cóng)一(yī)本初學者的書開(kāi)始學習,你可能(néng)會(huì)在第一(yī)級階梯上(shàng)花費(fèi)大量的時間:與函數式編程、不可變性、遞歸和類似的概念交朋友(yǒu)。遲早,你會(huì)接觸到(dào)并發性和并行性、進程和消息傳遞。在那之後,你開(kāi)始學習links和monitors進程監控,錯(cuò)誤處理,以及Erlang的内部機(jī)制。在Erlang的大炒作階段,第二級和第三級階梯成了最讓旁觀者驚歎的賣點。如果你必須學會(huì)一(yī)些在未來的項目中必備之知識,那就(jiù)是其中之一(yī)。


其他的梯級會(huì)在稍後跟進,尤其是OTP(第 4 級階梯),但前提是你堅持完成編程這一(yī)階梯。OTP被視為(wèi)Erlang的真正價值所在——并發性和函數式編程确實不錯(cuò),但是OTP代表的一(yī)般開(kāi)發框架是你必須堅持和使用的真正獨特的東西(xī)。很多(duō)人願意使用這些框架,了解它們所做的美好的抽象,但是對于如何正确地構建每件(jiàn)事(shì)情可能(néng)會(huì)感到(dào)有點困惑。


事(shì)實上(shàng),像Ejabberd這樣的應用程序的大部分開(kāi)發幾乎沒有突破第四級階梯。當時的生(shēng)态系統有點像蠻荒的西(xī)部,對于愛立信的員(yuán)工(gōng)和最有動力的自(zì)學者來說, OTP知識也就(jiù)是那麽一(yī)回事(shì)。大多(duō)數人隻有在有值得投入生(shēng)産的東西(xī)出現問題、并且想尋找更好的解決方法時,才有可能(néng)到(dào)達第五級。直到(dào) 2015 年(nián)或 2016 年(nián),當Relx的出現開(kāi)始讓整個(gè)發行體驗變得更容易時,第 6 級才被重視。第 7 級幾乎從(cóng)未到(dào)達,事(shì)實上(shàng),很多(duō)人都覺得不應該熱升級一(yī)個(gè)節點,理想情況下(xià),你也不會(huì)在生(shēng)産環境中使用SSH命令行進行調試操作。


在實踐中,并非每個(gè)人都會(huì)按照(zhào)相(xiàng)同的順序來學習所有這些知識,有些書會(huì)調換它們的次序(這讓我想到(dào)了Erlang and OTP in Action這本書)。我覺得這些次序都不是問題,“階梯”用在這裡(lǐ)隻是為(wèi)了說明問題。


社區波浪式向前發展。炒作階段會(huì)使一(yī)個(gè)社區的規模增加十倍甚至百倍,大多(duō)數人會(huì)好奇地看(kàn)一(yī)眼然後離開(kāi),所以一(yī)個(gè)社區中的大多(duō)數用戶傾向于停留在第一(yī)個(gè)梯級。少部分人會(huì)到(dào)達高(gāo)一(yī)級階梯,更少部分的人會(huì)到(dào)達更高(gāo)一(yī)級,依此類推,直到(dào)你擁有到(dào)達最高(gāo)階梯的内部專家圈為(wèi)止。


對于Erlang來說,我認為(wèi)前三個(gè)梯級可能(néng)是最容易到(dào)達的。第四個(gè)階梯花了幾年(nián)的時間來開(kāi)發,最終被認為(wèi)是有價值的。第五個(gè)階梯非常複雜(zá)。Erlang缺乏工(gōng)具和生(shēng)态系統,Erlang社區留下(xià)來的都是自(zì)己選擇的,願意忍受這種貧瘠環境的人,因此對新來者的困境不敏感。為(wèi)了保持這篇文章簡短(好吧(ba),長(cháng)而不是荒謬的長(cháng)),我就(jiù)不在此贅述了。


在任何情況下(xià),如果你是一(yī)個(gè)Elixir的用戶,你可能(néng)會(huì)看(kàn)到(dào)你在這個(gè)硬性定義的階梯上(shàng)的位置,你可以感覺到(dào)一(yī)個(gè)社區中的派系通(tōng)常都在那裡(lǐ)。很多(duō)人,可能(néng)他們隻是在Phoenix上(shàng)做得很好,很少能(néng)突破第四階梯,而且在可預見(jiàn)的将來,他們中的許多(duō)會(huì)一(yī)直停留在第三階梯或以下(xià)。在許多(duō)情況下(xià),這些情形都是對的。這裡(lǐ)我們隻是觀察,不作評判。作為(wèi)一(yī)個(gè)通(tōng)過了很多(duō)知識階梯的人(可能(néng)在這種環境中,我的頭上(shàng)還(hái)有一(yī)些知識階梯,比如“修補虛拟機(jī)”之類的),他們似乎錯(cuò)過了很多(duō)知識階梯,但坦率地說,那些東西(xī)對他們可能(néng)永遠(yuǎn)不會(huì)有用。


但所有這些都是說:作為(wèi)一(yī)個(gè)社區,我們可能(néng)會(huì)讓人們很難超越基本水(shuǐ)平,從(cóng)而使我們自(zì)己陷入困境。經驗教訓的學習是不可以一(yī)蹴而就(jiù)的,在某種程度上(shàng),Erlang社區是盲人在引導盲人,因為(wèi)它實在太小(xiǎo)了,沒有足夠的人來分享所有需要的經驗。今天的情況比較容易,如果你在一(yī)個(gè)炒作的周期之外,你很可能(néng)會(huì)找到(dào)好的幫助,因為(wèi)很少有人同時要求所有的幫助。


我想表達的是,如果明天Erlang有第二個(gè)炒作階段,我們會(huì)比上(shàng)一(yī)個(gè)炒作階段表現得更好。希望這些經驗,加上(shàng)Erlang和Elixir社區之間更好的合作,讓我們能(néng)夠接觸到(dào)更多(duō)的受衆,讓我們成功的機(jī)會(huì)加倍。


Erlang有哪些改變?


Erlang不是一(yī)具放(fàng)在一(yī)個(gè)裝滿甲醛的玻璃容器(qì)裡(lǐ)的屍體,等待在光(guāng)天化日之下(xià)被帶走——它一(yī)直在進化。部分原因是由于Elixir社區的壓力和需求,幸運的是,他們對自(zì)己的工(gōng)具的期望比Erlang用戶已經習慣的要高(gāo)。另外部分原因在于推動平台向前發展的實際工(gōng)業(yè)需求,而不像學術(shù)界,他們隻是按照(zhào)他們自(zì)己喜歡的方式推動事(shì)情向前發展。


以下(xià)是我能(néng)想到(dào)的一(yī)些改變,大家可能(néng)很高(gāo)興知道有些變化在 2009 年(nián)或更早的時候就(jiù)發生(shēng)了:


多(duō)核支持現在工(gōng)作得很好。最初支持2- 4 個(gè)内核的時候,開(kāi)發人員(yuán)經常碰到(dào)各種超出自(zì)己控制的瓶頸問題,後來就(jiù)可以很好地處理12- 16 個(gè)内核了。而現在我不太确定能(néng)支持的内核上(shàng)限是多(duō)少,但有一(yī)點我很确定,我寫的堆棧操作運行在超過 32 個(gè)内核的機(jī)器(qì)上(shàng)沒有任何問題。


Stacktrace異常跟蹤報(bào)告支持行号。回到(dào)沒有行号的年(nián)代幾乎是無法想象的,在那個(gè)年(nián)代,“寫簡短的自(zì)我描述的函數”不僅僅是一(yī)個(gè)設計問題,也是一(yī)個(gè)生(shēng)存問題。現在,你不再需要超自(zì)然的調試技(jì)能(néng),就(jiù)可以調試Erlang程序。


Unicode支持現在可以接受。string模塊包含最重要的算(suàn)法,Unicode模塊可以很好地處理大多(duō)數轉換和規範化,處理raw codepoint、utf-8、utf- 16 和utf- 32 的一(yī)般策略已經具備。本地化支持仍然缺乏,但現在一(yī)切都可行,諸如re(用于正則表達式)和所有更高(gāo)級别的文件(jiàn)處理代碼之類的模塊也可以很好地處理unicode。


支持映射(作為(wèi)HAMTs實現),具有明确的模式匹配語法。使用Dialyzer對其進行的類型分析也可以将其替換為(wèi)多(duō)個(gè)使用案例,在這些案例中,以前使用的記錄非常痛苦。


虛拟機(jī)中的時間處理機(jī)制是世界級的,在處理時間規整、各種類型的時鍾等問題時,都可以很好工(gōng)作。不過,時區和格式處理使用社區庫仍然更好一(yī)些。


添加了atomics、counters和persistent terms等高(gāo)性能(néng)工(gōng)具,以幫助改進所有增強可觀測性功能(néng)和較低(dī)級别核心庫的底層機(jī)制。


所有信号處理都是異步的,包括端口,大大減少了瓶頸。


編譯器(qì)正在重寫中,以便通(tōng)過SSA獲得更高(gāo)級别的分析和性能(néng)提高(gāo)。


運行NIF的髒調度器(qì)已經可用,使得與C甚至Rust代碼的集成變得簡單,同時支持IO密集型或CPU密集型工(gōng)作負載。因此,盡管該語言可能(néng)不會(huì)無限快,但它已經快過其它語言。在對運行時穩定性不造成太大影響的情況下(xià),為(wèi)獲得更高(gāo)性能(néng)的庫而停機(jī)比以往任何時候都容易。


内存分配和管理的各種改進。


更快速、更靈活的實時跟蹤和微觀狀态分析,以保證正确運行和性能(néng)調查。


更靈活的gen-statem OTP行為(wèi)模式,以實現能(néng)夠處理選擇性接收的有限狀态機(jī)。


新的改進的日志(zhì)框架,内置對結構化日志(zhì)的支持。


重寫crypto加密模塊以便使用NIF,而不是更複雜(zá)(通(tōng)常更新速度較慢(màn))的驅動程序。


使用NIF對文件(jiàn)驅動程序進行整體重寫,以獲得巨大的性能(néng)提升。


使用NIF對網絡驅動程序進行重寫的工(gōng)作正在進行,以獲得類似的性能(néng)提升。


對用于TLS處理的SSL應用程序進行整體重寫。這讓我想起我在HeloCu工(gōng)作的日子,通(tōng)過整體重寫使其與C++解決方案在延遲(可能(néng)慢(màn)5%)方面具有競争力,并且在可預測性方面總體上(shàng)要好得多(duō)(大約10- 30 倍的提升)。


ETS性能(néng)的主要改進。


我編寫了一(yī)本關于如何使用Erlang VM操作和調試生(shēng)産系統的手冊(https://erlang-in-anger.com/)。


全新的構建工(gōng)具(rebar3),與Erlang生(shēng)态系統的統一(yī)軟件(jiàn)包管理器(qì)集成。


在虛拟機(jī)上(shàng)還(hái)提供多(duō)種新的編程語言,具有可替換的庫用法。包括(但不限于)Elixir、Efen、LFE、Luerl、Clojerl,以及至少兩種使用Gleam和Alpaca進行類型推斷的語言。


其它更多(duō)針對核心Erlang分發包的内部和外部的改進。


如果你有興趣了解更多(duō)信息,你可以查看(kàn)版本發布說明的完整列表(https://www.erlang.org/news/tag/release)。但簡而言之,如果OTP 版本 13 到(dào) 16 的發布時間對愛立信(Ericsson)OTP團隊來說有點晚的話(我們現在已經是版本22!),那麽他們使用Erlang對他們的旗艦産品中所做的最新投資确實是顯而易見(jiàn)的。但即使在愛立信之外,一(yī)切都在發生(shēng)變化。Erlang社區,以及Elixir社區和運行在Erlang VM上(shàng)的其他語言的貢獻者,都聚集在一(yī)起建立了Erlang生(shēng)态系統基金會(huì),現在它擁有一(yī)個(gè)活躍的工(gōng)作組,幫助協調和解決有關構建和打包工(gōng)具、可觀察性工(gōng)作、安全性、培訓和采用等問題。


如果你像我一(yī)樣,在大炒作初期加入Erlang,但又(yòu)沒有像我一(yī)樣留下(xià)來,因為(wèi)你覺得很多(duō)東西(xī)不可用或太棘手,你可能(néng)想再試一(yī)次,因為(wèi)Erlang的語言的人類工(gōng)程學及其生(shēng)态系統已經大大改善。


Erlang将去向何方?


雖然沒有必要像 2007 年(nián)到(dào) 2009 年(nián)那樣突然出現大殺手級的應用程序,但這并不意味著(zhe)沒有任何項目顯示出這種希望。Erlang仍然是許多(duō)公司的基礎設施的不可缺失的部分,其最初的殺手級應用程序大多(duō)還(hái)在其上(shàng)運行。我們也有很多(duō)有趣的新應用,就(jiù)像每個(gè)BEAM配置文件(jiàn)顯示的那樣。我自(zì)己真的很喜歡基于屬性的測試等概念,并且Erlang和Elixir擁有世界上(shàng)最好的框架。盡管如此,迹象表明我們現在還(hái)沒有進入炒作階段。


會(huì)有另一(yī)個(gè)炒作階段嗎(ma)?也許有,也許沒有。你可以說,Elixir會(huì)有下(xià)一(yī)個(gè)炒作階段。生(shēng)态系統都有足夠的共同點,在一(yī)個(gè)地方學到(dào)的經驗教訓可以用到(dào)另一(yī)個(gè)地方。它們之間的相(xiàng)似之處多(duō)過不同之處。也許還(hái)有一(yī)個(gè)新的複興時期,我個(gè)人不再那麽在乎它了。我喜歡小(xiǎo)社區,所以我對此感覺很好。Erlang不需要幾何級增長(cháng)來讓我覺得樂在其中,它隻需要可持續發展。


Erlang社區的規模大小(xiǎo)也從(cóng)來沒有阻礙它在全世界發揮它的影響力。就(jiù)我所知,Erlang一(yī)直處于這樣一(yī)種狀态,既沒有足夠的工(gōng)作量滿足Erlang開(kāi)發人員(yuán)的需求,同時沒有足夠的開(kāi)發人員(yuán)來完成Erlang的工(gōng)作:這兩個(gè)方面都有很多(duō)工(gōng)作要做,但他們在地理位置上(shàng)并不一(yī)緻。面向偏遠(yuǎn)市(shì)場的公司和員(yuán)工(gōng)往往做得最好。而在Erlang之前無法輕易突破Webapp市(shì)場的地方,整個(gè)Elixir的就(jiù)業(yè)市(shì)場現在隻需稍加努力就(jiù)能(néng)達到(dào)良性循環。


從(cóng)一(yī)個(gè)更高(gāo)的層面來看(kàn),你是否使用Erlang或類似的語言,這可能(néng)并不太重要。雖然我确實覺得它沒有被充分利用而且它的價值被低(dī)估了,但最大的好處不是來自(zì)于運行一(yī)個(gè)使用它的系統。而是來自(zì)于學習可靠系統設計的基本原理,并在實際環境中吸收其經驗教訓。


我多(duō)年(nián)來聽到(dào)的一(yī)類問題都和尋求指導有關。例如,我應該如何學習系統設計?關于構建分布式系統,你有什麽好的建議嗎(ma)?我應該做什麽可以讓系統變得更加健壯和容錯(cuò)?我怎麽知道我的設計是模塊化的,不會(huì)導緻抽象洩漏?什麽是良好的錯(cuò)誤處理?有什麽好方法可以讓我知道優化工(gōng)作還(hái)為(wèi)時過早呢(ne)?聲明(declarative)某個(gè)東西(xī)意味著(zhe)什麽?


我們總是喜歡簡短易懂(dǒng)的解決方案,如食譜和最佳實踐,但事(shì)實證明,大多(duō)數真正的答案都是“我花了很多(duō)時間學到(dào)的”或類似的東西(xī)。我可以坦誠地說,我的職業(yè)生(shēng)涯中沒有什麽能(néng)比得上(shàng)花時間在Erlang世界裡(lǐ),潛移默化地吸收社區裡(lǐ)老手們的豐富經驗。從(cóng)數量上(shàng)看(kàn),Erlang不是一(yī)個(gè)大的社區,但從(cóng)任何其它指标來看(kàn),它肯定是富有的。幾年(nián)後,我從(cóng)一(yī)個(gè)初級開(kāi)發人員(yuán)變成了高(gāo)級開(kāi)發人員(yuán),在世界各地發表演講,尋找方法把我獲得的這些經驗傳授傳大家,這其中大部分都歸功于Erlang這個(gè)社區。


也許我在 15 分鍾内還(hái)是寫不出一(yī)個(gè)博客引擎(事(shì)實上(shàng),我不是一(yī)個(gè)快速開(kāi)發人員(yuán)),但我已經成為(wèi)一(yī)個(gè)更加可靠的開(kāi)發人員(yuán)和系統架構師(shī),我認為(wèi)這是一(yī)種非常有效的方式。再說一(yī)次,我在這裡(lǐ)讨論的不是使用系統,而是構建它們并使它們工(gōng)作。無論如何,激勵人們的東西(xī)并不随處可見(jiàn)。


我無法想象我能(néng)在其他社區能(néng)得到(dào)這麽多(duō),過去的 10 年(nián)裡(lǐ)發生(shēng)的一(yī)切令人驚歎。有趣的是,Erlang社區仍然很小(xiǎo),大部分還(hái)沒有開(kāi)發利用。這意味著(zhe)你有足夠的機(jī)會(huì)參與到(dào)任何事(shì)情中去,與那些充滿智慧的人一(yī)對一(yī)地進行交流,并為(wèi)自(zì)己争取一(yī)席之地。






友(yǒu)情鏈接
聯系我們

電(diàn) 話:0951-5137001/18295277030

Q  Q:87651825   568464226

郵 箱:web@yuzhike.com
地 址:銀(yín)川市(shì)興慶區南(nán)熏東街天都十六區6号樓3204

聯系我們

Website Design & Power by:yuzhike.com
版權所有 © 銀川智虎網絡科技有限公司