【CSDN 編者按】面向并發的編程語言 Erlang ,在全球范圍內其實屬于小眾語言,但卻擁有著強大的并行處理能力和容錯機制,并在二十余載后的如今卻仍能保持生機,你不想了解一下嗎?
整理 | 彎月 責編 | 鄭麗媛
出品 | CSDN(ID:CSDNnews)
Erlang 是一門通用編程語言,主要用途是構建并發應用程式,由 Joe Armstrong 在瑞典電信設備制造商愛立信所轄的計算機科學研究室開發,目的是創造一種可以應付大規模并發活動的程式設計語言和運行環境,Erlang 于 1987 年發布正式版本,最早是愛立信擁有的私有軟體,經過十年的發展,于 1998 年發表開放原始碼版本,現在 Erlang 主要用于電信行業、Web 應用、分布式計算、即時訊息、電子商務等領域,負責處理大規模的并發持續連接,
Erlang 頗受歡迎的特點包括:
● 高并發:Erlang 程式員可以處理分布式環境中來自多個來源的輸入,
● 容錯性:即使一部分程式出錯,整個系統也能繼續運行,所以非常適合必須長期運行的系統,如 Web 應用程式,或電信平臺,
● 代碼熱加載,更新代碼和修改程式不需要重啟系統,
● 采用訊息傳遞方式代替共享變數,因此行程間通信的并發程度更高,
● 垃圾回收,提供自動的記憶體管理,同時提高速度和性能,
然而,Erlang 的缺點之一在于入門難度高于常見的編程語言,作為一種函式式語言,對于新手程式員來說,Erlang 的學習曲線很陡峭,
Erlang 的歷史
Erlang 語言由愛立信的員工 Joe Armstrong,Robert Virding 和 Mike Williams 于 1986 年開發,開發該語言的最初目的是為了改進電信應用程式,該語言的設計很大程度上受到了 PLEX 語言的影響,
Erlang的第一個版本是用 Prolog 實作的,但該版本太慢,無法用于電話交換機上,于是,開發團隊于 1992 年開發了 BEAM 虛擬機,
BEAM 可以將 Erlang 代碼編譯成 C 代碼,從此,Erlang 開始應用到實際生產中,
但是,1998 年,愛立信禁止在任何新產品中使用 Erlang,因為他們打算將所有產品遷移到非私有的技術上,
由于這項限制,Erlang 的主要作者 Joe Armstrong 和其他 Erlang 程式員開始重新設計 Erlang,最后于 1999 年以開源形式發布了新的 Erlang,此后,Erlang 受到了整個電信界的關注,今天,Erlang 被全世界許多電信運營商和通信軟體公司使用,包括 T-Mobile、WhatsApp 等,而愛立信依然負責 Erlang 的維護,并在自己的許多節點和移動網路中(包括LTE網路)廣泛使用 Erlang,
Erlang 的特點
那么,與其他語言相比,Erlang 的特點是什么?
首先,Erlang 是一門函式式語言,這意味著它和常見的面向物件語言(如C++、Python)、面向程序語言(如 C)等都不一樣,在Erlang中,函式和操作的設計思想和寫法都與數學公式十分相似,舉一個最簡單的例子:斐波那契數列(數列中每一項都是前兩項之和)的定義為:
F(0) = 0
F(1) = 1
F(n+2) = F(n+1) + F(n)
那么,使用C語言,你可能需要寫一個回圈來計算:
int fib(int n)
{
int a = 0, b = 1, c, i;
if( n == 0)
return a;
for(i = 2; i <= n; i++)
{
c = a + b;
a = b;
b = c;
}
return b;
}
可以看到,上面的演算法與前面給出的數學公式完全不同,你需要自己想辦法用“程序”的方式來表達出原數學公式的意義,
或者你可以采用遞回,這樣代碼更“接近”數學公式:
int fib(int n)
{
if (n <= 1)
return n;
return fib(n-1) + fib(n-2);
}
然而,使用 Erlang,代碼和數學公式幾乎一模一樣:
fibo(0) -> 0 ;
fibo(1) -> 1 ;
fibo(N) when N > 0 -> fibo(N-1) + fibo(N-2) .
其次,Erlang 的計算模型是建立在行程上的,Erlang 使用許多獨立的、互相隔離的行程,行程之間通過訊息互相通信,
每個行程都可以接收訊息并回應訊息,行程之間都是獨立的,而且創建行程只需要消耗很少的記憶體,因此,擴展系統只需要創建更多的行程,
Erlang 和 Elixir
提到 Erlang,人們常常會想起另一種語言:Elixir,在上世紀八十年代,Erlang 主要用于電信應用程式,但三十年之后,Erlang 也被用于大型Web應用程式中,例如,Pinterest 需要每秒鐘發送大約 14,000 條通知,而 Facebook 每秒需要接受并發送通知 16 億次,這種高并發性正是 Erlang 大展身手的地方,因此,Erlang 得到了廣泛的應用,但是,Erlang 語言本身非常有難度,而且難以撰寫,畢竟,這是一門來自幾十年前的語言,當時語言設計時并沒有考慮“易學易用”的問題,對于現代習慣了 Ruby 和 JavaScript 的程式員來說,Erlang 就是一門老古董,而且,Erlang 也沒有現代 Web 應用程式所需的許多功能,
于是,Jose Valim 在 2012 年創建了 Elixir 語言,Elixir 代碼會編譯成 Erlang 位元組碼,可以在 Erlang 運行時上運行,甚至你可以直接在 Elixir 中撰寫 Erlang 代碼,
Valim 是 Ruby on Rails 開發團隊的語言,甚至還寫過一本關于 Rails 開發的書,所以,Elixir 的設計思想很大程度上來源于 Rails,它的語法很像 Ruby,而且比 Erlang 易讀得多,而且Elixir還擴展了 Erlang,加入了元編程、多型等功能,
Erlang 的應用
與其他語言相比,Erlang 有三個非常顯著的優勢,
● 高并發:Erlang 的虛擬機 BEAM 使用輕量級執行緒(稱為行程),這些執行緒互相隔離,能在所有 CPU 上運行,通過訊息互相通信,再加上語言本身是函式式的,因此非常適合撰寫并發應用程式,
● 可擴展性:Erlang 非常適合現代分布式計算和多核心 CPU,通過 Erlang 的行程模型,我們可以非常容易地實作水平擴展,只需要添加更多的機器,或者給現有機器添加更多的 CPU 核心即可,
● 可靠性:Erlang 的格言是“不要懼怕崩潰”,Erlang 中的行程是隔離的,所以一個行程的錯誤不會影響到其他行程;而且由于是輕量級行程,重啟出錯的行程的代價也非常低,這樣就能提高系統的容錯性,
總結
Erlang 雖然是一門古老的語言,但在今天依然能發揮它的潛力,如果你希望從事大規模 Web 應用程式、分布式計算或高并發應用程式方面的開發,則可以嘗試一下 Erlang 和 Elixir,從另一個角度來說,Erlang 的函式式編程思想也能為你提供前所未有的視野,如果你從未接觸過函式式編程,那么也可以嘗試一下 Erlang,相信它能拓寬你的眼界,為你帶來新的思路,
參考鏈接:https://serokell.io/blog/introduction-to-erlang
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/245173.html
標籤:其他
上一篇:程式員不要總想著四兩撥千斤
下一篇:CAP
