久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Erlang不能錯(cuò)過的盛宴(轉(zhuǎn)csdn)

 ~水手~!! 2011-04-25
Erlang不能錯(cuò)過的盛宴(轉(zhuǎn)csdn)

(快步進(jìn)入 Erlang的世界)

作者:成立濤 ([email protected] )

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

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

一、經(jīng)歷

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

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

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

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

二,、困惑

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

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

三,、 Erlang是什么

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

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

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

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

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

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

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

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

四、 Erlang的語言特性

1.簡單小巧

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

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

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

2.模式匹配

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

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

price(apple) -> 2.0;

price(banana) -> 1.2.

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

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

3.變量單次賦值

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

4.豐富的 libs

Erlang中提供豐富的 libs

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

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

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

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

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

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

xmerl 實(shí)現(xiàn) XML相關(guān)解析

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

observer 用來分析與追蹤分布式應(yīng)用

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

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

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

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

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

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

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

5.靈活多樣的錯(cuò)誤處理

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

6.代碼熱替換

你的產(chǎn)品想不間斷的更新么? Erlang可以滿足你這個(gè)需求,, Erlang會(huì)在運(yùn)行時(shí)自動(dòng)將舊的模塊進(jìn)行替換,。一切都靜悄悄。

7.天生的分布式

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

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

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

9.多核支持

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

10.跨平臺(tái)

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

我們僅僅需要了解平臺(tái)的一些特性,,對運(yùn)行時(shí)進(jìn)行優(yōu)化,。

11.開源

開源是我非常喜歡的一個(gè)詞匯,開源意味這更加強(qiáng)壯,,更加公開,,更加的追求平等。開源會(huì)讓 Erlang更好,。

五,、 Erlang與外界的交互

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

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

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

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

采用 Port,您的代碼在 Erlang的平臺(tái)之外運(yùn)行,,其崩潰不會(huì)影響 Erlang,。

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

六、 Erlang應(yīng)用場景

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

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

七,、 Erlang的學(xué)習(xí)過程

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

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

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

3.         遇到問題時(shí),,不要退卻,,堅(jiān)持下去找到解決辦法

4.         對語言熟悉時(shí),瀏覽一些好的開源項(xiàng)目

5.         有信心時(shí),,開始動(dòng)手做一個(gè)小項(xiàng)目

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

可能遇到的困難:

a)         對于語法的不適應(yīng)?

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

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

認(rèn)真看資料,,或者詢問朋友,比如我

c)         中文資料的缺乏,?

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

八,、 Erlang開源項(xiàng)目

排名不分先后

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

九,、遇到問題

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

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

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

Google中搜索答案

十,、推薦閱讀

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

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

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

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

http://www.

http://

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

http://

http://blog./

http://www.planet/

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多