erlang編程pdf
Ⅰ erlang開發還有前途嗎
作者:GhostComputing
鏈接:https://www.hu.com/question/21144196/answer/44397463
來源:知乎
著作權歸作者所有,轉載請聯系作者獲得授權。
Erlang 不僅僅是一門編程語言,它背後有強大的 OTP 開發框架作支持。Erlang 的語法概念簡潔明了,除了一些FP方面的知識在首次學習時需要適應外,其他很多語法細節其實都非常容易上手。所以,單純從語言層面上來說,Erlang 挺簡單的。但是,Erlang 最大的用途是做分布式網路應用開發,用 Erlang 做開發不僅僅只是簡單地用一門小眾的語言來堆砌 A/B/C/D 語言也能描述的邏輯,而是要利用這門語言和提供的開發框架怎麼去更好地搭建分布式平台,而你在這個開發過程所學習到的知識是跨語言、遷移性很強的;
Erlang 生態圈中的很多開源代碼非常具有研究和學習價值。比如cowboy,RabbitMQ,riak等等。如果你感興趣,甚至可以深入 Erlang 語言的實現,去學習調度器是怎麼實現的(C語言),去研究OTP的實現等等。Erlang 得天獨厚的分布式網路開發特性讓你有機會去深入研究網路開發的諸多細節,只要你學有餘力。而且,研究之後得到的體會也是跨語言跨平台跨架構;
作為一個工程師,必需善於思考總結和腳踏實地。當你選擇學習 Erlang 的時候,你是在進行你的技術投資。但是,投資是有分輕重的。你可以短線持有,浮光掠影地玩一玩;也可以長線持有,為你提供穩定且增長的收益。特別是作為一個程序員,我們的技術生命不應該只局限於一種編程語言/框架/系統,我們要開闊視野,有容乃大。在把握好技術深度的前提下,到處探索計算機編程的樂趣,這難道不是一種難得的體驗嗎 ?當你有火候到了的時候,你還擔心說你前些年從事的是 Erlang 編程工作,怕找不到工作嗎 ?
不要隨便給別人貼標簽,也不要隨便給自己貼標簽。作為一個工程師,朴實嚴謹地研究技術,開開心心地解決問題,這些都是快樂的本源(似乎離題了......)。
Erlang我也是最近接觸,並且下定決定一定要在今年之內入門,並且做一個小項目出來。
現在我不能告訴你,學習這么語言有多掙錢,我只能告訴你,我為什麼想學這么語言。
Erlang,個人認為,更多的是做後台上的高性能高負載的服務。那麼為什麼不用其他的語言呢?因為現在的計算機CPU的單核運算速度,已經基本上可以說遇到瓶頸了。3.x,再往上提,散熱就很成問題了。所以多核CPU就相對應的誕生了。但是面對多核伺服器,其他的語言利用率就全看程序員個人了。Erlang則能夠自動的分配資源,全面利用你的多核CPU,讓運算速度無限趨近於最低值。所以掌握一門多線程語言,是很有必要的。而Erlang就是我選中的語言。
好吧,我的表達可能會相對亂一些,湊合著看吧
Ⅱ erlang編程一般用來開發什麼的銀行軟體一般是哪些編程語言呢
Erlang是一個結構化,動態類型編程語言,內建並行計算支持。最初是由愛立信專門為通信應用設計的,比如控制交換機或者變換協議等,因此非常適 合於構建分布式,實時軟並行計算系統。
參見網路的:http://ke..com/view/765701.htm
銀行軟體的編程語言一般各種語言都有使用如java、.NET、C、C++甚至是一些專家系統,根據不同銀行,側重面不同,有的側重JAVA,有的側重.net。
Ⅲ 《Erlang編程指南》試讀:應該如何使用Erlang
引用Erlang的三個發明人之一的Mike Williams的話: 找到設計原型的正確方法。 允許小范圍內犯錯,但絕不能發生在產品級項目上。 按照上面所引用的話,所有成功的Erlang項目都應從一個原型開始,而且Erlang完全支持獲得原型所需的特性,並運行快速。工作原型通常包括一個功能性的子集,並允許端到端的系統測試。例如,如果你正在建立一個即時通信伺服器(在本書中反復出現的一個主題),有效的功能測試包括有能力進行提示和發送消息到遠程伺服器,而不必擔心如冗餘、持久性和安全性等問題。 採用Erlang進行軟體開發可以通過使用敏捷方法得到最好的實現,並在較短的循環周期內,逐步提供功能不斷增加的系統。開發小組應該盡量小規模進行,如果條件允許,應該進行自動測試。本書的「集成與開放」小節所提到的Erlang可用工具,為軟體開發提供了極為有利的支持和幫助。計算機輔助測試由EUnit進行單元測試,系統測試通過共同測試完成。其他工具包括cover(用於覆蓋分析);還有Dialyzer(透析器),這是一個靜態分析工具,用於確定軟體的缺陷,如輸入錯誤、死代碼和不安全代碼。 如果你打算把Erlang引入到你的組織中,那麼從小處著手是一個很好的策略。引入小項目(或小系統),從而發揮Erlang的優勢。這一策略對於Erlang尤其適合的原因,在於它從設計一開始就內置地支持分布式和集成,就如我們在「集成與開放」小節中所描述的那樣,並且所有的產品級Erlang系統都虛擬地和其他語言與系統互聯。一旦你在小范圍內獲得了成功,那麼就可以考慮往更大規模發展了。 本書的網站和附錄部分介紹了你可以去哪裡了解Erlang的鏈接、協助程序開發的工具以及Erlang團體。但是現在,是我們開始工作的時間了。
Ⅳ 什麼是Erlang,普及一下
Erlang是一種通用的面向並發的編程語言,它由瑞典電信設備製造商愛立信所轄的CS-Lab開發,目的是創造一種可以應對大規模並發活動的編程語言和運行環境。Erlang問世於1987年,經過十年的發展,於1998年發布開源版本。Erlang是運行於虛擬機的解釋性語言,但是現在也包含有烏普薩拉大學高性能Erlang計劃(HiPE)開發的本地代碼編譯器,自R11B-4版本開始,Erlang也開始支持腳本式解釋器。在編程范型上,Erlang屬於多重范型編程語言,涵蓋函數式、並發式及分布式。順序執行的Erlang是一個及早求值, 單次賦值和動態類型的函數式編程語言。
Ⅳ erlang golang學習哪個
我最早使用的語言是Java和python, 並且一直都對Python充滿好感, 我喜歡這種很朴實和高效率的感覺, 但我卻最後沒有採用Python,原因其實也很簡單, 我就是不喜歡縮進語法, 就跟很多人換工作僅僅是為了屏幕更大一點一樣, 另外就是有了同樣很棒的可選方案, 這就是Ruby, 所以我最終採用了Ruby作為主力編程語言, 同樣也為不能使用Python而有一點小遺憾,畢竟Python的健壯性比Ruby好很多,只不過Ruby也一直在進步, 所以這一點無傷大雅
我們都知道,無論是Python還是Ruby,甚至Java, 都是在解決業務層的問題, 屬於應用型語言, 以解決業務邏輯為主, 但還有一個領域是系統領域,偏網路層和底層操作,在這一塊我一直在尋找一種優雅的方案, C++被我首先給淘汰掉了, C的開發效率太低, Java倒是比較合適, 就是太臃腫,而且缺少系統編程的基因,畢竟它是企業級開發出身的
最後我選擇了Erlang, 因為它在網路層方面表現優秀, 同時容錯性和健壯性都很不錯, 它的虛擬機是唯一可以跟JVM媲美的, 而且還有OTP的超重量級武器, 幾乎可以是通殺網路層應用, 但根據我的總結它有一個硬傷和一個軟肋,這一點後面展開,可以說選擇Erlang是我目前所知道的方案裡面是最優的
直到有一天我了解了Golang, 我知道Golang其實也蠻早的, 大概08年的時候就知道Google在搞一門奇怪的語言, 之後的幾年,一直有不少以老莫為代表的人在嘀咕Golang, 其實我一直沒太關注,我從ROR中吸取的經驗是,成熟度對於商用很重要, 後來基於Golang開發的產品越來越多,讓我不得不去研究一下, 這我才知道, 這就是我夢想中的Python, 效率和性能達到了最佳的平衡,對Go了解越多, 就越不願意用Erlang寫代碼,主要原因:
1、Erlang的硬傷在於代碼的可讀性、表現力, 讓我來舉個小例子, 比如你為你的系統軟體構建一個RESTFUL的介面,我們大致了解一下代碼風格,先不說Erlang, 無論是你c/c++/python/ruby/java 出身, 對Go是不是有種很久違的感覺, 為什麼說是硬傷? 因為對一門語言來說,語法是不大可能會大幅度變更的, 而且不會出現大的變化, 我不知道有沒有人讀過《松本行弘的編程世界》,裡面闡述的道理很明白, 真正好的編程方式是人去主宰計算機而不是計算機主宰人, 我感覺Erlang就有點主宰我的編程思維的感覺(我的視力本身就不好,它還在不斷的扼殺我的眼睛!), 編程首先是門邏輯學,其次是工程學,最後才是數學, 又讓我想起吳軍的《數學之美》所說的, 人工智慧上個世紀一直在走彎路, 期望機器的高度圖靈完備, 而忽視人類本身已有的文明,統計歸納的應用
2、Erlang的軟肋在於高質量的庫少,盡管有不少殺手級應用, 同樣Go在這方面也是軟肋, 這一點對於一個不到五年的語言有情可原, 但對於一個20多年的語言是不是有點說不過去, 比如你用json解析庫,很多人都是從mochiweb這個基本不更新的庫中去抽取, 而我認為對於類似json這種東西可以考慮融入到語言標准庫中, 因為未來的商業軟體的api化趨勢越來越明顯,說的難聽點 , 一個倚老賣老一個與時俱進,反正我對Golang的庫一點也不擔心, 目前的成績易經非常棒了, 遠遠優於Ruby/Python的前五年, 可參見已有的高質量的庫列表
3、Erlang不合群, 這主要體現在跟其他語言的交互性上, 當然這也有深層次的原因, Erlang本身有自己的哲學, 如出錯恢復機制, 你融入一個其他語言的東西進去, 這帳就不好算,就好比你硬要讓一個喝咖啡的跟一個吃大蒜的坐在一起, 總之你寫一個Erlang的port遠遠比Go復雜, 甚至比Python/Java還要復雜, 這就造成了Erlang在底層編程上效果不是很好, 沒法利用linux已有的很多優秀成果,我一直認為Erlang的什麼的mysql/pg/oracle驅動都沒有必要存在, Erlang一定是一個self-container應用, 你只要用到了其他東西, 根據木桶理論, 你就不敢號稱9個9,以系統的眼光看問題, 我覺得一個系統的魯棒性不能依賴於某一組件, 這也是為什麼愛立信本身的Erlang應用並不廣泛
4、說說數據類型吧, 我不止聽到1個人說Erlang對字元串的處理不有好, 它把string當做list來處理,其實本質上是該這么,但,還是那句話, 違背了面向人的哲學, 應該做一些DSL, 比如Golang裡面的 := 就是一個糖衣, 等價於 var xx yyy = zzzz, 大大方便的程序員少敲不少字元, Golang裡面對字元轉可以說基本和python差不多, slice map函數很強大, 支持lambda條件,雖然Erlang的基本類型很少, 但有很多構造, 所謂構造等價於Golang裡面復雜的struct, 也奇怪了,我就是感覺Erlang構造傷眼睛好嗎?可能是各種括弧的比對的原因吧, 而且我認為這是不必要的, 顯然Erlang缺少DSL的基因, 當然跟Erlang出身的年代有關, 我不誇張的說, 自打用Erlang以後我的視力又下降了100度左右, 我不是很喜歡lisp所說的符號也是一種語法, 可能這又跟函數式編程有關吧:形式推導遠大於邏輯演繹
5、其實我最不關注的是性能問題, 因為隨著摩爾定律, 單位計算單元的性價比會無限高,但Golang既然提出它的性能逼近C, 那我還是提一下吧, 當然, Erlang也還可以, 雖然比Java慢, 但跟Python一個檔次吧
6、再談談報錯機制, 因為Erlang的的報錯信息太讓人糾結了, 起初以為我不會看出錯信息, 後來也使用了Sasl, 還是不夠直觀,甚至有時要用工具分析crash文件來定位問題,還是跟Erlang的哲學有關, 在Erlang中一切都是並行的, 所以它根本不care是物理哪一行出錯, 只跟Actor綁定, 然後告訴你Actor的ID和出錯代號, 你自己憑經驗去分析吧,這樣做的好處是可以很方便定位出並行中出現的問題,但凡事都是相對的, 在這一點上有點糾枉過正,根據我的經驗, 絕大部分時候我只希望先給我明確的指出哪一行出錯了好嗎? 甚至把順序的backtrace用完整的英文句子列印出來好嗎?至於並行中的錯誤及時在命令式多線程語言中是不常見的,雖然並不是沒有, 但遇到錯誤我再費勁去調試好了, 但並不是所有的邏輯都用並行的思維去定位問題, 我甚至認為, 對於一個系統不完全是並行也不完全是串列,跟好比我們衡量世界不能單純的唯物也不能完全的唯心一樣, 這一點Golang就做了很好的折中, 不需要並行的時候你老老實實的寫串列代碼, 需要並行的時候也有較復雜的機制來應對, 合乎情理
7、再說說招人吧, 以前招過好幾個C出來的人,說實話水平很好, 可以一周就完成一個小組件, libevent用的熟的很,後來我逼人家用Erlang,結果把人家逼走了,至今我還很後悔, 自己的一廂情願強加在別人身上真是太不合適了,但我招純Erlang出來的人,可以說比招objc的人還難, 沒有人,空談技術的優雅性首先就是不靠譜的,再看看郵件列表, Golang的活躍度明顯比Erlang高很多, 基本逼近Ruby,更重要的是, 我根本不擔心Golang的人才,因為只要熟悉Python/C/Ruby/或者C++, 基本可以實現半天入門, 之後就可以噼里啪啦邊搜資料邊幹活了,雖然有足夠的深度,但門檻極其平緩,工程人員也可以復用很多已有的知識。 Erlang在這一點其實跟第一點硬傷有關,大部分人學一周都摸不著頭腦,不是每個人的抽象思維和世界觀都是一樣的好嗎, 所以函數式編程盡管不比命令式語言起步晚,但始終學的人很少,這就是歷史, 對於大部分人, 更希望解決問題,創造價值, 而不是數學來推導去
8、最後我建議, 如果你是玩c/c++的, 現在開始學Golang,是最好的時機, 跟一門靠譜的語言一起成長, 這種感覺非常棒, 你用Erlang折騰1個應用, 用Go恐怕都完成了10個開源項目, 當然,也要結合自己的口味, Golang就是Sublime Text, Erlang就是Emacs
相信自己的判斷,相信自己的邏輯, 贏就是贏,輸就是輸
轉載僅供參考,版權屬於原作者。祝你愉快,滿意請採納哦
Ⅵ 如何理解erlang的分布式和並發
Erlang的並發性能也並非最強過去曾認為Erlang就代表高並發,高並發就代表高性能,同時認為Erlang就只是高並發的代名詞。其實,Erlang的並發性能也並非最強。首先Erlang的虛擬機是C寫的,其次諸如Haskell、OCaml + JoCaml,以及Python的PyPy,其實都能提供不弱於Erlang的並發能力。
同時Erlang在順序計算上的性能也不佳,甚至不能超過Python、Lua這類腳本語言(也許是和其本身的特殊性質有關)。所以就更落後於Haskell和OCaml這類可編譯的語言。然而即使並發和並行也需要順序計算,所以單從並發性能上來說,Erlang還不是最強的。
Erlang寫的Yaws這個Web伺服器,雖然能承受高並發,但性能,尤其是IO性能依然無法與lighttpd、nginx這種C寫的Web服務相比——Erlang的虛擬機本身也是C寫的。
同時,Erlang本身設計為一個結構化編程語言而非面向對象編程語言。這就令其較難應用更有開發效率的面向對象的項目開發流程和方法。
那麼為何Erlang在並發、分布式編程中如此受推崇?我認為因為它本身是並發和並行在語義、處理上的一致,所以它編寫此類程序更加方便。同時,它提供的是一個關於並發、並行以及分布式的統一的解決方案,而不僅僅是高並發。它的目的是構建有容錯能力、有伸縮性的可靠系統,同時又能最簡化編程工作。這就是它的真正的優勢。
Ⅶ elang是什麼語言
Erlang是一種面向並發運行環境的通用編程語言。該語言由愛立信公司在1986年開始開發。設計之初,Erlang的開發者著眼於找到一種適用於開發大型電信交換設備的編程語言
Ⅷ erlang可以做一些在什麼方面的應用呢請專家解釋一下
編程語言吧。
Erlang是一種通用的面向並發的編程語言,它由瑞典電信設備製造商愛立信所轄的CS-Lab開發,目的是創造一種可以應對大規模並發活動的編程語言和運行環境。
Erlang是一個結構化,動態類型編程語言,內建並行計算支持。最初是由愛立信專門為通信應用設計的,比如控制交換機或者變換協議等,因此非常適合於構建分布式,實時軟並行計算系統。 使用Erlang編寫出的應用運行時通常由成千上萬個輕量級進程組成,並通過消息傳遞相互通訊。進程間上下文切換對於Erlang來說僅僅只是一兩個環節,比起C程序的線程切換要高效得多得多了。 使用Erlang來編寫分布式應用要簡單的多,因為它的分布式機制是透明的:對於程序來說並不知道自己是在分布式運行。 Erlang運行時環境是一個虛擬機,有點像Java虛擬機,這樣代碼一經編譯,同樣可以隨處運行。它的運行時系統甚至允許代碼在不被中斷的情況下更新。另外如果你需要更高效的話,位元組代碼也可以編譯成本地代碼運行。
Ⅸ 今天看到一個叫erlang的編程語言,很好奇它的應用范圍,求解答
分布式語言,在我看來主要就是非常方便的實現了雲計算框架,我們可以在這個框架上面編寫需要大量計算的代碼. 如:聯機編譯,vc的IncrediBuild是一個類似概念的產品,我們在10台電腦在那裡安裝了IncrediBuild之後,當我們要編譯有1000千個cpp文件的工程,IncrediBuild會提取10個CPP文件交給這10台機器進行編譯,有一台編譯完了,繼續分一個新的cpp文件給它,所有的編譯完了在請求編譯的機器上面進行鏈接,生成exe.它將編譯的時間大大的縮短了.
Ⅹ 《Erlang/OTP並發編程實戰》pdf下載在線閱讀,求百度網盤雲資源
《Erlang/OTP並發編程實戰》([美] Martin Logan)電子書網盤下載免費在線閱讀
資源鏈接:
鏈接: https://pan..com/s/1Ui9GR9FsKb7_RqzQ72vbeg 提取碼: rsb6
書名:Erlang/OTP並發編程實戰
作者:[美] Martin Logan
譯者:連城
豆瓣評分:8.4
出版社:人民郵電出版社
出版年份:2012-7-12
頁數:356
內容簡介:
內容簡介:
通過提高CPU時鍾頻率來製造更快的單核晶元的技術已經到達了極限。多核、並發、分布式等概念和技術也隨之走出象牙塔,成為每個一線開發者的必備技能。由通信巨頭愛立信研發的Erlang/OTP大放異彩,二十多年來,在傳統電信領域高並發、高可靠、高容錯的嚴酷環境下,Erlang語言和OTP平台被鍛煉得堅如磐石,濃郁的函數式特質更是恰到好處地彌補了傳統命令式語言在並發編程上的固有缺陷,大大降低了構築並發、容錯、分布式應用的門檻。
如果將Erlang語言看成才華橫溢的鋼琴家,那麼OTP平台就是一架能讓鋼琴家把才能發揮得淋漓盡致的鋼琴。本書除了全面介紹Erlang語言和OTP平台的基礎知識外,還通過一系列實用案例引領你深入了解OTP的高級特性,一步步構建一個大型生產系統,並加以優化和完善。三位作者在Erlang領域擁有極其豐富的實戰經驗,細致入微地剖析了OTP開發與部署的全過程。要想真刀真槍地上戰場,本書才是你明智的選擇!
作者簡介:
作者簡介:
Martin Logan 從1999年開始活躍於Erlang社區,後來全職從事Erlang研發。目前任職於全球最大的在線旅遊公司Orbitz Worldwide,為基於大規模分布式服務的基礎設施開發解決方案。Erlware聯合創始人,核心開發人員,Erlang/OTP軟體包管理系統Faxien的主要開發者。
Eric Merritt 專注並發編程和分布式系統。曾任職於Amazon.com,現為eCD Market軟體工程師。Erlware聯合創始人,Erlang芝加哥用戶組核心成員。Erlware團隊開源產品核心開發人員,Erlang/OTP構建系統Sinan的主要開發者。
Richard Carlsson 瑞典烏普薩拉大學高性能Erlang計劃(HiPE)早期成員,研究Erlang技術達17年,曾為標准庫、Erlang編譯器、運行時系統和Erlang語言本身都作出過不少貢獻。此外,他還是Erlang文檔系統EDoc和單元測試框架EUnit的創建者。目前加入了Kreditor,致力於高可用性支付系統的Erlang開發。
譯者簡介:
連城
網路資深軟體工程師,《Erlang並發編程(第一部分)》社區翻譯項目組織者及主要譯者。對分布式存儲、分布式消息系統、程序語言設計實現抱有濃厚興趣。