www.5197.com-澳门新蒲京娱乐场官网

热门关键词: www.5197.com,澳门新蒲京娱乐场官网

【大神来了】Elixir语言设计者José Valim:释放E

图片 1

了解更多

想要了解更多的Elixir可以读读下面两篇文章。
[1] elixir:灵丹妙药?or 徒有其名?
[2] Elixir: 编程语言的未来

CSDN:请给我们详细谈谈Elixir的设计目标。

只凭32个技术人员,如何应付4.5亿的用户?对于刚刚被Facebook用190亿美元收购的WhatsApp来说,答案是Erlang——一种诞生于上世纪80年代的编程语言,终于在此时走到了聚光灯下。但面对很多试图替代它的编程语言,Erlang有自己的将来吗?Erlang是25年前由瑞典电信巨头爱立信开发,而现在它却在像WhatsApp和TigerText这样的即时消息应用里找到了自己的位置。即使Facebook也对这种语言大唱赞歌——它在2009年用Erlang开发了Facebook聊天应用。而在同年,它拒绝了WhatsApp创始人Brian Acton的求职申请。并发成为新宠“使用Erlang,你可以开发出同时允许大量用户连接的消息传输应用,而不用担心消息是如何传输的,”使用这种语言开发的匿名发帖系统Whisper的CTO Chad DePue说。“相反”,他说,“你担心的是如何设计一个好的应用。”爱立信工程师Joe Armstrong设计Erlang语言时始终将电信通讯的工作原理铭记在心:同时有百万用户并行通讯,对故障事件几乎是零容忍。对于如此巨量的并行通讯,其它语言基本可望而不可及——有的表面上看起来擅长处理并发,但它们却不是原生的“多任务处理者”。而Erlang,跟它们形成鲜明对比,天生擅长多线程或玩这种“杂技”——再增加一个旋转的盘子?丢上来!“这种语言非常富有表达性,”谷歌创新实验室的Igor Clark说。“你可以在一个很高的层面工作,用它的几个关键概念可以做很多事情。”从实际使用的角度,Erlang最初非常适合在单个机器上跨多处理器处理高效的执行命令。而如今,它已经进化成擅长跨全球网络服务器——也就是我们所说的“云”——执行海量命令。游戏,金融等任何像实时拍卖系统那样对速度、稳定性、吞吐量高要求的场景,Erlang的这种云特征都是必不可少的。同样,对于程序员来说,Erlang的吸引力也独树一帜的,它允许系统不停机的情况下进行更新和bug修复。实时上,你可以修改系统属性或更换文件而不引起系统的卡顿。Erlang语言的这种特性是电信业的强制要求的结果:正如DePue说的,“当有人在打电话时,你不可能因为要升级系统而挂断他们的电话。”砸了电信的饭碗Erlang语言在1998年就开源了,而如今的电信也却没有当初那么大方。像WhatsApp,微信,Line和其它应用如雨后春笋,电信业一度依赖的短信费用迅速被腐蚀。KPN,一家荷兰公司,在目睹短信收益大幅下滑后试图封杀这些应用,但最终在法庭上输了官司。一些大型的运营商,例如Vodafone,试图建立自己的短信服务网络,但几乎没有成功的。它们现在的办法就是对用户的合同进行修改,添加并标明短信和数据各自的费用。就在这些电信公司忙着调整他们的收费标准时,WhatsApp却在专注做产品。它们的技术团队让WhatsApp在规模和速度上的提升一次又一次的让Erlang语言社区轰动,在短短的几年里,每个服务器的连接数从1万跃升到2百万。这些成绩的实现全都归功于Armstrong打下的基础,他为爱立信量身定制的项目AXD301,实现了“9个9”的可靠性 (99.9999999%)。而如今这些年轻的挑战者们,却将这些垂老的电信公司打的节节败退。Erlang语言能实现超越吗?有着这样骄人的成绩,你也许会认为Erlang会被人们广泛的使用。但现实情况要比你想象的复杂得多。直到现在,Erlang编程语言的开发者社区规模依然很小,并且大部分聚集在欧洲。这种语言的语法是公认的“奇特”。如果你想分析复杂的数据或架设一个小网站,自然会选择其它更好的语言和工具。而且,很多新出现的编程语言和变种都借鉴了Erlang语言的基本理念,比如谷歌的Go语言,竞争越来越激烈。Elixir给Erlang带来了希望——Armstrong最近的大力赞扬。Elixir将Erlang的语法普通化,这能帮助这种语言模仿Rails带红Ruby语言的模式找到自己的出路。像Chicago Boss这样的项目也在努力让这种语言更用户友好化。一旦有更多的社群在Erlang语言周围聚集,人们将会发现 OTP(开放电信平台)里更丰富的功能。“他们从开发坚固无比的软件和程序库中总结出来很多模式,我们可以很好的借用。”Clark说。Erlang语言能否流行起来的一个关键是便携设备市场,就是我们所说的网络设备。智能设备爱好者们已经在尝试在MQTT——一个轻量级的传感器间消息传输协议——上使用Erlang。如果能短信控制恒温器,那用WhatsApp也一定能行。本文转载来自:外刊IT评论英文原文:Inside Erlang, The Rare Programming Language Behind WhatsApp's Success

Elixir主要特性

  • 基于 Erlang 虚拟机(BEAM)之上。
  • 与 Erlang 语言的无缝衔接,与 Erlang 的互调几乎无任何额外开销。
  • 基于宏的元编程能力,语言的抽象语法树作为头等公民。
  • 基于协议的多态实现。(启发自Clojure)
  • 通过消息传递(参与者模式)支持 Shared-nothing 并行事务。
  • 强调利用递归和高阶函数的函数式编程胜过基于副作用和循环的命令式编程。
  • 一切均为表达式。
  • 惰性求值,拥有诸如 futures 和 promises 一类的异步流数据类型。
  • 模式匹配。
  • Unicode 支持,UTF-8 字符串。

便于脚本操作的函数,例如路径和文件系统;

Erlang主要特性:

  • 并发性 - Erlang支持超大量级的并发进程,并且不需要操作系统具有并发机制。
  • 分布式 - 一个分布式Erlang系统是多个Erlang节点组成的网络(通常每个处理器被作为一个节点)
  • 健壮性 - Erlang具有多种基本的错误检测能力,它们能够用于构建容错系统。
  • 软实时性 - Erlang支持可编程的“软”实时系统,使用了递增式垃圾收集技术。
  • 热代码升级 - Erlang允许程序代码在运行系统中被修改。旧代码能被逐步淘汰而后被新代码替换。在此过渡期间,新旧代码是共存的。
  • 递增式代码装载 - 用户能够控制代码如何被装载的细节。
  • 外部接口 - Erlang进程与外部世界之间的通讯使用和在Erlang进程之间相同的消息传送机制。
  • Fail-fast(速错机制),即尽可能快的暴露程序中的错误。
  • 面向并发的编程 COP (Concurrency-Oriented Programming)
  • 函数式编程
  • 动态类型
  • 及早求值或严格求值
  • 脚本语言

图片 2

Erlang

图片 3

Erlang(Ericsson Language)是一种通用的面向并发的编程语言,它由瑞典电信设备制造商爱立信所辖的CS-Lab开发,目的是创造一种可以应对大规模并发活动的编程语言和运行环境。Erlang问世于1987年,经过十年的发展,于1998年发布开源版本。Erlang是运行于BEAM(Bogdan/Björn’s Erlang Abstract Machine)虚拟机的解释性语言,但是现在也包含有乌普萨拉大学高性能Erlang计划(HiPE)开发的本地代码编译器,自R11B-4版本开始,Erlang也开始支持脚本式解释器。在编程范型上,Erlang属于多重范型编程语言,涵盖函数式、并发式及分布式。顺序执行的Erlang是一个及早求值, 单次赋值和动态类型的函数式编程语言。

Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此非常适 合于构建分布式,实时软并行计算系统。使用Erlang编写出的应用运行时通常由成千上万个轻量级进程组成,并通过消息传递相互通讯。进程间上下文切换对于Erlang来说仅仅只是一两个环节,比起C程序的线程切换要高效得多得多了。

使用Erlang来编写分布式应用要简单的多,因为它的分布式机制是透明的:对于程序来说并不知道自己是在分布式运行。Erlang运行时环境是一个虚拟机,有点像Java虚拟机,这样代码一经编译,同样可以随处运行。它的运行时系统甚至允许代码在不被中断的情况下更新。另外如果需要更高效的话,字节代码也可以编译成本地代码运行。

Elixir与Erlang运行在同一种虚拟机上,并兼容OTP。不仅如此,所有Erlang生态系统中使用的工具和库,Elixir也能使用,因为在Erlang中调用Elixir没有任何性能代价,反过来也是如此。

Actor并发

Elixir使用actor并发模型,actor是一个无依赖的进程,它不与其他进程共享任何东西。你可以spawn新进程,向它发消息,并且用receive接收消息,仅此而已。这里谈论的Elixir进程并不是操作系统的原生进程。它们既慢又笨重。相反,Elixir使用Erlang的进程。这些进程将在所有的处理器中运行(像原生进程一样),但是它们的开销非常小,在普通的机器里创建数十万个Elixir进程轻而易举。

以源码为良师

Elixir

图片 4

Elixir 是一个基于 Erlang 虚拟机的函数式、面向并行的通用编程语言。Elixir 以 Erlang 为基础,支持分布式、高容错、实时应用程序的开发,同时亦对其进行扩展使之借助宏实现元编程,并通过协议支持多态。

José Valim 是 Elixir 语言的设计者。他创造该语言的目标是在维持与现有 Erlang 工具链及生态环境兼容性的同时,让人们可以在 Erlang 虚拟机上进行扩展性更好的、高生产率的开发。Elixir 是编写高度并行处理,高可靠性应用的极佳选择。

多态记录;

OTP

OTP是Open Telecom Platform的缩写,是爱立信公司开发的开放电信应用平台,这是一个很强大并且很通用的框架,它能帮我们编写大型的、容错的,分布式的系统。

OTP经常被渲染成解决所有高可用分布式应用困境的法宝。其实未必,但是用它的确可以解决许多原本你需要自己解决的问题,比如服务发现、故障检测与管理、热代码交换和服务器结构安排等。OTP这个名字主要由于历史原因沿用下来,最初它被用来建立电话交换机,这些设备具有的特性也正是我们希望所有大型在线应用所具备的特性,所以OTP现在是一个通用工具,用于开发和管理大型系统。

我们每学一样东西都要把握它的中心思想,OTP的中心思想就是把程序的通用部分和业务部分切开,我帮你把通用部分做好,你做你的业务逻辑就行了。如果你看过一些分布式系统,最火的应该是分布式存储系统了,像Amazon的Dynamo、Google的Bigtable、LiveJournal的memcache等,就知道保证分布式系统的容错能力、数据一致性、请求高并发性是非常困难的。但是他们所用的算法都非常固定,当你去实现另一个分布式系统时,很可能就是参考他们的算法。然后一些技术功底不够的程序员就想,要是能把这些基础的设施都做好,并且提供插件扩展,那多好啊,这样当我想写个分布式数据库的时候就能跟写普通数据库一样简单了。没错,OTP就是帮你干那些又脏又累的活。

OTP实际上是一个包,其中包括了Erlang、分布式数据库Mnesia和不计其数的库文件,主要如下:

  • 一个Erlang直译器
  • 一个Erlang编译器
  • 服务器之间的通信协定
  • Corba Object Request Broker
  • 一个统计分析工具,名为Dialyzer
  • 一个分布式数据库服务器,名为Mnesia
  • 许多软件库

Elixir一直在使用OTP,包括mix、Elixir编译器,甚至问题跟踪系统都符合OTP约定。

所有Elixir代码在轻量级进程中运行,包含自己的状态,用于彼此交换信息。Erlang VM将这些进程分配到多个处理器核心中,使代码可以轻松地并行执行。

CSDN:在设计和发展Elixir的过程中,你有哪些经验可以与读者分享?

基于这种原因,我们选择了简约的语言核心。在许多编程语言中,if、case、try这些关键词都需要专门的语法分析器,而Elixir中只有宏。这样做的好处之一是,开发者可以自己扩展语言,以适应他们自己的工作领域。宏还是Elixir元编程的构建基础:具备通过代码生成代码的能力,令开发者能摆脱烦琐的工作,创造出更强大的工具。

更多数据类型;

效率很难测量,能高效开发桌面应用的编程语言却可能在数学运算领域捉襟见肘,它与你期望从事的领域、生态圈中的可用工具,以及是否能方便地创造和扩展这些工具有关。

最终,我希望Elixir和Erlang将能共享相同的字节码和数据类型。这意味着开发者可以同时拥有Elixir的表达力,以及Erlang具备的高可靠性和高性能。

Elixir是一种运行于Erlang VM上的函数式、具有元编程特性的动态语言。它拥有灵活的语法和强大的宏系统,还具备模式匹配、通过协议(类似Clojure的方式)支持多态等功能;继承了Erlang的优点,尤其适合开发并行、分布式,以及高容错应用。Erlang之父Joe Armstrong也对Elixir赞赏有加。日前,Elixir设计者José Valim接受了CSDN专访,分享了他在设计这门语言时的感悟。

José Valim:在Elixir设计初期,我知道自己需要Elixir具备宏系统,这是从Lisp中得到的启发。对于宏系统,只有在一种编程语言的语法能通过它自身的数据结构,以一种很直接的方式表达的情况下才合理。带着这个目标,我设计了一种非常简洁的语法,而后逐步增加层次,这部分灵感大多来自Ruby和Erlang中的惯用法。

CSDN:我们知道一种语言的成熟可能需要经历漫长的过程。在设计的过程中,哪些部分你用心最多?

此外,还有更多库、模块、协议等便于扩展的特性。

Unicode字符串和相应的操作;

José Valim:我的阅读量很大。既读书,也阅读其他开发者的代码。我觉得每个人都不应该畏惧自己所使用项目的源代码。当然,我也通过在现实问题中实践来提高自己。

原文链接:

José Valim:设计一种编程语言,对耐心的考验比努力更多。首先你需要明确一系列目标,然后在你希望语言发展的方向上宽广地推进,给你自己和语言都留出更多时间,然后观察这些目标之间如何演进与调和。

尽管基于简洁的语言核心,开发者可以构建和扩展针对自己领域的语言。但Elixir还继承了擅长并行和分布式应用的特点。在这些领域,Elixir补充了下面一些标准库:

严格和惰性枚举API;

倘若你试图一蹴而就,或者不对未来做打算,不为演进留出空间,就将得到一种不一致的语言——也许能实现所有目标,但这些目标之间却龃龉相抵。

CSDN:你设计Elixir的原因是什么,希望解决哪些问题?

之前已谈到兼容Erlang VM是Elixir的目标之一,当我们谈到Erlang这个词,可以将它分解为下面三部分:

语言成熟需待时间酝酿

CSDN:Elixir已足够成熟,可以用于生产环境吗?

Erlang虚拟机,称为EVM或BEAM。

CSDN:你都是通过哪些方式提高编程技能?

如果你编译Elixir代码,会发现CPU中的所有核心都在开动。当像Parallella这种技术变得更容易获取且成本更低廉时,你很难忽视Erlang VM所能提供的强大能力。未来Erlang VM将会被用来搭建能永久运行、能自我修复和扩展的系统。

CSDN:Elixir的名字有典故吗?

José Valim:Elixir的设计目标可以概括为兼容性、高效率和扩展性这几部分。

一系列设计原则,称为OTP;

一些用于编译和测试Elixir代码的项目管理工具。

José Valim:Elixir确实已可以用于生产环境了,已有开发者和公司将它应用到了产品中。不过,Elixir社区的发展速度很快,所以开发者还需要跟上语言发展的步伐。

一种函数式编程语言Erlang;

宏也对语法有巨大的影响,前面已经提到。尽管许多关于语言的话题一开始就会讨论语法,但在Elixir身上,从未将“简单地提供另一种不同语法”作为它的目标。

José Valim:Erlang VM是种神奇的软件,在过去十年中,许多公司使用它编写出了高并发、分布式和高容错性软件。Elixir的主要目标是将Erlang VM通过另一种语法和另一套工具暴露给开发者。

由于Elixir的目的是增强Erlang,所以我在做设计决定时经常向Erlang的语法和语义靠拢,这样就可以帮助开发者更好地融入生态圈。

强大的单元测试框架;

CSDN:Elixir的语法在很大程度上借鉴了Erlang和Ruby,为什么你没有选择一种更激进的变化?

José Valim:我很希望有,不过很可惜,这个名字其实没有特别的出处。

José Valim:我最喜欢的一条建议是“Use the source, Luke!”(《星球大战》中的一句话)。阅读你所使用的工具和项目的源代码会让你变成更好的程序员,也会让你更好地理解它们,还会让你对在社区中贡献更近一步。公开软件的源代码是一件美好的事情,它曾经(也依然)是我最重要的老师。

Elixir设计者,Rails核心团队成员,Plataformatec联合创始人José Valim

本文由www.5197.com发布于web前端,转载请注明出处: 【大神来了】Elixir语言设计者José Valim:释放E