Erlang 和 Elixir 介紹

Erlang

Erlang(Ericsson Language)是一種通用的面向并發(fā)的編程語言,它由瑞典電信設(shè)備制造商愛立信所轄的CS-Lab開發(fā),目的是創(chuàng)造一種可以應(yīng)對大規(guī)模并發(fā)活動的編程語言和運(yùn)行環(huán)境。Erlang問世于1987年剖笙,經(jīng)過十年的發(fā)展撒遣,于1998年發(fā)布開源版本。Erlang是運(yùn)行于BEAM(Bogdan/Bjo?rn’s Erlang Abstract Machine)虛擬機(jī)的解釋性語言肌似,但是現(xiàn)在也包含有烏普薩拉大學(xué)高性能Erlang計(jì)劃(HiPE)開發(fā)的本地代碼編譯器,自R11B-4版本開始诉瓦,Erlang也開始支持腳本式解釋器川队。在編程范型上,Erlang屬于多重范型編程語言睬澡,涵蓋函數(shù)式固额、并發(fā)式及分布式。順序執(zhí)行的Erlang是一個及早求值, 單次賦值和動態(tài)類型的函數(shù)式編程語言煞聪。

Erlang是一個結(jié)構(gòu)化斗躏,動態(tài)類型編程語言,內(nèi)建并行計(jì)算支持昔脯。最初是由愛立信專門為通信應(yīng)用設(shè)計(jì)的啄糙,比如控制交換機(jī)或者變換協(xié)議等,因此非常適 合于構(gòu)建分布式栅干,實(shí)時軟并行計(jì)算系統(tǒng)迈套。使用Erlang編寫出的應(yīng)用運(yùn)行時通常由成千上萬個輕量級進(jìn)程組成,并通過消息傳遞相互通訊碱鳞。進(jìn)程間上下文切換對于Erlang來說僅僅只是一兩個環(huán)節(jié)桑李,比起C程序的線程切換要高效得多得多了。

使用Erlang來編寫分布式應(yīng)用要簡單的多窿给,因?yàn)樗姆植际綑C(jī)制是透明的:對于程序來說并不知道自己是在分布式運(yùn)行贵白。Erlang運(yùn)行時環(huán)境是一個虛擬機(jī),有點(diǎn)像Java虛擬機(jī)崩泡,這樣代碼一經(jīng)編譯禁荒,同樣可以隨處運(yùn)行。它的運(yùn)行時系統(tǒng)甚至允許代碼在不被中斷的情況下更新角撞。另外如果需要更高效的話呛伴,字節(jié)代碼也可以編譯成本地代碼運(yùn)行勃痴。

Erlang主要特性:

  • 并發(fā)性 - Erlang支持超大量級的并發(fā)進(jìn)程,并且不需要操作系統(tǒng)具有并發(fā)機(jī)制热康。
  • 分布式 - 一個分布式Erlang系統(tǒng)是多個Erlang節(jié)點(diǎn)組成的網(wǎng)絡(luò)(通常每個處理器被作為一個節(jié)點(diǎn))
  • 健壯性 - Erlang具有多種基本的錯誤檢測能力沛申,它們能夠用于構(gòu)建容錯系統(tǒng)。
  • 軟實(shí)時性 - Erlang支持可編程的“軟”實(shí)時系統(tǒng)姐军,使用了遞增式垃圾收集技術(shù)铁材。
  • 熱代碼升級 - Erlang允許程序代碼在運(yùn)行系統(tǒng)中被修改。舊代碼能被逐步淘汰而后被新代碼替換奕锌。在此過渡期間著觉,新舊代碼是共存的。
  • 遞增式代碼裝載 - 用戶能夠控制代碼如何被裝載的細(xì)節(jié)惊暴。
  • 外部接口 - Erlang進(jìn)程與外部世界之間的通訊使用和在Erlang進(jìn)程之間相同的消息傳送機(jī)制饼丘。
  • Fail-fast(速錯機(jī)制),即盡可能快的暴露程序中的錯誤辽话。
  • 面向并發(fā)的編程 COP (Concurrency-Oriented Programming)
  • 函數(shù)式編程
  • 動態(tài)類型
  • 及早求值或嚴(yán)格求值
  • 腳本語言

Elixir

Elixir 是一個基于 Erlang 虛擬機(jī)的函數(shù)式葬毫、面向并行的通用編程語言。Elixir 以 Erlang 為基礎(chǔ)屡穗,支持分布式、高容錯忽肛、實(shí)時應(yīng)用程序的開發(fā)村砂,同時亦對其進(jìn)行擴(kuò)展使之借助宏實(shí)現(xiàn)元編程,并通過協(xié)議支持多態(tài)屹逛。

José Valim 是 Elixir 語言的設(shè)計(jì)者础废。他創(chuàng)造該語言的目標(biāo)是在維持與現(xiàn)有 Erlang 工具鏈及生態(tài)環(huán)境兼容性的同時,讓人們可以在 Erlang 虛擬機(jī)上進(jìn)行擴(kuò)展性更好的罕模、高生產(chǎn)率的開發(fā)评腺。Elixir 是編寫高度并行處理,高可靠性應(yīng)用的極佳選擇淑掌。

Elixir主要特性

  • 基于 Erlang 虛擬機(jī)(BEAM)之上蒿讥。
  • 與 Erlang 語言的無縫銜接,與 Erlang 的互調(diào)幾乎無任何額外開銷抛腕。
  • 基于宏的元編程能力芋绸,語言的抽象語法樹作為頭等公民。
  • 基于協(xié)議的多態(tài)實(shí)現(xiàn)担敌。(啟發(fā)自Clojure)
  • 通過消息傳遞(參與者模式)支持 Shared-nothing 并行事務(wù)摔敛。
  • 強(qiáng)調(diào)利用遞歸和高階函數(shù)的函數(shù)式編程勝過基于副作用和循環(huán)的命令式編程。
  • 一切均為表達(dá)式全封。
  • 惰性求值马昙,擁有諸如 futures 和 promises 一類的異步流數(shù)據(jù)類型桃犬。
  • 模式匹配。
  • Unicode 支持行楞,UTF-8 字符串攒暇。

Actor并發(fā)

Elixir使用actor并發(fā)模型,actor是一個無依賴的進(jìn)程敢伸,它不與其他進(jìn)程共享任何東西扯饶。你可以spawn新進(jìn)程,向它發(fā)消息池颈,并且用receive接收消息尾序,僅此而已。這里談?wù)摰腅lixir進(jìn)程并不是操作系統(tǒng)的原生進(jìn)程躯砰。它們既慢又笨重每币。相反,Elixir使用Erlang的進(jìn)程琢歇。這些進(jìn)程將在所有的處理器中運(yùn)行(像原生進(jìn)程一樣)兰怠,但是它們的開銷非常小,在普通的機(jī)器里創(chuàng)建數(shù)十萬個Elixir進(jìn)程輕而易舉李茫。

OTP

OTP是Open Telecom Platform的縮寫揭保,是愛立信公司開發(fā)的開放電信應(yīng)用平臺,這是一個很強(qiáng)大并且很通用的框架魄宏,它能幫我們編寫大型的秸侣、容錯的,分布式的系統(tǒng)宠互。

OTP經(jīng)常被渲染成解決所有高可用分布式應(yīng)用困境的法寶味榛。其實(shí)未必,但是用它的確可以解決許多原本你需要自己解決的問題予跌,比如服務(wù)發(fā)現(xiàn)搏色、故障檢測與管理、熱代碼交換和服務(wù)器結(jié)構(gòu)安排等券册。OTP這個名字主要由于歷史原因沿用下來频轿,最初它被用來建立電話交換機(jī),這些設(shè)備具有的特性也正是我們希望所有大型在線應(yīng)用所具備的特性烁焙,所以O(shè)TP現(xiàn)在是一個通用工具略吨,用于開發(fā)和管理大型系統(tǒng)。

我們每學(xué)一樣?xùn)|西都要把握它的中心思想考阱,OTP的中心思想就是把程序的通用部分和業(yè)務(wù)部分切開翠忠,我?guī)湍惆淹ㄓ貌糠肿龊茫阕瞿愕臉I(yè)務(wù)邏輯就行了乞榨。如果你看過一些分布式系統(tǒng)秽之,最火的應(yīng)該是分布式存儲系統(tǒng)了当娱,像Amazon的Dynamo、Google的Bigtable考榨、LiveJournal的memcache等跨细,就知道保證分布式系統(tǒng)的容錯能力、數(shù)據(jù)一致性河质、請求高并發(fā)性是非常困難的冀惭。但是他們所用的算法都非常固定,當(dāng)你去實(shí)現(xiàn)另一個分布式系統(tǒng)時掀鹅,很可能就是參考他們的算法散休。然后一些技術(shù)功底不夠的程序員就想,要是能把這些基礎(chǔ)的設(shè)施都做好乐尊,并且提供插件擴(kuò)展戚丸,那多好啊,這樣當(dāng)我想寫個分布式數(shù)據(jù)庫的時候就能跟寫普通數(shù)據(jù)庫一樣簡單了扔嵌。沒錯限府,OTP就是幫你干那些又臟又累的活。

OTP實(shí)際上是一個包痢缎,其中包括了Erlang胁勺、分布式數(shù)據(jù)庫Mnesia和不計(jì)其數(shù)的庫文件,主要如下:

  • 一個Erlang直譯器
  • 一個Erlang編譯器
  • 服務(wù)器之間的通信協(xié)定
  • Corba Object Request Broker
  • 一個統(tǒng)計(jì)分析工具独旷,名為Dialyzer
  • 一個分布式數(shù)據(jù)庫服務(wù)器姻几,名為Mnesia
  • 許多軟件庫

Elixir一直在使用OTP,包括mix势告、Elixir編譯器,甚至問題跟蹤系統(tǒng)都符合OTP約定抚恒。

了解更多

想要了解更多的Elixir可以讀讀下面兩篇文章咱台。
[1] elixir:靈丹妙藥?or 徒有其名俭驮?
[2] Elixir: 編程語言的未來

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末回溺,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子混萝,更是在濱河造成了極大的恐慌遗遵,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逸嘀,死亡現(xiàn)場離奇詭異车要,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)崭倘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門翼岁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來类垫,“玉大人,你說我怎么就攤上這事琅坡∠せ迹” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵榆俺,是天一觀的道長售躁。 經(jīng)常有香客問我,道長茴晋,這世上最難降的妖魔是什么陪捷? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮晃跺,結(jié)果婚禮上揩局,老公的妹妹穿的比我還像新娘。我一直安慰自己掀虎,他們只是感情好凌盯,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著烹玉,像睡著了一般驰怎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上二打,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天县忌,我揣著相機(jī)與錄音,去河邊找鬼继效。 笑死症杏,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的瑞信。 我是一名探鬼主播厉颤,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼凡简!你這毒婦竟也來了逼友?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤秤涩,失蹤者是張志新(化名)和其女友劉穎帜乞,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體筐眷,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡黎烈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怨喘。...
    茶點(diǎn)故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡津畸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出必怜,到底是詐尸還是另有隱情肉拓,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布梳庆,位于F島的核電站暖途,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏膏执。R本人自食惡果不足惜驻售,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望更米。 院中可真熱鬧欺栗,春花似錦、人聲如沸征峦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽栏笆。三九已至类腮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蛉加,已是汗流浹背蚜枢。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留针饥,地道東北人厂抽。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像丁眼,于是被迫代替她去往敵國和親筷凤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容