最初发布在我的个人博客上:https://blog.alec.coffee

在对一些编程技术感到满意之后,开发人员通常会停在那里。 您的工作和维护的系统可能全部使用一种或两种语言。 您一次又一次地使用相似的模式来解决相同的问题。 Elixir是一种相对较新的编程语言,使我对打破这种停滞思想的新技术敞开了大门。 学习一种新的编程语言可以为您介绍使用现有技术永远不会遇到的技术。 在设计新系统时,它会扩展您的工具箱。 想象一下,木匠被困在一套特定的工具上多年了,他们将只能制造有限的工具。 在学习了编程语言多年(学校,合同工作,合作社等)之后,它摆脱了专注于尽快完成编程工作的想法,这令人耳目一新。 没有时间表可以告诉您学习的速度,也没有同行可以依靠您来完成自己的工作。 我发现在这种轻松的环境中,消化更大的认知负荷变得容易了。

TLDR的事实速览
- Elixir只是Erlang之上的语法,Erlang是在BEAM VM之上构建的经过实践检验的语言
- 语法类似于Ruby,因此学习语法非常简单快捷,特别是对于熟悉它的开发人员而言
- 我是否提到它是功能性的! (纯函数式编程IMO值得在认知上进行投资,请点击此链接以了解Elixir的使用方式)
学习最近创建的编程语言的好处之一是,它是建立在现有最佳实践之上的。 当创建者花时间思考其他开发者经常面临的问题时,就会发生这种情况。 每个开发人员都认为“状态管理很难”,“很难零时间部署新代码”,“很难维护我的系统”。 Elixir希望减轻这些问题的困扰,并使用围绕VM封装的功能方法来实现这一目标,从而使分布式/并行编程成为一等公民。
例如,Elixir是由开发人员构建的,他们看到了Ruby语法的生产力,功能编程的可维护性以及Erlang的可伸缩性。 正如上面的模式匹配示例中所展示的那样,该语言的这些功能使其成为最近构建的语言的引人注目的展示。
例如,Elixir是由开发人员构建的,他们看到了Ruby语法的生产力,功能编程的可维护性以及Erlang的可伸缩性。
电线连接电线

Elixir坚实的基础建立在名为OTP的库之上。 OTP是一种处理分布式编程中出现的所有问题,跨节点思考工作,处理异步消息等的绝妙方式。它不仅是功能库,而且是在其中工作的范例。 这样可以使整个系统和大型团队的工作保持一致。 Elixir应用程序由许多独立的进程组成,而不是由单个进程来处理整个应用程序(例如Node.js)。 这些过程使用消息相互通信。 这释放了许多很酷的功能,由于消息只能是不可变的,不允许指针,因此进程现在可以跨机器运行。
您内部的批评者会说,使用这种新语言的潜在弊端是未经考验。 通常这是一个有效的批评,而对于Elixir则不是这样。 它建立在其之上的VM Elixir很老了。 Erlang的最初开放源代码发布是在1998年,而在那之前,爱立信一直在内部使用它很长时间。 这些都是电信网络所使用的重要服务,无法承受停机时间。 例如,这就是非常酷的热代码发布功能的出现方式,使开发人员能够在不关闭服务器的情况下发布新的Erlang / Elixir代码。
我的经验

去年,一位同事邀请我加入他的读书俱乐部。 “让我们学习这种新语言。”我听说这是新事物,所以我说,“可以!”。 我们每个月要花几个小时来阅读《 Elixir in Action》一书中的一章。 最初,加入这个团队是令人生畏的,因为我比该小组的其他成员还年轻,但我给了机会。 随后进行了许多精彩的讨论,并深入了解了我之前从未涉足的主题。 我很感谢以前的自我同意加入,因为我不仅学到了很多东西,而且还与公司的同事保持联系,否则我将再也没有联系。 通过在流程之间管理状态时向我展示了良好的实践,它帮助我通过了Flipp对事件驱动系统的采用(想想Kafka)。 保持流程小巧,纯净和实用是良好的工程实践,并且是Elixir工作原理的基础。 我不需要立即构建任何东西或完成任务,我从学习的乐趣中学到了很多东西。
常见的意见和问题

我的团队对过去一周学习了3个Javascript框架之后必须学习的内容感到不满意。
一旦您开始构建必须扩展或需要处理数百万个请求的事物,您的通话凭单就会增加。 造成这种情况的原因通常是您无法预测这种规模的流量,推送通知发出一项新功能,每个人都开始使用您的API。 您目前如何使用Node或Ruby处理此问题? 您只需增加装箱数,然后在加载完成后减少装箱数。 这变得很昂贵,开发人员不应该仅仅为了解决问题而投入金钱。 Erlang VM进程(与传统进程不同)具有固定大小,这是mega 。 在一定程度上,这从根本上解决了这个问题。 知道有多少内存进程,就可以为您提供类似神的能力。 VM可以准确地告诉服务器它可能使用多少内存。 例如,您可以使用HTTP状态代码429响应客户端,而不必翻倒并重新启动盒子。 凌晨1点不再有意外的内存加载唤醒开发人员!
好的,这是涂料,如何处理错误?
错误是Elixir中的头等公民。 进程很小且隔离,因此当引发错误时,整个应用程序进程不必转储其堆栈,而仅转储隔离的进程。 当确实发生错误时,由于过程代码较小(根据Elixir约定),因此更易于调试。 进程是如此之小,以至于每个进程都有一个监视器(另一个OTP祝福),当一个进程终止时,它可以运行一些代码。 例如,示例监视器可以重新启动该过程,以便它可以接受更多消息。

另外,在Javascipt中提出模式匹配的建议也很整洁。 明显的证据表明每个人都在喝…等待… 长生不老药 。

前进的道路
我希望对Elixir的某些功能的介绍能鼓励您学习更多。 我只是简单介绍了BEAM VM可能提供的服务。 我留下这张图表来显示Elixir在Stackoverflow上与其他流行语言相比的受欢迎程度:

趋势呈上升趋势,但要成为主流,还有很长的路要走。
展望未来,我计划只是编写越来越多的Elixir代码,并使它变得更加舒适。 HackerRank将Elixir作为环境,因此它是练习语法的绝佳资源。 我想做的下一件事是开始在[Phoenix](https://github.com/phoenixframework/phoenix)中创建一些东西。
我在学习过程中使用的另一个资源是Elixir Toronto Meetup Group on Meetup。
阅读资源
我们在读书俱乐部期间读的书叫做《不老长寿药》。 一本非常好的书,详细介绍了整个语言及其功能。 起步很慢,但是随着您开始全神贯注于语法,它很快变得非常有趣。

这是我开始的另一本书,更容易上手。 这是一本有趣的书,介绍了为什么Elixir是一种引人注目的语言。 这是一个令人兴奋的泵,因为它实际上只是在表面上掠过。
