筆記之Erlang

 Fifth Erlang

Erlang簡介:(一些很厲害的特性)

它的虛擬機器BEAM是唯一堪與java虛擬機器匹敵滴;
  • Erlang是一個結構化,動態型別程式語言,內建平行計算支援。最初是由愛立信專門為通訊應用設計的,比如控制交換機或者變換協議等,因此非常適 合於構建分散式,實時軟平行計算系統。

  • 使用Erlang編寫出的應用執行時通常由成千上萬個輕量級程序組成,並通過訊息傳遞相互通訊。程序間上下文切換對於Erlang來說僅僅 只是一兩個環節,比起C程式的執行緒切換要高效得多得多了。

  • 使用Erlang來編寫分散式應用要簡單的多,因為它的分散式機制是透明的:對於程式來說並不知道自己是在分散式執行。

    Erlang是函式式語言,可靠性方面相當好,可用於開發可靠性極高的系統。(完全的函式式語言)

    使用輕量級程序,發明者簡化了應用中多程序建立、管理和通訊的過程。分散式訊息傳遞成為基本的語言結構,因此鎖機制不在必要,併發效能有很大的提高。
    Erlang能輕易檢測到奔潰程序,因此終止相關程序並啟動新程序(錯誤處理”就讓它奔潰“);其還能做到”熱拔插“程式碼。也就是說,不必終止程式碼執行,就可以替換應用程式的各個部分。
(不過,它沒有雜湊表、高階模組等)
 

語法等:

註釋(%)、變數(動態型別)、表示式;
符號(被稱為原子),模糊匹配(不知道什麼東東)
函式:!!
!!Erlang能表達的最大數沒有限制,你可以輸出幾百位的一個數字,你可以想象得到的結果是滿滿幾個螢幕的數字,而且處理的速度一點不慢、。!!
結構:
Erlang使用case來用作模式匹配:

   case語句用的是模式匹配,而if語句用的是“哨兵”;其,以if關鍵字開頭,後面跟著幾個“哨兵->表示式”值得注意的是,Erlang中if語句中在判斷是必須有一個為真,(如果之中沒有為真的,則會出錯)!!

 
匿名函式:(就是把匿名函式當做物件賦值給一個物件進行使用)

列表和高階函式:

這個章節主要是介紹一些列表操作和高階函式的使用;
  • 高階函式:foreach,filter,map,。。。

  • 列表操作:foldl,foldr,。。。

  • 列表構造:【H | T】

    具體的就不寫出了,真的想使用或者是深入瞭解,請看文件或google它;

基本併發語法;

Erlang的三種併發原句是:用“!”傳送訊息,用spawn產生程序以及用receive接收訊息。
下面給一個完整的例子說明使用方法:(如果你把一個西班牙語字串傳送給該程序,它會返回字串的英語疑問)::

 把分散式訊息傳送給命名資源,可以使用另一種語法:[email protected] ! message 。(這是配置遠端伺服器。。這些請自學,很容易你就能如何去執行一個分散式伺服器了)

同步訊息:

為了吧訊息模型從非同步變為同步,我們採取以下三部分策略:
  • 訊息服務中的每個receIve子句都要匹配一個元組,元組寶航請求此次翻譯服務的程序ID以及需要翻譯的詞。有了這個ID,我們就知道該把響應發給誰。

  • 每個receive子句都要吧響應送回傳送者,而不是吧結果列印出來。

  • 不在使用簡單的!語句。

後面還有一個產生連結程序的技術吧,懶得做筆記了,對這個有興趣的時候可以google或百度下;
這個程序的連結好像很重要,分散式服務可以通過這個來監視系統,實現不同計算機間程序的接管等;
這個點有點難,不好理解,沒辦法做筆記了;*(直接貼圖了)

Erlang總結:

核心:
Erlang其實可以說是併發和容錯的代名詞。因為處理器的設計者想到了分散式多處理器的方法,所以罪行的程式設計技術也需要提高。
  • 動態和可靠性:Erlang依靠的不是編譯器所提供的人工的“安全網”,而是連結併發的能力,這樣既可靠又簡單。

  • 輕量級、無共享資源的程序:Erlang擁有訊息傳遞範型和原語,因此它可以輕易的寫出帶有一定的分離性的應用程式,而這點較為罕見;

  • OTP——企業級的庫:這個不瞭解;

  • 就讓他奔潰:這個策略使得i不必理會程序為什麼奔潰,因為你只要重啟它就好。這是一種函數語言程式設計範型,Erlang的飯不是策略也由此得到了增強。

不足:

  • 語法:它的語法源於Prolog,然而Prolog比較的晦澀難懂,語法有點彆扭。(if 、case、還有標點)

整合:不在JVM虛擬機器上執行,JVM的各種各樣的java庫以及數以十萬計的可用部署伺服器都是寶貴的財富;