介紹 Erlang 程式語言

近年來,我曾經試著標榜我的 Erlang 程式技能,在台灣找工作。遇過面試考題有這樣的題目:

請寫出計算1加到10的程式,不限使用任何語言,也可用流程圖表示。

於是,我給他們以下一段程式:

add([]) -> 0;
add([X|Xs]) -> X + add(Xs).
%% 執行:
%% add([1,2,3,4,5,6,7,8,9,10]).

結果相當明顯。我沒有錄取。

想必在追求實務領域的資訊科技產業界,我這篇答覆是被認定為不實用、屬於研究性質的語言。但是,在我來看,我的邏輯順序是正確的:「是您說任何語言都可以,那麼我就用我熟悉的 Erlang 將這個程式的明確函數定義擺出來給您看」。然而,雖然他們自己題目寫道「不限使用任何語言」,看起來相當開放,卻在當我寫出實實在在的一段 Erlang 程式碼的時候,又不接受我的答案。另一方面,如果有人說「你這是玩具語言吧」,我則會回答您:不對, Erlang 是一種非常實務的語言,它的出生地是瑞典的電信公司 Ericsson 。 (要注意,瑞典 Ericsson 不同於 Sony-Ericsson 。)

Erlang 是一種函數式語言,語言內涵包括了對 process 的定義,可用來定義多行程、分散式的軟體功能與行為,並且提供容錯機能。由於這種語言能夠做出代碼熱抽換的功能, Erlang 能使系統非常穩健地運作相當長的時間,以 Ericsson 公司本身的例子,有程式在電信交換機上運作達數年之久,沒有中斷。

Erlang 的發明人是 Joe Armstrong 博士,起於約 1985 年左右,他在 Ericsson 的電腦科學實驗室研發一種新的語言,語言專注於對 concurrency 的定義,勝過於普通程式語言專注於對 procedure 的定義。 Erlang 第一版是以 Prolog 為底,設計為 Prolog 平台的子語言。後來,Armstrong 博士自行研發他的虛擬機器,稱為 JAM (Joe’s Abstract Machine) ,再將 Erlang 語言做一些遞迴地重寫,使 Erlang 在 JAM 平台 boots-trapping 為獨立運作的語言。 1998 年之後, Ericsson 將這種私有語言公開為開放軟體,並且資助 HiPE 專案計畫,產生新一代的高效 Erlang 執行環境。於是到目前, Erlang 已經是您我都可以自由使用的語言。

語法方面, Erlang 相當多方面繼承了 Prolog 的特徵,不過,前者是以函數風格構成一組程式,而後者則是以邏輯敘述風格構成程式。 Erlang 有基本資料型態、基本的運算符號、動態長度列表、豐富的資料結構與樣式比對能力、跨行程或跨電腦通訊的表示能力。並且,能夠處理字串、二進位資料、以及處理 process 輸入及輸出訊息。程式結構是以函數為主,可以規劃為模組,並且模組也能設計為帶有參數 ── 於是,您也可能用模組功能設計出物件導向風格的程式。

最後談到 Erlang 語言的處境。在許多國家, Erlang 火紅的程度可以與 Python 或 Ruby 互相類比。有統計提到,充份掌握 Erlang 程式能力的工作者,獲得相當高的待遇。國外已經有相當多指定需要 Erlang 技能的職缺。但是可惜,在台灣仍然沒有任何有關的職缺,沒有產業應用,並且熟悉這類語言的人才相當少。

介紹暫時到此。本人會持續發佈另外一些介紹文章,討論 Erlang 語言的細節,並且有時候介紹我自己應用 Erlang 的一些案例。希望這些工作能略盡推廣之義。為了更多介紹 Erlang 的一些事物,我已經寫了維基百科 ── Erlang 條目維基教科書 ── Erlang 程式設計與問題解決。希望做更廣泛地推廣,使它更實用。

廣告

About 黃耀賢 (Yau-Hsien Huang)

熱愛 Erlang ,並且有相關工作經驗。喜歡程式語言。喜歡邏輯。目前用 Python 工作。
本篇發表於 Erlang, Introduction。將永久鏈結加入書籤。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s