巴西都发明两门流行的编程语言了!
创始人
2025-07-08 04:00:26
0

1993年,巴西里约热内卢天主教大学的三个老师发明了Lua。

图片图片

Lua以其简单性、小尺寸和可移植性,成为嵌入式编程语言之王。

除了游戏这个主战场之外,Luah还入侵了各种软件(TeX排版,Neovim,Nginx......),各种硬件(三星的电视、思科的路由器、TI的计算器,罗技的键盘......)

Lua的故事可以移步我这篇文章《巴西的编程语言都占领全世界了,中国怎么就不行呢?》

20年后,巴西人José Valim又发明了一个编程语言Elixir。

这个编程语言知道的人不太多,但是很多著名公司都在使用它。

图片图片

Elixir特别适合开发分布式、可扩展的、高并发的应用程序。

Discord的CTO在2017年的一篇文章中说道:

Discord 就是 Elixir 的早期采用者, Erlang VM 是我们想要构建的高并发实时系统的完美候选者,过去两年,系统中的并发用户数已达到近 500 万,每秒有数百万个事件...... 

如果让我从头再选择一次的话,我还会选择Elixir。

在Stackoverflow 2021年的报告中,在38种编程语言中,Elixir是收入排行第三的编程语言。

Elixir的作者是José Valim(下文简称何塞),本科在巴西圣保罗大学读电气工程,后来在意大利都灵理工大学拿到硕士学位。

图片图片

在意大利时他遇到了现在的波兰妻子,然后搬到了波兰。

在发明Elixir之前,何塞已经是著名Web框架Ruby on Rails团队的核心成员。

图片图片

可惜的是Ruby语言在并发,多核的表现不咋滴,没有解决并发问题的适当工具。

这让何塞有点沮丧,他不断研究其他解决方案,直到有一天,它发现了Erlang虚拟机。

Erlang虚拟机已经解决了高并发和分布式的问题,为什么不把Ruby移植上去呢?

但是Ruby的思想和概念和Erlang格格不入,没法子的何塞最终决定:发明一门新的编程语言Elixir。

在设计上,何塞借鉴了Erlang,Clojure和Ruby的思想。

Erlang :函数式思想、基础设施

Ruby:优雅的语法、标准库、命名方式

Clojure :基于协议的多态实现

大家可能觉得一个大牛发明一门新语言是很容易的,其实并非如此。

何塞并不是科班出身,也缺乏编译器的知识,也得从头学词法分析,语法分析......

他看了几本经典编译书籍如龙书,更关键的是阅读了Erlang、Ruby、JavaScript等语言的解析器源代码,然后才开始动手。

即使如此,何塞依然步履维艰,他的第一个Elixir原型非常糟糕,就像迷失在了山洞中的原始人,到处探索。

等到第一个版本发布,已经是两年以后了。

一门新语言出现以后,如果获得众人关注是最难的一步。

在这一点上,何塞充分学习了Rails创始人DHH的营销能力。

何塞开始走出去,在各种活动上宣传Elixir,接受各种采访介绍Elixir,写各种文章为Elixir造势。

提到Elixir,就不能不提Web框架Phoenix。

他们像当年的Rails一样,录制了一个视频:在15分钟内克隆一个Twitter。

图片图片

这个视频引发了不小的关注度,成功地引发了对Elixir和Phoenix的讨论,吸引了更多人来使用Elixir。

说到这里,可能大家会问:这个Elixir到底有什么神奇之处呢?

一般来说,我们要开发一个交互很强的Web应用,通常会这么来构建:

图片图片

在前端有各种框架和类库,如React,Vue等,在浏览器端处理:

1.数据模型,2.控制逻辑,3.视图模板 

后端主要提供数据接口,前端的JavaScript负责展示和逻辑。

让人吃惊的是:使用Phoenix的LiveView,这三个东西都被放到了服务器端,实现了服务器端的渲染。

图片图片

猛一看,这很难理解,举个简单的例子,我们现在需要实现一个计数器应用:

图片图片

在服务器端:

数据模型:就是那个Count数字。

客户逻辑:就是一些函数,来处理事件,事件是“增加按钮被点击”(increment event)或者“减少按钮被点击” (decrement event)

视图模板:用来渲染这个简单的界面

当用户点击“增加”按钮时,一个事件(increment event)通过websocket发给服务器端。

图片图片

服务器端收到后,调用服务器端的相关函数,修改数据模型,给count加一,然后渲染新视图,再发给浏览器。

浏览器收到新数据,就会展示出来:

图片图片

当然,服务器肯定不会把所有的视图都发回给浏览器,它会做优化,使用状态跟踪,diff算法,从而发送最少的数据。

在这个例子中,只需要告诉浏览器,那个count的值变了,仅仅更新这个值就可以了。

你可能觉得这种处理方式非常疯狂:对每个用户都保存这么多信息,用户多了该怎么办啊?怎么扩展啊?

图片图片

这就要涉及到Elixir的关键了,和其他编程语言不同,Elixir的process(如图中的Live View Process)并不是操作系统的进程(Process)或者线程(Thread)!

Elixir的process是非常轻量级的,在单台服务器上可以几十万,甚至上百万个process。

这也正是Erlang平台的优势所在!

使用Phoenix的LiveView,在代码复杂度不高的情况下,就实现了媲美单页应用良好的用户体验,可以说是非常漂亮。

图片图片

所以发明人何塞说:Elixir非常适合开发一切运行在socket上应用!

上世纪90年代,你写一段代码,放在那里什么也不做,两年以后,新的硬件就会让它的性能提升一倍。

现在摩尔定律失效了,CPU走向了多核,系统走向了分布式。

多核和分布式让编程变得非常麻烦,但是Elixir用函数式编程的不变性和Erlang平台正好解决了这两个问题。

如果你也有类似的需求,强烈建议关注下这门独特的编程语言,它也许就是帮助你击败竞争对手的秘密武器。

全文完,觉得不错的话点个赞或者在看吧!

参考资料:

https://www.youtube.com/watch?v=U_Pe8Ru06fM(本文中LiveView例子的来源)https://www.youtube.com/watch?v=lxYFOM3UJzo

https://www.youtube.com/watch?v=IZvpKhA6t8A

如需转载,请通过作者微信公众号coderising获取授权

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...