天天看點

erlang開發入門

最先接觸erlang是在今年的年初,當時是因為RabbitMQ而結識的erlang,了解後才知道的COP(Concurrency Oriented Programming)面向并發程式設計。

為什麼我會決定要學習Erlang,首先是因為我對函數式程式設計的好奇,一直以來我都覺得很神秘,然後主要的原因還是我想通過學習Erlang去了解RabbitMQ、ejabberd、Tsung這幾個比較出名的技術,RabbitMQ是高性能的消息中間件,ejabberd是基于XMPP協定的高性能的IM伺服器,Tsung是高并發的負載測試工具。決定學習Erlang後,我選擇了一本教程《Erlang程式設計》開始了erlang的學習之路,而且這本書是由Erlang之父Joe

Armstrong編寫的,這本書由基礎開始,比較适合我。

開始程式設計之前要先安裝Erlang的運作環境和開發環境,我安裝的是otp_win32_R16B02.exe,因為我用的是32位的windows7,這個otp帶了erts-5.10.3,erts是運作Erlang的VM(虛拟機),otp則是開放的erlang的一些函數庫,開發工具的選的是經常使用的Eclipse+erlide插件。

以下是我在學習Erlang程式設計的基礎知識時的筆記:

1,原子:就是常量,全局有效

2,元組:大括号括起來的項,逗号隔開,首位可表示意義

3,清單:中括号括起來,逗号隔開,表頭與表尾

4,模式比對:變量與常量或表達式的對應關系,提取元素

5,字元串:ASCII碼整數清單,$引用

6,子產品:.erl檔案,編譯後為.beam檔案

7,erlang中的三種标點符号的使用:逗号(分隔參數),分号(分隔子句),句點(分隔完整的函數和表達式)

8,函數的目:就是函數擁有的參數個數,用 /n 表示

9,fun:匿名函數

10,命名原則:變量大寫開頭,原子(常量)小寫開頭

11,類似與JAVA中的重載寫法:分号分隔,模式比對成功執行,不同目的函數是完全不相同的兩個函數

12,函數式程式設計:fun函數既可以作為函數的參數,又可以作為函數的結果,還可以賦給變量(類似JS裡的function)

13,高階函數:能夠傳回fun或接受fun為參數的函數

14,恒等測試符号:=:=,傳回true或false

15,list:map/2這樣的函數:list子產品中的函數很常見

16,注釋:%與%%(自動縮排功能)

17,erlang中為什麼沒有for循環:因為有了強大的模式比對

18,申明:-import(子產品名,[逗号分隔人方法名]),申明導入的外部子產品,與-export([逗号分隔人方法名]),申明導出的子產品給外部調用

19,斷言與斷言序列:when,可以用分号隔開

20,記錄(元組的僞裝):-record(記錄名,{ 名稱(記錄中的字段名)=元組中的元素,逗号分隔開 }),當元組龐大時友善記憶

21,需要知道的文法含義:-behaviour,-module,-export,-include,-define,-ifdef,-type,-spec,-endif,-record

22,erlang中的任何東西都是表達式,所有的表達式都有值

23,異常處理:模式比對不成功時會有異常,try...of...catch...after...end,catch的是描述錯誤的一個元組,但常用case...of...end處理異常

24,BIF:内建函數,類似于JAVA中JDK提供的API,也就是庫函數,所有的BIF都在erlang子產品(module)中

25,二進制資料:<< 資料值 >>,ASCII碼值

26,BIF apply:盡量少用

27,預定義子產品屬性與使用者屬性:-AtomTag(...),-module,-export,-import,-compile,-vsn

28,表達式序列與表達式塊的值是最後一個表達式的值:begin...end,逗号隔開

29,包含檔案:-include_lib(Name),引入庫中的包含檔案

30,清單操作符++與--:二進制操作運算符,功能是清單的合并與删除

31,宏:-define(Constant,Replacement),條件宏,-undef(Macro),-ifdef(Macro),-ifndef(Macro),-else,-endif

32,程序字典:類似JAVA中的ThreadLocal,避免使用

33,各種比較表達式:>,<,=<,>=,等于==,不等于/=,恒(全)等于=:=,不全等于=/=

34,可視化工具:webtool:start(). http://127.0.0.1:8888/

35,并發原語:spawn、send、receive

總結一下:

其實Erlang內建了很多語言的特點,首先要了解什麼是函數式程式設計語言和面向并發程式設計,當然,對于初學者的我還隻有一個模糊的概念。看Erlang的代碼到處是函數,我個人覺得Erlang還有一個核心的設計就是模式的比對,像類C的語言裡的for循環在Erlang中就找不到,代替的就是模式比對。下面舉個例子:

測試的結果如下:

erlang開發入門

Erlang裡面還有一個重要的文法,就是元組(tuple),對于元組還有一個外衣叫記錄(record),上面area的第二個參數就是元組,再給個元組的另一個簡單用法:

測試結果如下:

erlang開發入門

 Erlang還有熱替換的功能,在我改代碼後不需要重新啟動就可以得出修改後的結果。

今天介紹的隻是入門級的知識,在我深入學習并用Erlang編寫程式後再斷續更新,最後解讀ejabberd和Erlang的高并發之迷。