在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Erlang到底好在哪里_Erlang的優(yōu)勢(shì)與缺陷

lhl545545 ? 來源:電子發(fā)燒友網(wǎng) ? 2018-02-23 09:09 ? 次閱讀

Erlang到底好在哪里?

因?yàn)槟芰τ邢蓿瑢?duì)Erlang的了解僅限皮毛,本文只做簡(jiǎn)單了解.

從技術(shù)上說,Erlang是一個(gè)平臺(tái),她提供了一套完整的高性能、高可靠網(wǎng)絡(luò)服務(wù)開發(fā)所需要的基礎(chǔ)設(shè)施,并提供了原語給開發(fā)人員使用,她降低了開發(fā)類似系統(tǒng)的難度與門檻.有一個(gè)說法,Erlang讓一個(gè)中高級(jí)程序員,用一半的時(shí)間,一半的代碼量,就能提供頂尖C程序員開發(fā)的網(wǎng)絡(luò)服務(wù)80%性能的類似系統(tǒng),并且可靠性不輸于甚至超過前者。實(shí)踐證明這是真的.

另一方面,Erlang也給了開發(fā)人員強(qiáng)大的自信,就如同前面開發(fā)DSF時(shí)的場(chǎng)景所述.有開發(fā)維護(hù)過線上系統(tǒng)的人應(yīng)該可以深刻的感受到,開發(fā)一個(gè)高可靠的網(wǎng)絡(luò)服務(wù)有多困難,維護(hù)一個(gè)線上系統(tǒng)有多勞心,當(dāng)一個(gè)服務(wù)上線時(shí),我們的運(yùn)維與程序員即使睡覺都恨不得睜著一只眼睛.

采用Erlang開發(fā)的系統(tǒng),其出現(xiàn)的bug量與用常規(guī)語言開發(fā)的絕對(duì)不是一個(gè)數(shù)量級(jí);Erlang的監(jiān)控樹機(jī)制,更是讓我們的服務(wù),天生就具備了高可靠的基因,只要稍花精力,仔細(xì)規(guī)劃我們的監(jiān)控樹與重啟策略,就可以讓本來就少了很多的bug及一些無法預(yù)料的外部故障,在即使出現(xiàn)時(shí)也有很大的幾率迅速恢復(fù),給你修復(fù)bug排除故障一個(gè)緩沖的時(shí)間,更何況,Erlang可是具備熱更新能力的,那真的可以讓你延壽啊!延壽!

如果你的老板問你,為什么要用Erlang,Erlang好在哪里,你可以這樣總結(jié):省錢.你想想,一個(gè)資深的、頂尖的程序員與中高級(jí)普通程序員之間的成本差,普通的系統(tǒng)就只要普通的程序員就好啦,那不僅僅是省錢,是省很多很多的錢.

Erlang的優(yōu)勢(shì)與缺陷

Erlang在消息執(zhí)行方式上的優(yōu)勢(shì)在于靈活.Erlang是弱類型語言,在實(shí)現(xiàn)的時(shí)候可以任意調(diào)整消息的內(nèi)容,或是模式的要求.在 Erlang進(jìn)行模式匹配時(shí)往往有種約定:使用“原子”來表示“做什么”,而使用“綁定”來獲取操作所需要的“數(shù)據(jù)”,這種方式避免了冗余的cast和賦 值,在使用的時(shí)候頗為靈活.然而,世上沒有完美的事物,Erlang的消息執(zhí)行方式也有缺陷,而且是較為明顯的缺陷.

首先,Erlang的數(shù)據(jù)抽象能力實(shí)在太弱.如果編寫一個(gè)略顯復(fù)雜的應(yīng)用程序,您會(huì)發(fā)現(xiàn)程序里充斥著復(fù)雜的元組.您可能會(huì)疲于應(yīng)對(duì)那些擁有7、 8個(gè)單元(甚至跟多)的元組,一個(gè)一個(gè)數(shù)過來到底某個(gè)綁定匹配的是第幾項(xiàng),它的含義究竟是什么——一旦搞錯(cuò),程序便會(huì)出錯(cuò),而且想要調(diào)試都較為困難.因 此,也有人戲稱Erlang是一門“天生會(huì)損害人視力的語言”(令人驚訝的是,那篇文章居然搜不到了,我們只能從搜索引擎上看出點(diǎn)痕跡了).

而我認(rèn)為,這并不是Erlang語言中最大的問題,Erlang中最大的問題也是其“弱類型”特性.例如,現(xiàn)在有一個(gè)公用的Service Locator服務(wù),任意類型的Actor都會(huì)像SL發(fā)送一個(gè)消息用于請(qǐng)求某個(gè)Service的位置,SL會(huì)在得到請(qǐng)求之后,向請(qǐng)求方發(fā)送一條消息表示應(yīng) 答.試想,如果SL的功能需要有所修改,作為回復(fù)的消息結(jié)構(gòu)產(chǎn)生了變化,那么我們勢(shì)必要修改每一個(gè)請(qǐng)求方中所匹配的模式.由于消息的發(fā)送方和接受方在實(shí)際 上完全分離,沒有基于任何協(xié)議,因此靜態(tài)檢查幾乎無從做起.一旦遇到這種需要大規(guī)模的修改的情況,Erlang程序便很容易產(chǎn)生差錯(cuò).因?yàn)橐坏┯兴z漏, 系統(tǒng)便無法正常執(zhí)行下去了.

這的確是對(duì)于動(dòng)態(tài)類型語言很常見到的擔(dān)心,而且,確實(shí),如果不加注意會(huì)成為嚴(yán)重的問題.這種困擾確實(shí)是因?yàn)?Erlang 的“動(dòng)態(tài)類型”和“基于消息”而造成的.但,這并非無解,實(shí)際上,在 Erlang 編程規(guī)范之中,已經(jīng)給出了解決方案.

通常而言,Erlang 中的消息應(yīng)該是以“控制流”為主,在消息的數(shù)據(jù)結(jié)構(gòu)表達(dá)上,不同的消息通常都對(duì)應(yīng)著不同的處理流程,在這里“控制”是消息中最為關(guān)注的內(nèi)容.為此我們可以簡(jiǎn)單的引入一個(gè) atom 來予以表達(dá),這就是 Tag Messages 的最佳實(shí)踐:

5.7 Tag messages

All messages should be tagged. This makes the order in the receive statement less important and the implementation of new messages easier.

Don’t program like this:

loop(State) ->

receive

...

{Mod, Funcs, Args} -> % Don‘t do this

apply(Mod, Funcs, Args},

loop(State);

...

end.

The new message {get_status_info, From, Option} will introduce a conflict if it is placed below the {Mod, Func, Args} message.

If messages are synchronous, the return message should be tagged with a new atom, describing the returned message. Example: if the incoming message is tagged get_status_info, the returned message could be tagged status_info. One reason for choosing different tags is to make debugging easier.

This is a good solution:

loop(State) ->

receive

...

{execute, Mod, Funcs, Args} -> % Use a tagged message.

apply(Mod, Funcs, Args},

loop(State);

{get_status_info, From, Option} ->

From ! {status_info, get_status_info(Option, State)},

loop(State);

...

end.

可以相信,一段龐雜的代碼,在經(jīng)過一番這樣對(duì) Message 本身的設(shè)計(jì)和重構(gòu)之后,最終都能讓其恢復(fù)“秩序與美感”.而消息中的其他參數(shù),如果其處理邏輯非常復(fù)雜的話,那么帶有模式匹配的子函數(shù),又或著是 Tuple/Record 正是其用武之地.

上面我們提到了“對(duì) Message 的設(shè)計(jì)和重構(gòu)”,實(shí)際上,這只是問題的一個(gè)方面.另外一個(gè)方面是:無論 Message 的“協(xié)議”設(shè)計(jì)得有多精巧,其對(duì)外的接口都不應(yīng)該用消息來表達(dá),而應(yīng)該是“接口函數(shù)”的形式.

Erlang 系統(tǒng)之中的消息是極度靈活的系統(tǒng),但它并不適合用來作為模塊之間的接口,因?yàn)樗^于靈活.更加適合這一角色的設(shè)施是“函數(shù)”.用來充當(dāng)這樣角色的函數(shù)就被 稱作“接口函數(shù)”,在其實(shí)現(xiàn)代碼中,除了“按照約定的格式發(fā)消息以外”什么別的也不做——因?yàn)樗b的正是以消息為載體的交互“協(xié)議”.它是函數(shù),有著嚴(yán) 格的語法檢查,而且可以在多個(gè)模塊之間重用.一旦需要修改消息協(xié)議,起隔離作用的“接口函數(shù)”就會(huì)體現(xiàn)出其存在的巨大價(jià)值.

5.10 Interface functions

Use functions for interfaces whenever possible, avoid sending messages directly. Encapsulate message passing into interface functions. There are cases where you can’t do this.

The message protocol is internal information and should be hidden to other modules.

Example of interface function:

-module(fileserver).

-export([start/0, stop/0, open_file/1, ...]).

open_file(FileName) ->

fileserver ! {open_file_request, FileName},

receive

{open_file_response, Result} -> Result

end.

...code...

Erlang 是動(dòng)態(tài)語言,對(duì)其進(jìn)行靜態(tài)檢查比較困難(并非不能 R13 已經(jīng)有所動(dòng)作).但,并不是說沒有靜態(tài)檢查就會(huì)寸步難行.Erlang 同樣重要的語法特性是它還是函數(shù)式語言,遇到有疑惑的地方,不妨以函數(shù)的角度來思考.

Erlang 語言素有“難學(xué)”的名聲,其中一個(gè)原因就是因?yàn)殡m然其語法十分簡(jiǎn)單,但常會(huì)讓人心生 “就這樣了,然后呢?” 之惑——因?yàn)檫^于靈活而無所適從,而且也不存在著顯而易見的正確用法.這種困擾通常要在有了一定的實(shí)踐經(jīng)驗(yàn)之后才會(huì)漸漸消散.換句話說,在“學(xué)會(huì)”和“用 好”之間存在著一堵模模糊糊的墻,而這一“未知區(qū)域”又需要一定的耐心和經(jīng)驗(yàn)方可穿越.

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • erlang
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    5757
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    ADS126x與ADS1256比較優(yōu)勢(shì)在哪里

    看了下ADS1256和ADS126x的數(shù)據(jù)手冊(cè),發(fā)現(xiàn)相同輸出速率下,精度相差不是很大啊,ADS126x相對(duì)于ADS1256的優(yōu)勢(shì)在哪里?現(xiàn)在一個(gè)項(xiàng)目準(zhǔn)備在這兩款直接選一款!糾結(jié)中。。。。
    發(fā)表于 01-02 08:35

    ADS131M08規(guī)格書上將“ADC主時(shí)鐘和SCLK同步能實(shí)現(xiàn)最佳性能”,具體相對(duì)于不同步,性能好在哪

    ADS131M08規(guī)格書上將“ADC主時(shí)鐘和SCLK同步能實(shí)現(xiàn)最佳性能”,具體相對(duì)于不同步,性能好在哪
    發(fā)表于 11-21 07:49

    智慧燈桿到底“智慧”在哪里?條形智能為您專業(yè)解讀 AI燈桿屏

    智慧燈桿到底“智慧”在哪里?條形智能為您專業(yè)解讀 AI燈桿屏
    的頭像 發(fā)表于 11-14 13:51 ?270次閱讀
    智慧燈桿<b class='flag-5'>到底</b>“智慧”<b class='flag-5'>在哪里</b>?條形智能為您專業(yè)解讀 AI燈桿屏

    從FCB-ER8530到FCB-ER9500:索尼4K攝像機(jī)模組的技術(shù)飛躍

    索尼FCB-ER9500的上市,引起了各大行業(yè)的高度關(guān)注,尤其是快速運(yùn)動(dòng)或高動(dòng)態(tài)場(chǎng)景的行業(yè)領(lǐng)域。相對(duì)于SONY FCB-ER8530和FCB-CR8530,索尼FCB-ER9500到底好在哪里
    的頭像 發(fā)表于 10-12 17:56 ?619次閱讀

    貼片電容與貼片電阻的本質(zhì)差異在哪里

    貼片電容與貼片電阻的本質(zhì)差異在哪里
    的頭像 發(fā)表于 08-27 15:51 ?475次閱讀
    貼片電容與貼片電阻的本質(zhì)差異<b class='flag-5'>在哪里</b>?

    請(qǐng)問menuconfig配置PSRAM在哪里,怎么找不到呢?

    請(qǐng)問menuconfig配置PSRAM在哪里,我怎么找不到呢?如何打開?難道我用的是假的IDF?
    發(fā)表于 06-06 08:01

    請(qǐng)問STM32F0308 -DISCOVER的USB驅(qū)動(dòng)在哪里?

    STM32F0308 -DISCOVER的USB驅(qū)動(dòng)在哪里?有的請(qǐng)丟一個(gè).謝謝
    發(fā)表于 05-17 12:19

    請(qǐng)問CMSIS-RTOS RTX的任務(wù)調(diào)度鎖在哪里

    請(qǐng)問一下,CMSIS-RTOS RTX的任務(wù)調(diào)度鎖在哪里?謝謝!
    發(fā)表于 05-13 08:28

    使用FreeRTOS創(chuàng)建的DHCP線程里面的DHCP是在哪里定義的?

    請(qǐng)教下,使用 FreeRTOS 創(chuàng)建的 DHCP 線程里面的 DHCP 是在哪里定義的,貌似沒有找到 ? FreeRTOS 版本 v9.0.0 具體如下: // 創(chuàng)建 DHCP 線程 void
    發(fā)表于 04-30 07:34

    請(qǐng)問FOC庫中電機(jī)轉(zhuǎn)動(dòng)圈數(shù)在哪里

    我要讓電機(jī)正轉(zhuǎn)n圈,反轉(zhuǎn)n圈,在哪里驅(qū)動(dòng)圈數(shù)?
    發(fā)表于 04-19 08:03

    STM32單片機(jī)F系列和L系列到底有什么區(qū)別?

    了,也開始納悶了,那么L系列的優(yōu)勢(shì)到底體現(xiàn)在哪里優(yōu)勢(shì)有多大?然而作為ST既然推出這么一個(gè)型號(hào),那么肯定有很多獨(dú)特或說F系列達(dá)不到的地方,不知道大家的體會(huì)或認(rèn)識(shí)是什么的,一起討論討論哈
    發(fā)表于 04-15 06:34

    rtthread stdio在哪里開啟呢?

    以前使用MDK可以在設(shè)置里打開浮點(diǎn)運(yùn)算單元,rtthread stdio在哪里開啟呢?
    發(fā)表于 03-05 08:05

    什么是固態(tài)電容?固態(tài)電容又好在哪里呢?

    固態(tài)電容:即固態(tài)鋁質(zhì)電解電容。它與普通電解電容(即液態(tài)鋁質(zhì)電解電容)最大差別在于采用了不同的介電材料,液態(tài)鋁電容介電材料為電解液,而全全固態(tài)電容的介電材料則為導(dǎo)電性高分子。
    的頭像 發(fā)表于 02-29 14:38 ?1409次閱讀

    光纖技術(shù)的進(jìn)步方向在哪里?19芯光纖是世界上最快的嗎?

    光纖技術(shù)的進(jìn)步方向在哪里?高速光通訊牽引力度大。
    的頭像 發(fā)表于 02-22 10:43 ?812次閱讀

    蘋果手機(jī)id密碼在哪里找 蘋果手機(jī)id密碼忘記了怎么辦

    蘋果手機(jī)id密碼在哪里找 蘋果手機(jī)id密碼忘記了怎么辦? 蘋果手機(jī)id密碼在哪里找,若蘋果手機(jī)id密碼忘記了,可以通過以下幾種方法來解決這個(gè)問題。 1. 使用Apple ID找回密碼功能:蘋果官方
    的頭像 發(fā)表于 02-18 13:42 ?2462次閱讀
    主站蜘蛛池模板: 在线观看亚洲一区二区 | 模特精品视频一区 | 日本免费色 | 在线播放 你懂的 | 午夜精品久久久久久久四虎 | 边做边爱在线观看视频免费 | 亚洲天天做日日做天天欢毛片 | 国产yin乱大巴视频 国产爱v | 99久久伊人一区二区yy5099 | 黄视频免费观看 | 99婷婷| 日韩在线一区二区 | 黄色美女网址 | 亚洲综合精品一区二区三区中文 | 免费人成网站在线高清 | 国产婷婷高清在线观看免费 | 欧美特黄三级在线观看 | 日本国产高清色www视频在线 | 性欧美激情在线观看 | 喷潮白浆直流在线播放 | 九月丁香婷婷亚洲综合色 | 免费一级特黄3大片视频 | 伊人久久大香线蕉综合7 | 国产叼嘿视频网站在线观看 | 丁香欧美 | 欧美午夜影院 | 欧美一区二区三区影院 | 一区二区美女视频 | 在线播放黄色网址 | 看日本黄大片在线观看 | 中文字幕在线播放不卡 | 视频在线免费看 | 亚洲精品久 | 日本最顶级丰满的aⅴ艳星 日本最好的免费影院 | 国产视频第一页 | 免费人成网555www | 正在播放国产乱子伦视频 | 午夜久 | 成人a一级毛片免费看 | 特级全黄大片 | 色多多福利 |