Elixir/Phoenix
Elixir
我们希望功能语言Elixir在2020年代成为Web应用程序开发领域的主流。
为什么是“功能语言”?为什么是长生不老药?
这是因为围绕Web应用程序的环境正在迅速变得更加复杂。现在,我们可以轻松处理具有许多核心和巨大内存的计算机。因此,无论他们是否喜欢,我们都会继续创建更复杂的Web应用程序。
为了使复杂的系统正常运行,将系统分解为简单零件的集合很重要。如果可能的话,希望这些部分彼此独立且平行地运动。功能语言适用于构建此类系统。
功能语言有很多类型,但是我们特别希望Elixir。 Elixir的语法类似于Python,PHP,Ruby和Perl等Web开发中的流行语言,因此过渡障碍非常低。它还具有吸引程序员的有趣功能,例如模式匹配和管道运算符。
Elixir是一种诞生于2012年的新语言。截至2019年,它被认为处于技术生命周期的第一阶段(创新者)1,但我们预计在2020年代的某个阶段,我们将从早期采用者阶段过渡到早期多数阶段。的
-
1
Programming Languages InfoQ Trends Report - October 2019
功能语言的特征
大多数编程语言都有“功能”的概念。某些语言可能将其称为子例程,方法或过程,但它们本质上是同一件事。
因此,第一个听到“功能语言”一词的人会感到不舒服。一般来说,这听起来像是编程语言的一个词。但是事实并非如此。
实际上,术语功能语言没有广泛接受的清晰定义。因此,通过比较两种特定的语言Ruby和Elixir,我们将解释(部分)功能语言的功能。
Ruby和Elixir都通过命名来处理程序执行所需的各种数据(整数,字符串,时间等)。此名称称为“变量”。例如,让我们考虑当变量s
指向字符串并且该字符串的长度为3或更短时,在末尾添加"!"
的过程。
现在s
指向字符串“abc”
。 该字符串存储在存储位置中。 在Ruby中,可以将这些数据直接更改为“abc!”
。 但是,Elixir无法更改数据本身。 而是将数据转换为另一数据。 具体来说,“abc”
和“!”
连接到以创建字符串“abc!”
,并且该字符串再次与变量s
关联。
尽管它看起来似乎很小,但实际上具有决定性意义。如果两个程序X
和Y
在同一台计算机上并行运行,并且两个变量s
都引用存储在相同内存位置的字符串"abc"
,则2如果两个程序几乎同时执行上述过程会怎样?
在Ruby的情况下,根据时间安排会发生一些不良情况。 在X确认变量s
指向的字符串的长度为3之后,Y
立即向同一字符串添加“!”
。 变量s
指向的字符串将更改为“abc!!”
。
但是,Elixir不会发生这种情况。这是因为原始数据保持不变,而另一个数据是新创建的。换句话说,Elixir无需更改即可转换数据。
因此,更改和转换之间存在很大差异。功能语言Elixir的最大特点是无法更改数据。用Elixir编写的程序会贯穿数据转换链。诸如Elixir之类的语言被称为“功能性”,因为这种数据转换类似于数学术语“功能”。
当然,如果您在Ruby中仔细编程,则不会发生上述问题。但是人类会犯错误。在涉及并行处理的情况下,Elixir更安全。
Phoenix Framework
Phoenix Framework(Phoenix)是用Elixir编写的Web应用程序开发框架。它在很大程度上受Ruby on Rails的影响。特别是,路由配置方法以及如何编写控制器和HTML模板非常相似。尽管在处理数据库时的气氛有所不同,但是基本思想很普遍。
我们特别喜欢Phoenix的地方在于它可以非常轻松地处理WebSocket。 WebSocket是用于在Web应用程序中实现双向通信的技术标准。使用WebSocket使开发单页应用程序(SPA)非常容易。
至于WebSocket,您应该注意Phoenix LiveView。这是通过在服务器端组装HTML数据,使用WebSocket将差异发送到浏览器端,并通过重写DOM来更新浏览器屏幕。
如果您使用LiveView,则可以在Elixir中编写迄今为止用JavaScript编写的代码。这有两个优点。一种是您不必用两种语言编写验证代码。另一个是大多数处理都在服务器上完成,从而降低了秘密泄漏和未授权访问的风险。
Elixir/Phoenix开发Teamgenik
在2016年,我们发现了Elixir/Phoenix进行Web开发的可能性,并通过实验性应用程序开发获得了专有技术。
在2018年夏天,我们使用Elixir/Phoenix开始了新的挑战。那就是Teamgenik。
Teamgenik是一项服务,可为用户提供成为“迷你SNS”所有者的体验,但其特点是能够在浏览器上创建“迷你应用”并向“迷你SNS”添加功能。我们发现Elixir/Phoenix(尤其是Phoenix LiveView)可用于有效地实现此“迷你应用程序”。
目前,我们将继续日夜开发Teamgenik。预览版将于2019年12月上旬发布。我们计划在2020年春季发布1.0版。