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并发编程(第一部分)》社区翻译项目组织者及主要译者。对分布式存储、分布式消息系统、程序语言设计实现抱有浓厚兴趣。