国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Erlang不能錯過的盛宴(轉(zhuǎn)csdn)
Erlang不能錯過的盛宴(轉(zhuǎn)csdn)

(快步進入 Erlang的世界)

作者:成立濤 (litaocheng@gmail.com )

作為程序員,我們曾經(jīng)聞聽很多“業(yè)界動態(tài)”,“技術革新”,曾經(jīng)接觸很多“高手箴言”,“權威推薦”。這些正確與否,都已成過去!

現(xiàn)在,讓我們迎接 Erlang盛宴!

一、經(jīng)歷

2007 11月在 koders.com搜索代碼時,發(fā)現(xiàn) *.erl格式的源文件,感嘆開發(fā)語言的花樣百出,此時,我覺得 erlang是一個丑陋的小家伙,看名字就沒有對它提起多少興趣。

2008年初的時候,公司的項目開發(fā)中,我有緣認識了 ejabberd,一個采用 Erlang開發(fā)的開源 jabber服務器。我開始為其誘人的特性所傾倒。是時候認真看看 Erlang到底什么樣了!

2008 4月,通過各種資料的搜集,了解,我決定系統(tǒng)的學習 Erlang。

今天,通過 4個月的認真學習,我已經(jīng)熟悉了 Erlang,已經(jīng)在使用 Erlang開發(fā)項目。作為 C++程序員,我不敢妄自使用“熟悉”,“精通”之類的字眼,但是對于 Erlang我可以很負責任的說: Erlang很巧,很強大!

二、困惑

面對一個新的事務,我們本性都會充滿好奇,可是作為程序員,很多時候?qū)τ谛碌恼Z言我們都充滿了抵觸:這個新東西值得學習么?它會不會讓我拋棄舊愛?它文檔豐富么?是不是很難理解?它的前景如何 ?······相信大家跟我有一樣的苦惱。

但是,請聽我說!我們是程序員,我們走在技術革新的最前沿。用戶的產(chǎn)品,體驗是通過我們來產(chǎn)生!我們不能畏縮不前,我們的固步自封,就是我們的公司,乃至整個行業(yè)的停滯不前!口號可能有些響亮,但是認真思考,我相信朋友們一定有所感悟。

三、 Erlang是什么

Erlang是什么是我們最先要面對的問題,只有清楚了它是什么,我們才能做出我們的決定??梢娺@個問題的重要性,它決定了很多讀者是否會繼續(xù)看下去!非常緊張。

Erlang最初是愛立信為開發(fā)電信相關產(chǎn)品而產(chǎn)生。

Erlang是一種面向并發(fā) (Concurrency Oriented),面向消息( Message Oriented)的函數(shù)式 (Functional)編程語言。

面向并發(fā)說明 Erlang支持大規(guī)模的并發(fā)應用,我們可以在應用中處理成千上萬的并發(fā),而不相互影響。面向消息,其實是為并發(fā)服務!我們應該都熟悉多線程,熟悉加鎖解鎖操作,熟悉可能出現(xiàn)的資源競爭與死鎖。在 Erlang的世界里,我們可以將輕輕的抹去這些令人苦惱的詞匯。 Erlang的世界,每個處理都是獨立的個體,他們之間的交互僅僅靠消息!因此不會有死鎖,不會有那種痛苦的編程經(jīng)歷。

Erlang中一個非常重要的名詞: Process,也就是我們前面提到的“個體”。它不是我們操作系統(tǒng)中的進程,也不是線程。它是 Erlang提供給我們的超級輕量的進程。為了適應大規(guī)模并發(fā)的特性, Process需要能夠快速創(chuàng)建,快速銷毀。 Process之間通信的唯一方法就是消息,我們只要知道一個 Process的名字即 pid,就可以向其發(fā)送消息。 Process也可以在任何時候,接收消息。我們這樣做只有一個目的:讓我們的系統(tǒng)更加簡單,用一種樸素的做法,實現(xiàn)一個高效的語言。

Erlang是種函數(shù)式編程語言,對此我沒有很深刻的理解,最明顯的特征就是, Erlang中到處都是函數(shù),函數(shù)構成了我們的產(chǎn)品的主體,把這些函數(shù)放到一個個的 Process中去,讓他們運行起來,那么就組成了我們朝氣蓬勃的產(chǎn)品。

Erlang支持對數(shù)據(jù)的位操作,擁有豐富的數(shù)據(jù)持久化機制。

同時需要說明的是 Erlang內(nèi)建垃圾回收機制( GC)。

四、 Erlang的語言特性

1.簡單小巧

Erlang中只有 8種基本的數(shù)據(jù)類型:

integer、 float、 atom、 reference fun、 port pid、 bitstring

同時提供 2種復合結(jié)構: tuple list,這就是 Erlang的所有數(shù)據(jù)類型。

2.模式匹配

Erlang的函數(shù)中,某些語法中,我們可以使用 Pattern匹配,這是一個非常好的特性,我們可以讓代碼自己去決定如何執(zhí)行

比如,我們定義一個函數(shù),其告訴我們某種水果的價格 :

price(apple) -> 2.0;

price(banana) -> 1.2.

我們隨后調(diào)用 price(Fruit),會根據(jù) Fruit變量的內(nèi)容返回具體的價格。這樣做的好處就是節(jié)省了我們的代碼量,我們不用 if...else…或者 switch…case的來伺候了。也便于代碼的擴展:加一個新的水果品種,我們只需要加一行就可以了。

學習 Erlang一個非常重要的內(nèi)容就是模式匹配,但是請不要混淆,這個匹配和正則表達式?jīng)]有任何干系。

3.變量單次賦值

這個是一個匪夷所思的特性,變量竟然只能單次賦值!是的 Erlang中變量一旦綁定某個數(shù)值以后,就不能再次綁定,這樣做的好處是便于調(diào)試出錯(更深層次的原因是 Erlang為并發(fā)設計,如果變量可以修改,那么就涉及到資源的加鎖解鎖等問題),當發(fā)生錯誤時,某個變量是什么就永遠是什么,不用順藤摸瓜的查找誰修改過它,省了好多事情。唯一的麻煩就是需要一個信的變量時,你必須再為它想一個名字。

4.豐富的 libs

Erlang中提供豐富的 libs

stdlib中包含大量的數(shù)據(jù)結(jié)構如 lists array, dict, gb_sets, gb_trees ets, dets

mnesia提供一個分布式的數(shù)據(jù)庫系統(tǒng)

inets提供 ftp client http client/server, tftp client/server

crypto 提供加密解密相關函數(shù),基于 openssl相關實現(xiàn)

ssl 實現(xiàn)加密 socket通信,基于 openssl實現(xiàn)

ssh 實現(xiàn) ssh協(xié)議

xmerl 實現(xiàn) XML相關解析

snmp 實現(xiàn) SNMP協(xié)議( Simple Network Management Protocol

observer 用來分析與追蹤分布式應用

odbc 使 Erlang可以連接基于 SQL的數(shù)據(jù)庫

orber 實現(xiàn) CORBA對象請求代理服務

os_mon 提供對操作系統(tǒng)的監(jiān)控功能

dialyzer提供一個靜態(tài)的代碼或程序分析工具

edoc 依據(jù)源文件生成文檔

gs 可以為我們提供某些 GUI的功能(基于 Tcl/Tk

還有很多朋友提供了一些開源的 lib,比如 eunit,用來進行單元測試。

5.靈活多樣的錯誤處理

Erlang最初為電信產(chǎn)品的開發(fā),這樣的目的,決定了其對錯誤處理的嚴格要求。 Erlang中提供一般語言所提供的 exception, catch, try…catch等語法,同時 Erlang支持 Link Monitor兩種機制,我們可以將 Process連接起來,讓他們組成一個整體,某個 Process出錯,或推出時,其他 Process都具有得知其推出的能力。而 Monitor顧名思義,可以用來監(jiān)控某個 Process,判斷其是否退出或出錯。所有的這些 Erlang都提供內(nèi)在支持,我們快速的開發(fā)堅固的產(chǎn)品,不在是奢望。

6.代碼熱替換

你的產(chǎn)品想不間斷的更新么? Erlang可以滿足你這個需求, Erlang會在運行時自動將舊的模塊進行替換。一切都靜悄悄。

7.天生的分布式

Erlang天生適合分布式應用開發(fā),其很多的 BIF(內(nèi)建函數(shù),相 API)都具有分布式版本,我們可以通過 BIF在遠程機器上創(chuàng)建 Process,可以向遠程機器上的某個 Process發(fā)送消息。在分布式應用的開發(fā)中,我們可以像 C、 C++, JAVA等語言一樣,通過 Socket進行通訊,也可以使用 Erlang內(nèi)嵌的基于 Cookie的分布式架構,進行開發(fā)。當然也可以兩者混合。分布式開發(fā)更加方便,快速。 Erlang Process的操作, Error的處理等都對支持分布式操作。

8.超強的并發(fā)性

由于采用其自身 Process,而沒有采用操作系統(tǒng)的進程和線程,我們可以創(chuàng)建大規(guī)模的并發(fā)處理,同時還簡化了我們的編程復雜度。我們可以通過幾十行代碼實現(xiàn)一個并發(fā)的 TCP服務器,這在其他語言中都想都不敢想!

9.多核支持

Erlang讓您的應用支持多個處理器,您不需要為不同的硬件系統(tǒng)做不同的開發(fā)。采用 Erlang將最大限度的發(fā)揮你的機器性能。

10.跨平臺

如同 JAVA一樣, Erlang支持跨平臺(其目前支持 linux mac, windows 19種平臺),不用為代碼的移植而頭疼。

我們僅僅需要了解平臺的一些特性,對運行時進行優(yōu)化。

11.開源

開源是我非常喜歡的一個詞匯,開源意味這更加強壯,更加公開,更加的追求平等。開源會讓 Erlang更好。

五、 Erlang與外界的交互

Erlang可以與其他的語言進行交互,如 C、 C++, Java。當然也有熱心的朋友提供了與其他語言的交互,如果需要你也可以根據(jù) Erlang的數(shù)據(jù)格式,提供一個庫,讓 Erang與您心愛的語言交互。

Erlang支持分布式開發(fā),您可以創(chuàng)建一個 C Node,其如同一個 Erlang節(jié)點,前提是你遵照 Erlang的規(guī)范。

當然最常用的交互還是再同一個 Node上,比如我們要調(diào)用某個 lib,調(diào)用一些系統(tǒng)提供的功能,這時候主要有兩種方式: Port和嵌入式執(zhí)行。

Port Erlang最基本的與外界交互的方式,進行交互的雙方通過編碼,解碼,將信息以字節(jié)流的方式進行傳遞。(具體這個通道的實現(xiàn)方式,根據(jù)操作系統(tǒng)的不同而不同,比如 unix環(huán)境下,采用 PIPE實現(xiàn),理論上任何支持對應 Port通道實現(xiàn)的語言都可以與 Erlang進行交互)。 Erlang為了方便 C JAVA程序員,提供了 Erl_Interface Jinterface

采用 Port,您的代碼在 Erlang的平臺之外運行,其崩潰不會影響 Erlang。

嵌入式執(zhí)行,通過 Erlang平臺加載,因此這是非常危險的,如果您的程序崩潰,沒有任何理由, Erlang也會崩潰。

六、 Erlang應用場景

分布式產(chǎn)品,網(wǎng)絡服務器,客戶端,等各種應用環(huán)境。

Erlang也可以作為一種快速開發(fā)語言,進行原型開發(fā)。

七、 Erlang的學習過程

1.         安裝首先從 Erlang官方網(wǎng)站,下載安裝 Erlang http://www.erlang.org/download.html

linux:獲取源代碼,根據(jù)說明編譯; windows:直接安裝

2.         認真閱讀《 programming erlang》(中文版圖書已經(jīng)問世),并不斷動手練習書中的例程。

3.         遇到問題時,不要退卻,堅持下去找到解決辦法

4.         對語言熟悉時,瀏覽一些好的開源項目

5.         有信心時,開始動手做一個小項目

6.         不間斷的與大家交流,共同提高

可能遇到的困難:

a)         對于語法的不適應?

堅持看下去,代碼繼續(xù)寫下去,我相信 1個月,你會喜歡上 Erlang的語法

b)        有些數(shù)據(jù)類型不清楚?

認真看資料,或者詢問朋友,比如我

c)         中文資料的缺乏?

Erlang中文的資料會越來越多,此外, Erlang的相關的英文資料也比較容易理解,還是那句話,別怕麻煩

八、 Erlang開源項目

排名不分先后

  • couchdb     基于文檔等非結(jié)構化數(shù)據(jù)的數(shù)據(jù)庫,提供HTTP接口
  • disco       Map-Reduce 框架,Erlang + Python
  • ejabberd    性能出眾,使用廣泛的Jabber開源服務器
  • mochiweb    輕便,高效的HTTP應用框架
  • rabbitmq    中間服務器,實現(xiàn)AMQP協(xié)議
  • yaws        高效的web server
  • etorrent    Bittorrent 客戶端
  • scalaris      分布式的key-value存儲

九、遇到問題

參看 Erlang官方文檔 http://www.erlang.org/doc/

訂閱 Erlang maillist http://www.erlang.org/mailman/listinfo/erlang-questions ),進行提問

Nabble提供的 Erlang maillist存檔中搜索( http://www.nabble.com/Erlang-f14095.html

Google中搜索答案

十、推薦閱讀

Erlang Design Principles http://www.erlang.org/doc/design_principles/part_frame.html

Erlang Efficiency Guide http://www.erlang.org/doc/efficiency_guide/part_frame.html

Erlang Programming Rules http://www.erlang.se/doc/programming_rules.shtml

十一、推薦網(wǎng)站

http://www.erlang.org

http://erlang-china.org

http://trapexit.org (國內(nèi)封鎖,可以使用 http://trapexit.org.nyud.net:8080/ 或其他代理登錄)

http://toquick.com

http://blog.socklabs.com/

http://www.planeterlang.org/

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Erlang開發(fā)建議
Mnesia──一個用于電信應用系統(tǒng)的健壯的分布式DBMS - Lee's 程序人生 - 博客園
目前最值得學習的9種前沿的開發(fā)語言,可能有一天你會發(fā)現(xiàn)……
接下來的兩年你可能需要這五種語言!
思考,問題和方法
為什么我們需要知道“函數(shù)式編程”?
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服