今天,我想向您介绍编程语言Elixir,其某些功能以及为什么要签出它!
首先,第一件事:Elixir是在Erlang VM上运行的并发功能语言。它受到许多不同语言的启发,其中基于语法,Ruby和Erlang最明显。
Elixir是一种强大的动态类型语言。这使它与Ruby和Python处于同一类别,并且还具有用于编译时类型检查的可选功能。Elixirs数据结构是不可变的,但是可以重新分配/重新绑定变量。 2这对我来说有点奇怪,因为我是通过Elm开始使用FP的,那里没有变量,只有常量。
Elixir从Erlang继承了很多数据结构和相关语法,这在许多方面是其最大的影响。 Elixir设计目标像这样描述与Erlang的关系:
Elixir旨在与Erlang VM和现有生态系统兼容。当我们谈论Erlang时,我们可以将其分为三个部分:
Elixir在同一虚拟机中运行,并且与OTP兼容。不仅如此,Elixir中还提供了Erlang生态系统中可用的所有工具和库,仅仅是因为从Elixir调用Erlang并没有转换成本,反之亦然。
至于其他灵感,Elixir有来自Python的文档字符串,来自Clojure的多态性和协议,来自不同Lisps的宏和元编程,仅举几例。 1个
就像我说的那样,Elixir是一种并发的函数式编程语言。对于功能部分,这意味着Elixir主要使用用于代码结构的功能和模块,并具有与功能语言相关的其他功能。稍后我们将讨论并发部分。
在这里,我们定义了一个模块,该模块具有一个简单地编写" Hello,World!"的函数。到控制台。
许多编程语言都具有“杀手级应用”。库,框架和用例,它们本身足以证明向语言的过渡或进行尝试。对于Ruby来说,它是Web框架Ruby on Rails,在许多方面Elixir都有自己的Rails:Phoenix。
Phoenix受Rails的启发(最初隶属于Elixir的团队以前是一家Ruby商店),并且是Elixir社区的早期成员。 Phoenix的创建者从Rails的多年开发中学到了很多东西,除了从面向对象的语言转换为功能性语言所需的自然变化之外,还发表了自己的见解。与Rails相比,Phoenix在Erlang VM的帮助下拥有了出色的性能。你们中有些人可能听说过凤凰城惊人的200万个同时进行的Web套接字基准测试!
Elixir生态系统中另一个有趣的项目是嵌入式/ IoT项目Nerves。 Nerves使使用Elixir代码创建嵌入式系统成为可能,而以前您不得不使用像C这样的低级语言。这不会阻止您带来自己的代码(例如C,C ++,Python,Rust等)同时将Nerves用作IoT项目的平台。项目网站上说:
Nerves是一个完整的物联网平台和基础架构,可让您构建和部署可维护的嵌入式系统。
在谈论Elixir的优点时,很难不谈论Erlang及其虚拟机BEAM(Bogdan的Erlang抽象机)的优点。在许多方面,它都是Elixir的最大卖点。我们现在正在谈论Elixir的并发部分。多年以来,Erlang和BEAM都显示出了其弹性,例如,其AXD301交换机为爱立信提供了9个9(99.9999999%)可用性。 3以“让它打破”而闻名。通过与Erlang兼容,Elixir继承了许多这些特性。
Elixirs的创建者Jose Valim将创建Elixir的动机因素之一归因于多核CPU的兴起以及对它们的利用。 Ruby和其他具有全局插入器锁(GIL)的语言对此进行了限制,但是事实证明,Erlang VM以及OTP的工具和设计原理是创建并发,高性能和弹性应用程序的绝佳选择。
BEAM中的所有内容都是一个过程。这些不是OS进程,而是可以廉价生成和销毁的轻量级进程。 Erlang的共同发明者Joe Armstrong在其博士学位论文中总结了Erlangs有关流程的原则:
旁注:对于某些人来说,这听起来似乎有些陌生。某些面向对象的语言具有相似的原理,但不是将过程应用于对象。据报道,Smalltalk是Erlang的灵感来源之一,考虑到Erlang是一种功能性语言却比某些面向对象的语言更面向对象,这很有趣。当然不是这种情况,因为OOP的定义已经随着时间而改变,并且Erlang是一种功能语言,但是考虑相似之处很有趣。 😄回到主要故事! 😅
通过消息进行通信的流程的这些独特原理为创建并发应用程序奠定了良好的基础,但还有一个难题:OTP。
与本文的其他许多部分一样,OTP是一个重要的话题,可以单独发表,但我会尽量简化它!如今,这个名称有些奇怪,但是它是由爱立信为其80年代和90年代的电话交换机创建的,因此在这种情况下更有意义。
OTP是许多Erlang应用程序不可或缺的一部分。本质上,OTP是一套设计原则和标准,包括工具和库,这些工具和库使创建符合它们的应用程序更加容易。 4
由于Elixir与OTP兼容,我们可以利用数十年来在高压和关键应用中经过实战测试的这些原理和技术!
幸运的是,您不需要了解或了解Erlang,BEAM和OTP。无需深入了解这些主题,您仍然可以获取高性能的Web应用程序和具有弹性的IoT应用程序的好处。这肯定会有所帮助,但这不是前提条件。这对Elixir来说是很棒的事情:这是一种经过考验的基础,易于接近的语言! 💪
这可能不是您对完美语言的想法。这也不是我的,但这并不能阻止我使用我支配的出色工具。如果您全都喜欢Haskell或类似的东西,那可能就不用了,那就可以了。不管您的喜好如何,您现在都可能对Elixir和Erlang有所了解,并且掌握更多知识总是一件好事。 😄
如果您想查看Elixir,我建议您查看官方的《入门指南》或交互式指南,尝试Elixir,然后尝试与Phoenix或Nerves合作的项目。亲身实践的经验总是比您在互联网上阅读的经验更好! 🤓
s!顺便说一句:BEAM上还有其他语言。 Lisp变体以及最近的一些研究(如果您喜欢的话)都可以在强大的静态编译的类似ML的语言中工作!