斜坡的Elixir

2021-06-04 08:06:54

许多Fintech初创公司找到了Elixir为他们的健康合适 - Divvy,Brex,SolarisBank AG,Teller,使用Erlang的传统延迟回到Klarna。

嗨,我是pablo! 👋我一直是过去十年的胜利的erlang难民迷,以及斜坡的首次雇用之一。当我被播放设计了一些系统时,我很高兴选择Elixir。我也会超过一些原因,这是一个伟大的融合的原因。

大多数“为什么Elixir”帖子继续描述Beam和OTP的功能(Erlang的虚拟机以及分别可靠,Concurrentystems的抽象库)。并且有充分的理由!无论您是Erlang还是Elixir,与大多数编程环境相比,复杂,分布式,高可靠性系统的内置资源,非常有价值。在Deconstruct 2018上的Ispoke在Deconstruct 2018年。如果你好奇,我还在这里有一些指向的东西,如果你好奇:

非常支持旨在避免系统故障的并发和并行性的支持。看到Erlang和Elixir的灵魂由SašaJurić。 askyourself当您观看“我如何使用这些属性,节点,python或java如何实现系统?”

正确的担保部分失败和瞬态错误(请参阅弗雷德Hebert的担保)。瞬态错误极为常见,大多数环境都没有处理它们的伟大机制。

高效的字符串结构,尤其适用于模板渲染(Evan Miller的Elixir RAM和厄运模板)。

简洁地,Beam是一个用于弹性,并发应用程序的战斗VM,而OTP构建了在其他环境中难以找到的抽象。这些已经完成了改变我如何考虑的是关于我曾经遇到过的其他事情的编程系统,而且我错过了以来我正在努力的其他环境。

所以将它全部移动到erlang?不完全的。即使是OTP / BEAM的魔力,Erlang也可以采用挑战。已经完成了惊人的工作来改善这一点,从rebar3等软件到文档,如采用erlang。虽然Ihighly推荐每个人都会尝试eRlang,但elximade的许多便利设施更容易选择高增长的公司环境。

首先,语法对于来自其他环境的程序员更熟悉(这里是与Elixir相比的Erlang的一个例子)。语法对我来说非常有趣,我碰巧找到了erlang漂亮,但如果我假装我试图将他们介绍给erlang时,我会拒绝否认。

在生成的Phoenix项目上混合测试将默认情况下,使用数据库沙箱环境结构进行测试,默认情况下它更难设计一个测试套件,其运行时会随着时间的推移。你是否只想运行失败的测试?有混合测试 - 令人尴尬!只有在STDIN IFYOU想要在更新的测试上运行的方法。

还有Iex,Elixir Repl。通过梁的热代码重新加载,当您打开一个REPL时,您可以重新加载您在更改后使用RMYMODULE处理的模块,因此您可以使用REPL,而无需定期关闭Andopen。这两者都允许快速测试执行Andrapid原型/转机。

许多工具都有更友好的错误消息。我遇到了一个问题,elixir的创建者回答了我的问题上的问题,同时也推动了提交澄清了库图书馆的错误消息。

文档文化:Elixir库倾向于具有惊人的文档,由Doctests的工具证明,将在您的代码中运行代码段,以确保您的例子与现实匹配。此外,Pragprog还提供了一本我个人享受的伟大书籍。

最后(这值得自己的一篇文章),考虑符合人体工程学的员工,它具有像宏系统和SIGIL等工具。宏观大心化,当一致会做时,巨大地使用它们的危险有了这一说,灵活性可用于很大效果:Pheonix,EECTO和外出的大部分都来自授权这些构建。

我会特别提及两个特定的功能,我错过了Python,Node或Ruby等大多数环境:不可变形和模块结构。我对大多数动态语言的热点是他们是一个适合具有长期业务的初创公司的启动:你是一个针对您的创始工程师进行了优化的环境,在前7个月内快速地建造了,但价格是一个一套经过重复的obstacks,您的工程师将在未来7年内偿还。当你的头脑中,所有4名工程师都保持了第一个10kloc的那个,当你用40个中的人和400k唱名时,你的头脑中的第一个10kloc很难与......(和超越!哦,你现在拥有客户)。

显然,公司在各种技术方面取得了巨大的成功,而且获得了产品市场的健康,而不是夏天的优化;但是我认为不应该有争议的是要说的,想要了解或修改大型系统,它有助于有不变性,最具动态语言不会给你很多。 Elixir的无情地在这里发出闪耀.Consider以下行列线:

defmodule myapp .widgets do alias myapp .widgetconnection def augment_widget(conn,w =%widget {})do abbreviation = widgetconnection .find_abbreviation(conn,w)格式=缩写.signals |>枚举.map(& dependencies_for / 1)|>枚举.Filter(&适用_to(& 1,w))%{w |格式}结束#defp依赖关系_for(信号)do#defp适用_to(signal_deps,窗口小部件)结束

从MyApp .widgetConnection导入find_abbreviation def augment_widget(conn:connection,w:widget) - >无:缩写= find_abbreviation(conn,w)映射= [_dependencies_for(s)缩写中的s .signals] formats = [s在映射IF e_applicable_to(s,w)] w .formats = formats#def _dependencies_for(信号):#def _applicable_to(signal_deps,widet):

您知道Conn和W不会在find_abbreviation的调用中更改。在大多数环境中,您不知道您的结构是否会在您可以看到它们的位置进行变异,因此您不确定您可以在多大程度上进一步划分执行。以一种不可改变的语言,您可以在阅读它的同时相信整个函数身体的Thedata是相同的。

我们没有导入WidgetConnection,我们别名它,这意味着我们仅向完全合格的函数调用andedsome句法糖。这使得elixir模块不能包含在Thetoplevel上执行的代码的限制,这意味着我们不必担心循环导入:Inelixir,这两个模块都可以互相别人,但在Python中,您无法从中导入其他的定义。

因此,当Elixir应用程序生长和生长时,整个阶级的不确定性“在我面前的这个代码”消失了,因为有一大吨危险的身份,你知道这不是在做。你不自由自钱!函数调用对其他模块仍然可以调用网络,或者写入dB或删除文件。但是你确定它没有改变你正在寻找的变量,而且你不需要保持你头脑中的状态变化的宇宙了解代码正在做什么。

此外,“使该代码可见的模块的代码”还有一个强大的问题,我们也避免了。这可能会变得复杂! Khan Academy曾经花费了2个月的档案,而Instagram Engineering明确的谈判谈论Python的模块系统中的一些禁忌症。这里有描述“TANTLE”的盒式箱工程如何如何将Python模块加载其类型检查器,因为模块依赖性可能会在规模上变为异常挑剔。使用别名意味着不必担心定义阶段中的依赖性树。

这不是挑选Python;再次突出一个强度的Erlang和Elixir的核心设计选择,使其在其他语言中被烧毁的达义的Adeveloper。

坡道使用Elixir用于一些特定的,关键服务:我们的真实时间授权引擎(需要极高的正常运行时间)和我们的风险分析平台(需要强大的并发和数据管道)。也就是说,它不是我们大多数企业的权力:我们的最大服务是在Python中,我们的前端在卷曲作品中反应。当讨论如何最好地努力实现工程成功,而是临时的技术,我认为问道更为重要:

你的团队是否获得足够的睡眠,避免高压力条件?一点选择喧嚣很好,但不要紧缩。

你相信你的队友来支持和挑战你吗? NastyConflirt可能是努力团队动态的迹象,但缺乏健康冲突,ISALSO是一种反模式,信号低投资或信任。

显然,我喜欢Elixir让我做什么。但我会乐于荣誉资格的资格和任何技术选择的公司的荣誉。当我加入坡道时,对Python有一个明确的偏好:以前建造并缩放了Paribus的那些,并带来了很多与他们的缺点。而不是什么都不是:Python可以是一种绝对的快乐来使用❤️我最大的后端代码库是用Python编写的,它是大多数大多数大多数的时间。

但是在上面的服务中:我们的CTO要求我设计了我们的纽上班时间授权服务,他创造了一个IFETS安全的环境,以提出不同的技术堆栈,并给了我一个权威的所有权向前迈进。它的稳定性非常稳定,灵活地允许快速的特征开发,并且是我生命中最为骄傲的一些代码。良好的技术不仅仅与良好的培养和管理共存,这取决于它,所以尽可能多的乐趣,因为我与这篇文章一样有趣,当建造滥用时,它肯定有一个天花板。

我希望我能激起你对尝试Elixir的兴趣,如果你没有考虑它,那么(你知道它来了),如果你为你的下一个演出,请伸出援手! 过去两年的魔力是它的人,我们一直是人民,我们总是在寻找下一个与❤️制造的人 并介绍我们在您的公司支出的人! 我们的产品规划:我们帮助了数千个像Ro,更好的客户,更好的产品,并在浪费的花费中单击超过10米,消除手动+破碎的费用报告,并将其书籍更快地缩短86%。 用户喜欢Softwaredrives的影响 - 我们是G2上的第1次评级支出管理厂商。 让我们联系,触摸您的财务和会计团队,以便我们可以帮助您的公司花费更多!