• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            Fork me on GitHub
            隨筆 - 215  文章 - 13  trackbacks - 0
            <2017年6月>
            28293031123
            45678910
            11121314151617
            18192021222324
            2526272829301
            2345678


            專注即時(shí)通訊及網(wǎng)游服務(wù)端編程
            ------------------------------------
            Openresty 官方模塊
            Openresty 標(biāo)準(zhǔn)模塊(Opm)
            Openresty 三方模塊
            ------------------------------------
            本博收藏大部分文章為轉(zhuǎn)載,并在文章開(kāi)頭給出了原文出處,如有再轉(zhuǎn),敬請(qǐng)保留相關(guān)信息,這是大家對(duì)原創(chuàng)作者勞動(dòng)成果的自覺(jué)尊重!!如為您帶來(lái)不便,請(qǐng)于本博下留言,謝謝配合。

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            相冊(cè)

            Awesome

            Blog

            Book

            GitHub

            Link

            搜索

            •  

            積分與排名

            • 積分 - 219201
            • 排名 - 117

            最新評(píng)論

            閱讀排行榜

            原文地址:一位Erlang程序員的自白(來(lái)自圖靈教育官方博客)

            Erlang不能錯(cuò)過(guò)的盛宴

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

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

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

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

            一、經(jīng)歷

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

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

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

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

            二、困惑

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

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

            三、Erlang是什么

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

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

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

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

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

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

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

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

            四、Erlang的語(yǔ)言特性

            1.簡(jiǎn)單小巧

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

            integerfloatatomreferencefunportpidbitstring

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

            2.模式匹配

            Erlang的函數(shù)中,某些語(yǔ)法中,我們可以使用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的來(lái)伺候了。也便于代碼的擴(kuò)展:加一個(gè)新的水果品種,我們只需要加一行就可以了。

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

            3.變量單次賦值

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

            4.豐富的libs

            Erlang中提供豐富的libs

            stdlib中包含大量的數(shù)據(jù)結(jié)構(gòu)如listsarraydictgb_setsgb_treesetsdets

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

            inets提供ftp clienthttp client/servertftp 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 用來(lái)分析與追蹤分布式應(yīng)用

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

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

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

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

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

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

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

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

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

            6.代碼熱替換

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

            7.天生的分布式

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

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

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

            9.多核支持

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

            10.跨平臺(tái)

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

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

            11.開(kāi)源

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

            五、Erlang與外界的交互

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

            Erlang支持分布式開(kāi)發(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í)行。

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

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

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

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

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

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

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

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

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

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

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

            4.         對(duì)語(yǔ)言熟悉時(shí),瀏覽一些好的開(kāi)源項(xiàng)目

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

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

            可能遇到的困難:

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

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

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

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

            c)         中文資料的缺乏?

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

            八、Erlang開(kāi)源項(xiàng)目

            排名不分先后

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

            九、遇到問(wèn)題

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

            訂閱Erlangmaillisthttp://www.erlang.org/mailman/listinfo/erlang-questions),進(jìn)行提問(wèn)

            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 (國(guó)內(nèi)封鎖,可以使用http://trapexit.org.nyud.net:8080/ 或其他代理登錄)

            http://toquick.com

            http://blog.socklabs.com/

            http://www.planeterlang.org/

            posted on 2016-12-15 10:07 思月行云 閱讀(269) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Erlang
            久久久精品2019免费观看| 久久91精品国产91久久麻豆| 热久久这里只有精品| 人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 | 2021国内精品久久久久久影院| 亚洲国产精品久久久久久| 97久久久精品综合88久久| 人妻少妇久久中文字幕一区二区 | 久久精品国产91久久综合麻豆自制 | 久久精品中文字幕久久| 国产精品久久久久久搜索| 女人香蕉久久**毛片精品| 久久se精品一区二区| 91久久精品国产91性色也| 久久免费视频一区| 亚洲欧美另类日本久久国产真实乱对白| 久久精品国产WWW456C0M| 久久婷婷色香五月综合激情| 久久人做人爽一区二区三区| 亚洲中文字幕无码久久综合网| 久久精品无码午夜福利理论片| 麻豆精品久久久一区二区| 久久99精品国产麻豆婷婷| 国产精品美女久久福利网站| 亚洲AV日韩精品久久久久久久 | 久久国产精品久久国产精品| 久久精品无码一区二区app| 波多野结衣久久一区二区| 久久久婷婷五月亚洲97号色| 久久精品一区二区国产| 亚洲成av人片不卡无码久久 | 中文字幕无码精品亚洲资源网久久| 无码日韩人妻精品久久蜜桃| 一级做a爰片久久毛片人呢| 亚洲综合久久久| 国产成人综合久久综合| 色偷偷88欧美精品久久久| 亚洲国产精品无码久久久秋霞2| 国产精品激情综合久久| 国产成人久久精品一区二区三区| 亚洲国产精品久久66|