chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

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

lhl545545 ? 來源:電子發(fā)燒友網(wǎng) ? 2018-02-23 09:09 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Erlang到底好在哪里?

因?yàn)槟芰τ邢?,對Erlang的了解僅限皮毛,本文只做簡單了解.

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

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

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

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

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

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

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

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

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

通常而言,Erlang 中的消息應(yīng)該是以“控制流”為主,在消息的數(shù)據(jù)結(jié)構(gòu)表達(dá)上,不同的消息通常都對應(yīng)著不同的處理流程,在這里“控制”是消息中最為關(guān)注的內(nèi)容.為此我們可以簡單的引入一個 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)過一番這樣對 Message 本身的設(shè)計(jì)和重構(gòu)之后,最終都能讓其恢復(fù)“秩序與美感”.而消息中的其他參數(shù),如果其處理邏輯非常復(fù)雜的話,那么帶有模式匹配的子函數(shù),又或著是 Tuple/Record 正是其用武之地.

上面我們提到了“對 Message 的設(shè)計(jì)和重構(gòu)”,實(shí)際上,這只是問題的一個方面.另外一個方面是:無論 Message 的“協(xié)議”設(shè)計(jì)得有多精巧,其對外的接口都不應(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) 格的語法檢查,而且可以在多個模塊之間重用.一旦需要修改消息協(xié)議,起隔離作用的“接口函數(shù)”就會體現(xiàn)出其存在的巨大價值.

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

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

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

    關(guān)注

    0

    文章

    16

    瀏覽量

    5840
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    常用的百兆網(wǎng)絡(luò)變壓器與RJ45網(wǎng)口的參考連接電路有哪些,主要注意事項(xiàng)在哪里呢?

    Hqst華強(qiáng)盛(石門盈盛)電子導(dǎo)讀:一起來了解常用的百兆網(wǎng)絡(luò)變壓器與RJ45網(wǎng)口的參考連接電路有哪些,主要注意事項(xiàng)在哪里呢?
    的頭像 發(fā)表于 11-06 13:49 ?184次閱讀
    常用的百兆網(wǎng)絡(luò)變壓器與RJ45網(wǎng)口的參考連接電路有哪些,主要注意事項(xiàng)<b class='flag-5'>在哪里</b>呢?

    請問在移植rtthread nano版時官網(wǎng)里面系統(tǒng)時鐘函數(shù)在哪里實(shí)現(xiàn)的?

    我在已有的華大HC32開發(fā)板的LED例程里我找不到官網(wǎng)移植教程里的這三個函數(shù),文檔也沒說明這三個函數(shù)的移植步驟?到底在哪里找的?是rtthread里的實(shí)現(xiàn)還是需要用戶自己找函數(shù)實(shí)現(xiàn)?
    發(fā)表于 09-26 08:09

    科技云報到:AI變革需要‘減脂增肌’

    產(chǎn)業(yè)的錨點(diǎn)到底在哪里?
    的頭像 發(fā)表于 09-25 09:20 ?335次閱讀
    科技云報到:AI變革需要‘減脂增肌’

    發(fā)提問貼在哪里輸入標(biāo)簽

    發(fā)提問貼在哪里可以輸入標(biāo)簽呀
    發(fā)表于 09-14 11:30

    實(shí)現(xiàn)環(huán)境計(jì)算真正的瓶頸究竟在哪里

    20世紀(jì)90年代初,計(jì)算機(jī)科學(xué)家Mark Weiser提出了“泛在計(jì)算”的理念,其核心思想是讓技術(shù)融入日常生活環(huán)境中[1]。盡管智能家居組件、傳感器網(wǎng)絡(luò)和智能設(shè)備取得了進(jìn)展,但環(huán)境計(jì)算這一概念依然難以實(shí)現(xiàn)。如今,我們已經(jīng)擁有了硬件基礎(chǔ)和連接能力。那么,真正的瓶頸究竟在哪里
    的頭像 發(fā)表于 09-10 16:21 ?642次閱讀

    小型全自動氣象站到底 “自動” 在哪

    小型全自動氣象站到底 “自動” 在哪? 柏峰【BF-QX】在氣象監(jiān)測領(lǐng)域,“全自動” 是個高頻詞,但很多人對 “小型全自動氣象站” 的認(rèn)知還停留在 “不用手動讀數(shù)” 的層面。實(shí)際上,它的 “自動” 遠(yuǎn)不止于此
    的頭像 發(fā)表于 08-27 09:38 ?472次閱讀
    小型全自動氣象站<b class='flag-5'>到底</b> “自動” <b class='flag-5'>在哪</b>?

    請問USB2CAN驅(qū)動程序在哪里

    USB2CAN驅(qū)動程序在哪里?它沒有像說明書中所說的那樣附帶 SSCB 演示 GUI。CH341SER.exe 在哪里?我在您令人沮喪的支持網(wǎng)站上找不到它。我無法連接到我的 REF_SSCB_AC_DC_1PH_SiC
    發(fā)表于 07-24 07:09

    替代傳統(tǒng)IEC60309插頭,這款DL28大電流連接器優(yōu)勢在哪里

    IEC60309插頭的理想替代。?1替代傳統(tǒng)IEC60309插頭DL28連接器優(yōu)勢在哪里?在越來越多的設(shè)備趨向于輕型化、緊湊化的趨勢下,體積相對過大的IEC603
    的頭像 發(fā)表于 07-10 18:19 ?400次閱讀
    替代傳統(tǒng)IEC60309插頭,這款DL28大電流連接器<b class='flag-5'>優(yōu)勢</b><b class='flag-5'>在哪里</b>?

    請問在哪里可以找到 DFU HOST TOOL?

    DFU Host Tool 的鏈接似乎已關(guān)閉: 請您告訴我還可以在哪里找到該工具。
    發(fā)表于 05-20 06:51

    復(fù)合型浪涌保護(hù)器:電力防護(hù)新勢力

    復(fù)合型浪涌保護(hù)器到底好在哪
    的頭像 發(fā)表于 04-03 09:40 ?465次閱讀

    請問移植rtthread nano版時官網(wǎng)里面系統(tǒng)時鐘函數(shù)在哪里實(shí)現(xiàn)的?

    我在已有的華大HC32開發(fā)板的LED例程里我找不到官網(wǎng)移植教程里的這三個函數(shù),文檔也沒說明這三個函數(shù)的移植步驟?到底在哪里找的?是rtthread里的實(shí)現(xiàn)還是需要用戶自己找函數(shù)實(shí)現(xiàn)?
    發(fā)表于 03-10 06:16

    STMHAL庫的USB每次插拔時識別位置在哪里?

    STMHAL庫的USB每次插拔時識別位置在哪里?
    發(fā)表于 03-07 14:00

    SMA接頭的優(yōu)勢缺陷

    SMA接頭以其高精密性、良好的可靠性、穩(wěn)定性好等特點(diǎn),在電子元器件領(lǐng)域應(yīng)用廣泛。但在使用過程中,因其材質(zhì)及生產(chǎn)工藝的影響,在應(yīng)用中,SMA接頭不可避免的會顯露出一些缺陷,今天我們就一起來看看SMA接頭在應(yīng)用領(lǐng)域到底有哪些缺陷以及
    的頭像 發(fā)表于 02-15 11:11 ?1151次閱讀
    SMA接頭的<b class='flag-5'>優(yōu)勢</b>和<b class='flag-5'>缺陷</b>

    人工智能的下一站在哪里

    DeepSeek的爆發(fā)進(jìn)一步推動了AI行業(yè)的發(fā)展速度,這讓人們不得不想象AI的下一站在哪里?維智科技所深耕的時空大模型與AI發(fā)展的邏輯軌跡又是如何聯(lián)系的?
    的頭像 發(fā)表于 02-14 10:27 ?793次閱讀

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

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