Ruby vs Elixir | 2022 该选哪个?

2,324 阅读10分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第17天,点击查看活动详情

Contents

Ruby 和 Elixir(以及 Phoenix) 的起源

Ruby 和 Ruby on Rails

RubyRuby on Rails 可能并不需要过多的介绍,因为它们已经被广泛的应用在 Web 开发领域。

Ruby,创建于 1995 年,目标是让开发者的工作更加效率和有更多的乐趣

Ruby on Rails 的通过提供更多的特定功能的 gems 库使得可以是开发者在开发 Web 应用的时候更效率。对于有经验的开发者来说,ROR(Ruby on Rails 简称)是一个非常优秀的 Web 框架,具有创建功能强大且更加健壮的 Web 应用程序的能力。

RoR 改变了 Web 应用开发领域,通过引入工具促进应用程序快速开发并且使得编写代码变得有了更多的乐趣,ROR 也为之后的一些 Web 框架确立了方向。

ROR 扩展阅读

你也可以阅读另一篇关于 Ruby on Rails 的文章 Why Ruby on Rails Is Still a Good Choice in 2022 [UPDATED]

Elixir 和 Phoenix

Ruby 和 Elixir 有很多相似的地方,Elixir 的创建者 José Valim 曾是 Rails 团队的核心成员,他非常赞同 Ruby 灵活、干净、优雅的语法,但是 Ruby 使用的越久,就越来越意识到 Ruby 还有很大的可改进的地方,它最大的一个关注点 - Ruby 代码在并发和吞吐量方面的限制已经被解决,José Valim 明确了自己要做什么,那就是基于 Ruby 的优点并在 Ruby 指向创造一个完全不同的语言,构建于 Erlang 虚拟机上来解决并发限制的问题,Elixir 的构想诞生了。

至于 Phoenix,它是一个基于 Elixir 的 Web 开发框架,由 Chris McCord 开发出来,与 José Valim 一样具有 Rails 框架的影响,Chris 的 Phoenix 框架借鉴的 Rails 的基本结构,旨在创建一个比 Rails 更加优秀的 Web 框架。

下表为 Ruby, Elixir, RoR, 和 Phoenix 的简单比较

 RubyElixirRuby on RailsPhoenix
时间1993201220042014 
作者Yukihiro MatsumotoJosé ValimDavid Heinemeier HanssonChris McCord
作用Object-oriented programming languageFunctional programming languageServer-side web application frameworkWeb application framework
原因Developer happiness Concurrent languageRapid application developmentSimplicity and joy in writing modern web applications with functional ideas

搞清楚 Ruby 和 Elixir 的优劣势

在有了对 Ruby 和 Elixir 的基本了解之后,我们来看看这两种编程语言各自提供了什么,并多了解一些它们在各自最流行的框架上的一些额外的细节。

Elixir 的优势

经得起时间考验的解决方案(指 Elixir 运行在 Erlang VM 上)

上面已经提到,Elixir 是运行在 Erlang 虚拟机上(BEAM),不仅仅是因为 Erlang VM 是互联网历史上最古老的虚拟机,还因为 Erlang 虚拟机目前仍然在使用。由于 Erlang 应用于电信行业,所以 Erlang 非常适合构建高并发的应用。

分布式并发

也是由于 Erlang 在电信行业的广泛应用,使得 Erlang 适合管理大量连接,Elixir 也支持并发。Elixir 可以在单台或者多台机器上创建大量连接。

使用 Elixir 的一个最大的好处就是你可以使用单核服务器上的单核 CPU 或者多核服务器上的多个 CPU 核心

plus:早期的语言如 Python、C 只能使用服务器的单核进行计算(即使服务器有多核),当然也是由于这些语言设计与单核计算机时代。

轻量级进程

在 Elixir 中,代码通过进行来执行,Elixir 并发的核心就是每个进程都是轻量级的继承,仅消耗极少的内存和 CPU,可以同时创建成千上万个轻量级进程。

因此 Elixir 非常适合高并发、高容错性的应用。

可伸缩性

如果系统或者应用在未来的流量会大增,Elixir 的一大优势就是可以最大程度的利用一台机器。使用 Elixir 无需在应用程序的架构中添加更多服务器来满足越来越多的用户产生的带宽需求。

周到的语法设计

Elixir 有非常清晰的语法、模式和设计,有助于开发者可以更容易理解函数式编程语言中的那些晦涩难懂的概念。

Open-Telecom 平台 (OTP)

Elixr 源自于 Erlang 的 Open-Telecom 平台 (OTP)。 OTP 是一组旨在简化并发应用程序创建的工具。OTP 最大的特点是编写容错应用程序。通过内置的框架或者工具,开发人员可以构建自己的能够处理大并发连接的应用。

Erlang 库

Elixir 可以调用 Erlang,Elixir 项目中可以非常方便的集成 Erlang 的库。

相关文档

Elixir 官方网站 上有大量的 Elixir 使用的文档,以及非常活跃的 Elixir 社区,文档也可以从终端中阅读,非常方便。

Phoenix 框架的性能

Phoenix 是最流行的 Elixir Web 开发框架,喜爱响应时间可以达到毫秒级。虽然 Rails 的响应时间也可以达到毫秒,但是差了一个数量级。

Elixir 的劣势

Narrow Talent Pool

虽然 Elixir 诞生于 2011 年,但 Elixir 仍然被认为是一种小众语言。导致很多方面的空白。然而,由于 Elixir 的设计参考了 Ruby,所以 Ruby 开发者会更容易学习以及上手使用该语言。但是,对于许多缺乏经验的开发人者,一开始可能会比较困难。

函数式编程

Elixir 是函数式编程语言,而 Ruby 是面向对象编程语言(也支持函数式编程)。以这种方式理解这两种编程范式的差异可能会有些困难。但是从一种范式转换到另一种范式并不是不可能的,这只是获得一种新的软件开发思维方式的问题。

相对较小的生态

上面提到 Elixir 虽然可以调用 Erlang,但是即便对老手来说,构建 Elixir 项目时依然会从零开始。

Ruby 的优势

高效并使人愉快的一门语言

在创建 Ruby 时,松本幸弘的目标是构建一种让开发者乐于使用的编程语言. Ruby 简洁的语法显然有助于开发者阅读和编写代码。

优秀的框架:Ruby on Rails

大多数人听到 Ruby 时,立刻想到 Ruby on Rails — 这也证明了框架在语言中的地位。因为 Ruby on Rails 彻底改变了现代Web应用程序的创建方式。

通过引入 gems,Ruby on Rails 使得构建 MVPsprototypes, Proofs of Concept 成为可能,甚至可以通过少量的代码快速构建一个小型应用。

庞大的生态

Ruby 和 RubyonRails都有一个庞大的库的生态。gem 可以实现你想要实现功能。无论你需要什么工具来构建一个成熟的应用程序,你都会找到一个工具来帮助你。丰富的 gems 使 Ruby 和Ruby on Rails 成为构建这应用程序的快速且成熟解决方案。

活跃的社区

Ruby和Rails社区都很活跃,有很多贡献者发布了现成的开源解决方案。

知名度

在 Elixir 和 Ruby 的知名度上,很明显 Ruby 更胜一筹。更高的知名度意味着更多的资源,更大的社区以及更多有着丰富的语言使用经验的开发者。

Stack Overflow 2022 languages

Source: Stack Overflow 2022 Survey - most popular technologies

在下面这个排行榜中,Elixir 的排名在 50 名开外。

Tiobe ranking 2022 June

Ruby’s popularity. Source: TIOBE Index for June 2022

此外,与知名度较低的 Phoenix 相比,使用 Rails 可以获得更多的支持和的第三方库。

Ruby 的劣势

并发

与 Elixir 相比,Ruby 不适合开发并发 Web 应用。

可以使用Ruby 并发工具来编写并发 Web 应用程序;然而,如果没有额外的工具,Ruby的全局解释器锁(GIL)一次只允许执行一个线程。如果没有内置的并发性,开发者就无法有效地管理可用的硬件资源——这是每个大流量的应用程序所必需的。

性能与开发速度

Ruby速度不慢,但不如Elixir快。然而特殊情况下,较差的性能通常是缺乏经验的结果。

经验丰富的 Ruby开发者可以快速创建企业级应用。但如果你设计了一款流量大的应用,Ruby 都可能无法胜任。 当然,随着 Ruby 3 的推出,这一点可能会发生变化,据说它的性能与以前的版本相比提高了三倍。

可维护性

GEM 使 Ruby 和 Rails 成为开发人员在编写 Web 应用时有许多现成的解决方案可以选择,但在长期维护方面,GEM 也可能导致许多问题。

在 Ruby 中 惯例优于配置,以保持代码简洁并使开发人员更有效率。但是,当经验较少的开发人员不知道 Rails 背后的细节时,可能会导致阻碍生产力和维护的错误发生。

Elixir 和 Ruby 的最佳实践

在了解了这两种语言之间的差异之后,我们来看看 Elixir 和 Ruby 的最适合的使用场景。

Elixir - 最佳实践

  • high-traffic applications (messages, chats, etc.) 大流量应用
  • applications with 100–1,000,000 simultaneous connections on a single computer,单机需要 100-1,000,000 个连接的应用
  • Web applications with a large number of users (thousands or hundreds of thousands) 大量用户的应用
  • Internet of Things app 物联网应用
  • distributed systems 分布式系统
  • software performing asynchronous tasks 异步任务应用
  • apps likely to be scaled and expanded in the future 可伸缩和扩展的应用

Ruby - 最佳实践

  • MVPs(Minimum Viable Product), PoCs(Proof of Concept)既小项目
  • app concepts,概念应用
  • prototypes,原型
  • marketplaces
  • 用户数不多的中小型应用

当然,可以同时使用 Elixir 和 Ruby,取其精华去其糟粕。

规模和用户对 Web 应用程序是相对的概念。一般来说,Ruby 可能会遇到一款大流量、类似 Twitter 的应用程序或类似的需求。

最后,到底是选择 Elixir 还是 Ruby?

这种问题一般都没有明确的答案。Elixir 和 Ruby 都是构建各种应用程序、软件或系统的优秀工具。重要的是始终选择最适合项目的技术。

事实上 Elixir 已经得到一些曝光,许多软件公司都将 Elixir 纳入了他们的产品中,我们也这么做了,因为这是一项伟大的技术,可以产生令人难以置信的结果!

举个例子:比如在一台服务器上创建130万个连接!。但是,对于不需要 Elixir 独特功能的项目来说,这可能是一种过火的做法,所以仅仅因为这项技术越来越受到关注,并不意味着你应该不惜一切代价追随它

如果的应用是最佳实践中列出来的那些应用,请直接选择 Elixir,使用 Elixir 将会获得非常好的体验。但是请相信这也是那些老项目中的优秀的 Ruby 代码所强烈需要的。

本文翻译自 www.monterail.com/blog/ruby-v…