使用Erlang(和Elixir)编写并发应用程序

披露: 您的支持有助于保持网站的正常运行!我们会为此页面上推荐的某些服务收取推荐费.


Erlang是用于构建并发应用程序的通用编程语言.

它最初是为电信应用开发的,是一种高度可扩展的功能语言,非常适合电信,Web应用,分布式计算,即时消息传递,电子商务和其他需要持续连接并需要处理来自同步输入的服务。大量来源.

Erlang和长生不老药

使Erlang吸引现代程序员的一些功能包括:

  • 并发性,允许Erlang程序接受来自多个源的输入并在分布式环境中运行.

  • 容错能力,即使程序的某些元素出现故障或出现故障,也允许系统继续运行,这使其成为始终在线环境(如Web社区或电信平台)的高度有用的语言.

  • 加载热代码,无需停止或重新启动系统即可修改代码和更新程序.

  • 消息传递而不是共享变量,从而允许进程以更高的并发度进行通信.

  • 垃圾收集,提供自动内存管理以提高速度和性能.

Erlang不像某些编程语言那样容易入门,因为它的语法和功能设计非常独特,并为新程序员创造了清晰的学习曲线.

历史

Erlang语言由爱立信员工Joe Armstrong,Robert Virding和Mike Williams于1986年开发。.

该语言旨在改善现有的电话应用程序,并且受到PLEX语言的极大影响.

Erlang的第一个版本已在Prolog中实现,但是事实证明这对于电话交换来说太慢了。为了解决这个问题,团队于1992年开发了BEAM虚拟机.

BEAM以更快的速度将Erlang代码编译为C,从而使Erlang能够快速从原型语言过渡到实际应用程序。 1995年,Erlang被实施到AXD ATM交换机中.

但是,在1998年,爱立信无线电系统公司(Ericsson Radio Systems)禁止在任何新产品中使用Erlang,因为它试图将所有产品迁移到非专有语言.

新政策促使Joe Armstrong等Erlang程序员辞职,并最终导致该团队于当年晚些时候将Erlang发布到开源世界.

爱立信不再是专有产品,并在电信界赢得了广泛关注,后来又改变了对Erlang的立场,并重新聘用了Armstrong.

目前,Erlang已被T-Mobile,Whatsapp,Ubiquiti和IDT Corp等全球电信公司积极使用。爱立信继续维护该语言,并将其用于爱立信的支持节点和移动网络(包括其LTE网络).

资源资源

鉴于对并发编程的巨大需求,基于Web的移动技术一直在不断扩展,Erlang的受欢迎程度仍在不断增长,许多认真的开发人员都在做出转变.

因此,有大量免费的在线资源可帮助您入门并在此过程中提供帮助.

  • Erlang.org:Erlang的官方网站,此页面包括软件下载,文档和用户指南,在线资源和社区的链接以及有关最近新闻和即将发生的Erlang事件的信息.

  • Erlang Central:这个社区驱动的网站提供了您入门和保持Erlang知识所需要的一切。它托管教程,视频,Wiki,工作委员会和社区论坛.

  • 主要是Erlang:针对所有内容的定期播客。他们讨论基本的编程概念,采访关键的创新者,并向经验丰富的新Erlang程序员提供建议.

  • Erlang工厂:这个年度技术会议聚集了来自世界各地的Erlang开发人员,讨论新的创新和理论,并提供了一系列可选的3天强化培训课程.

图书

Erlang与大多数语言完全不同,甚至经验丰富的程序员都可能希望获得一个方便的指南来跟踪其某些怪癖。无论您已经编程多年,还是专心设计下一个大型移动应用程序,都有一个适合您的Erlang标题:

  • 《 Erlang编程:并发世界的软件》,作者:Joe Armstrong:由Erlang的原始作者之一撰写,这是该语言及其在并发环境(如云应用程序,多用户游戏和基于社区的环境中的用法)的权威性指南。网站。本书是为那些以前在函数式或并行编程方面经验很少的人设计的,并通过教程和实际示例讲授了这些概念。.

  • Zachary Kessin的《使用Erlang构建Web应用程序》:专为具有Erlang基本知识的经验丰富的Web开发人员设计,本书将引导程序员完成一系列简单的Web Service编程项目,为他们准备构建自己的Web应用程序并使它们联机.

  • 学到一些Erlang,以造福所有人!弗雷德·赫伯特(Fred Herbert):正如幽默的标题所暗示的那样,这本书很高兴地承认Erlang的语法是非常规的,它的数据结构是不寻常的,并且它的类型系统通常不适合许多新手使用-这正是为什么您需要有关其不寻常的指南的原因,但功能强大,惯例。它以非常基本的技术开始缓慢,并随着读者适应了新语言的复杂性而逐渐融入了更复杂的编程概念。如果您不需要纸本,则作者还可以免费在线获取该书.

  • 介绍Erlang:Simon St Laurent编写的《函数式编程入门》:这本书花了大量时间在安装和Erlang的shell上,以确保新程序员(或Erlang初学者)对命令行界面完全满意,然后继续将语言分解为非常基本的概念,并通过创建简单程序来演示它们.

  • Cesarini和Vinoski撰写的使用Erlang / OTP进行可伸缩性设计:本书面向有经验的Erlang程序员,他们希望扩大他们的理解并利用开放电信平台(OTP)来设计和构建复杂且可扩展的商业级系统.

Beyong Erland:长生不老药

Elixir是一门相对较新的语言,但历史悠久。这一切都始于Erlang.

专家史

自1980年代中期以来,Erlang一直做得很好,主要是设计电话应用程序。但是快进三十年,并考虑高度可扩展的Web应用程序的需求.

例如,Pinterest每秒传递14,000条通知。 Facebook需要从中接收更新并将消息推送回16亿活跃用户(带有B!)。这种高并发性和高可用性正是Erlang设计的目的.

因此,这种古老的战马电信语言突然变得流行和流行。以新形式除外.

事实证明,Erlang确实很难读写。自数十年前开发以来,这不足为奇。在“有趣的使用”成为语言设计的重要考虑因素之前.

Erlang不适合在Ruby和JavaScript上成长的那一代开发人员。除了可用性之外,Erlang还没有现代Web应用程序可能需要的所有功能。.

因此,在2012年,何塞·瓦里姆(JoséValim)创建了Elixir。 Elixir代码编译为Erlang字节码,并在Erlang运行时上运行。您甚至可以直接在Elixir中包含Erlang代码(类似于在CoffeeScript中包含JavaScript的方式).

Valim是Ruby on Rails开发小组的成员,甚至撰写了一本有关Rails开发的书。 Ruby on Rails团队非常重视开发人员的经验,这种担忧影响了Elixir的设计.

语法与Ruby非常相似,并且比Erlang更具可读性。除了更简单的语法外,Elixir还扩展了Erlang的功能,以包括元编程,多态和内联文档等。.

函数式编程简介

像Erlang一样,Elixir是一种功能编程语言。这与大多数其他语言几乎有所不同,大多数其他语言都是必须的,并且通常是面向对象的.

大多数编程语言都有某种称为“函数”的代码块语法。或者,在某些面向对象的语言中,它们被称为“方法”,但是每个人都知道方法只是附加到对象上的“函数”.

但是功能真的是功能?

在软件开发中,我们习惯于执行某些功能。我们称这些为“副作用”。

但是在数学中,函数没有副作用。您无需使用绘制圆的所有点的函数来定义圆,并且还可以将“简介几何”的课程号更改为“假想几何”.

在数学中,函数是确定性的;给定任何特定的输入x,它将始终返回确切的输出y,而不执行其他任何操作.

通过在编程中考虑副作用,我们引入状态-正在运行的程序环境的当前条件。状态的问题在于状态会随着时间而变化.

变量现在可能意味着一件事,而从现在开始十分钟可能意味着另外一件事。这意味着使用输入x的特定函数调用可能在两个不同的时间返回y的两个不同的值.

那是问题吗?那要看。没有一种最流行的开发语言纯粹是功能性的,因此显然有可能使用依赖于副作用和全局状态的语言来构建各种事物(或几乎所有事物).

但是,在高度分散且始终在线的系统中,这可能是个问题。如果系统分布在数十台(或数千台)物理计算机上,那么您如何将更改传播到全局状态??

如果系统确实出现故障,您如何快速恢复全局状态?如果函数调用可能在不同的时间返回不同的值,那么如何确定今天运行的测试明天仍然可以通过?

函数式编程试图通过无状态避免所有这些问题。功能设计的程序是完全确定性的功能的集合,这意味着整个系统都是确定性的。给定任何特定输入,可以保证输出.

长期以来,学术计算机科学家一直对这种数学纯度感兴趣,但是对软件开发的现实世界一直不感兴趣-直到突然之间,由于互联网的需求,每个人都对它感兴趣.

函数式编程是Web应用程序开发中最重要的当前趋势之一.

功能编程资源

如果您确实想了解Elixir,那么就需要了解函数式编程。从这里开始.

  • 文章

    • Wikipedia上的Functional Programming文章:对该主题的非常深入的概述.

    • 不要害怕函数式编程:为JavaScript开发人员编写的相对容易理解的函数式编程说明.

    • 函数式编程的实用介绍

    • 函数式编程基础:全部内容?

    • 什么是函数式编程?.

  • 影片

    • 功能编程;什么?为什么?什么时候?

    • 第一性原则的函数式编程

    • 函数式编程的乐趣

    • 播放列表:函数式编程-基本概念介绍.

  • 图书

    • 纯功能数据结构

    • 算法:一种功能编程方法

    • 通过Lambda微积分进行函数式编程的简介

    • 功能性思维:语法范式

    • 成为功能性

    • 离散数学与函数式编程.

lix药资源

有多种形式的资源可以帮助您掌握Elixir.

在线资源

在线开始研究Elixir的第一个地方是Elixir官方语言网站.

讲解
  • 官方入门指南

  • 长生不老药30天

  • Elixir学校:有关Elixir编程语言的课程.

  • Elixir视频指南

  • 药剂的教学

  • 药剂秘籍.

工具类
  • Phoenix:Elixir的Web开发框架。而且不要错过这本由Phoenix的创造者和Elixir的创造者合着的关于Phoenix的伟大著作.

  • 令人敬畏的长生不老药:社区精心策划的Elixir优秀项目列表.

社区与持续学习
  • 药剂论坛

  • 长生不老药

  • 长生不老药喷泉

  • 每周长生不老药文摘

  • 长生不老药雷达.

关于长生不老药的书

  • 编程药剂:功能|> 并发|> 务实|> 好玩

  • 元编程长生不老药:编写更少的代码,完成更多的事情(并玩得开心!)

  • 长生不老药

  • Elixir简介:函数式编程入门

  • 学习灵丹妙药

  • 药剂食谱.

我应该学长生不老药吗?

如果您有兴趣开发最先进的Web应用程序,特别是那些为大量并发用户提供服务的Web应用程序,那么Elixir绝对值得了解.

结论

尽管仍然是一种相对罕见的编程语言,但Erlang社区正在迅速发展,特别是随着对移动解决方案,Web应用程序和无缝在线协作的需求增加.

尽管在许多方面都是非常规的,但对并发和分发,高可伸缩性和容错性的内置支持使Erlang在我们不断连接的世界中成为极具吸引力的语言.

但是专注于Elixir可能更好。这完全取决于您要做什么。无论如何,它们都是很棒的语言.

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map