热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:小众却顽强的编程语言Erlang,你了解多少?

篇首语:本文由编程笔记#小编为大家整理,主要介绍了小众却顽强的编程语言 Erlang ,你了解多少?相关的知识,希望对你有一定的参考价值。 【C

篇首语:本文由编程笔记#小编为大家整理,主要介绍了小众却顽强的编程语言 Erlang ,你了解多少?相关的知识,希望对你有一定的参考价值。









【CSDN 编者按】面向并发的编程语言 Erlang ,在全球范围内其实属于小众语言,但却拥有着强大的并行处理能力和容错机制,并在二十余载后的如今却仍能保持生机,你不想了解一下吗?









整理 | 弯月
责编 | 郑丽媛


出品 | CSDN(ID:CSDNnews)


Erlang 是一门通用编程语言,主要用途是构建并发应用程序,由 Joe Armstrong 在瑞典电信设备制造商爱立信所辖的计算机科学研究室开发,目的是创造一种可以应付大规模并发活动的程序设计语言和运行环境。Erlang 于 1987 年发布正式版本,最早是爱立信拥有的私有软件,经过十年的发展,于 1998 年发表开放源码版本。现在 Erlang 主要用于电信行业、Web 应用、分布式计算、即时消息、电子商务等领域,负责处理大规模的并发持续连接。

Erlang 颇受欢迎的特点包括:

● 高并发:Erlang 程序员可以处理分布式环境中来自多个来源的输入。

● 容错性:即使一部分程序出错,整个系统也能继续运行,所以非常适合必须长期运行的系统,如 Web 应用程序,或电信平台。

● 代码热加载,更新代码和修改程序不需要重启系统。

● 采用消息传递方式代替共享变量,因此进程间通信的并发程度更高。

● 垃圾回收,提供自动的内存管理,同时提高速度和性能。

然而,Erlang 的缺点之一在于入门难度高于常见的编程语言。作为一种函数式语言,对于新手程序员来说,Erlang 的学习曲线很陡峭。


小众却顽强的编程语言 Erlang ,你了解多少?


Erlang 的历史


Erlang 语言由爱立信的员工 Joe Armstrong,Robert Virding 和 Mike Williams 于 1986 年开发。开发该语言的最初目的是为了改进电信应用程序。该语言的设计很大程度上受到了 PLEX 语言的影响。

BEAM 可以将 Erlang 代码编译成 C 代码。从此,Erlang 开始应用到实际生产中。

但是,1998 年,爱立信禁止在任何新产品中使用 Erlang,因为他们打算将所有产品迁移到非私有的技术上。

由于这项限制,Erlang 的主要作者 Joe Armstrong 和其他 Erlang 程序员开始重新设计 Erlang,最后于 1999 年以开源形式发布了新的 Erlang。此后,Erlang 受到了整个电信界的关注。今天,Erlang 被全世界许多电信运营商和通信软件公司使用,包括 T-Mobile、WhatsApp 等。而爱立信依然负责 Erlang 的维护,并在自己的许多节点和移动网络中(包括LTE网络)广泛使用  Erlang。


小众却顽强的编程语言 Erlang ,你了解多少?


Erlang 的特点


那么,与其他语言相比,Erlang 的特点是什么?

首先,Erlang 是一门函数式语言。这意味着它和常见的面向对象语言(如C++、Python)、面向过程语言(如 C)等都不一样。在Erlang中,函数和操作的设计思想和写法都与数学公式十分相似。举一个最简单的例子:斐波那契数列(数列中每一项都是前两项之和)的定义为:

F(0) = 0

F(1) = 1

F(n+2) = F(n+1) + F(n)

那么,使用C语言,你可能需要写一个循环来计算:


















int fib(int n){ int a = 0, b = 1, c, i; if( n == 0) return a; for(i = 2; i <= n; i++) { c = a + b; a = b; b = c; } return b;}

可以看到,上面的算法与前面给出的数学公式完全不同,你需要自己想办法用“过程”的方式来表达出原数学公式的意义。

或者你可以采用递归,这样代码更“接近”数学公式:











int fib(int n){ if (n <= 1) return n; return fib(n-1) + fib(n-2);}

然而,使用 Erlang,代码和数学公式几乎一模一样:

fibo(0) -> 0 ;

fibo(1) -> 1 ;

fibo(N) when N > 0 -> fibo(N-1) + fibo(N-2) .

其次,Erlang 的计算模型是建立在进程上的。Erlang 使用许多独立的、互相隔离的进程,进程之间通过消息互相通信。

每个进程都可以接收消息并响应消息。进程之间都是独立的,而且创建进程只需要消耗很少的内存。因此,扩展系统只需要创建更多的进程。


小众却顽强的编程语言 Erlang ,你了解多少?


Erlang 和 Elixir


提到 Erlang,人们常常会想起另一种语言:Elixir。在上世纪八十年代,Erlang 主要用于电信应用程序。但三十年之后,Erlang 也被用于大型Web应用程序中。例如,Pinterest 需要每秒钟发送大约 14,000 条通知。而 Facebook 每秒需要接受并发送通知 16 亿次。这种高并发性正是 Erlang 大展身手的地方。因此,Erlang 得到了广泛的应用。但是,Erlang 语言本身非常有难度,而且难以编写。毕竟,这是一门来自几十年前的语言,当时语言设计时并没有考虑“易学易用”的问题。对于现代习惯了 Ruby 和 Javascript 的程序员来说,Erlang 就是一门老古董。而且,Erlang 也没有现代 Web 应用程序所需的许多功能。

于是,Jose Valim 在 2012 年创建了 Elixir 语言。Elixir 代码会编译成 Erlang 字节码,可以在 Erlang 运行时上运行。甚至你可以直接在 Elixir 中编写 Erlang 代码。

Valim 是 Ruby on Rails 开发团队的语言,甚至还写过一本关于 Rails 开发的书。所以,Elixir 的设计思想很大程度上来源于 Rails。它的语法很像 Ruby,而且比 Erlang 易读得多。而且Elixir还扩展了 Erlang,加入了元编程、多态等功能。


小众却顽强的编程语言 Erlang ,你了解多少?


Erlang 的应用


与其他语言相比,Erlang 有三个非常显著的优势。

● 高并发:Erlang 的虚拟机 BEAM 使用轻量级线程(称为进程),这些线程互相隔离,能在所有 CPU 上运行,通过消息互相通信。再加上语言本身是函数式的,因此非常适合编写并发应用程序。

● 可扩展性:Erlang 非常适合现代分布式计算和多核心 CPU。通过 Erlang 的进程模型,我们可以非常容易地实现水平扩展,只需要添加更多的机器,或者给现有机器添加更多的 CPU 核心即可。

● 可靠性:Erlang 的格言是“不要惧怕崩溃”。Erlang 中的进程是隔离的,所以一个进程的错误不会影响到其他进程;而且由于是轻量级进程,重启出错的进程的代价也非常低。这样就能提高系统的容错性。


小众却顽强的编程语言 Erlang ,你了解多少?


总结


Erlang 虽然是一门古老的语言,但在今天依然能发挥它的潜力。如果你希望从事大规模 Web 应用程序、分布式计算或高并发应用程序方面的开发,则可以尝试一下 Erlang 和 Elixir。从另一个角度来说,Erlang 的函数式编程思想也能为你提供前所未有的视野。如果你从未接触过函数式编程,那么也可以尝试一下 Erlang,相信它能拓宽你的眼界,为你带来新的思路。

参考链接:https://serokell.io/blog/introduction-to-erlang

小众却顽强的编程语言 Erlang ,你了解多少?

小众却顽强的编程语言 Erlang ,你了解多少?













|极客头条


















小众却顽强的编程语言 Erlang ,你了解多少?
































推荐阅读
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • javax.mail.search.BodyTerm.matchPart()方法的使用及代码示例 ... [详细]
  • 本文将带你快速了解 SpringMVC 框架的基本使用方法,通过实现一个简单的 Controller 并在浏览器中访问,展示 SpringMVC 的强大与简便。 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 本文详细介绍了如何在 Django 项目中使用 Admin 管理后台,包括创建超级用户、启动项目、管理数据模型和修改用户密码等步骤。 ... [详细]
  • Python 3 Scrapy 框架执行流程详解
    本文详细介绍了如何在 Python 3 环境下安装和使用 Scrapy 框架,包括常用命令和执行流程。Scrapy 是一个强大的 Web 抓取框架,适用于数据挖掘、监控和自动化测试等多种场景。 ... [详细]
  • 本文介绍了Java中的com.sun.codemodel.JBlock._continue()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 单片机入门指南:基础理论与实践
    本文介绍了单片机的基础知识及其应用。单片机是一种将微处理器(类似于CPU)、存储器(类似硬盘和内存)以及多种输入输出接口集成在一块硅片上的微型计算机系统。通过详细解析其内部结构和功能,帮助初学者快速掌握单片机的基本原理和实际操作方法。 ... [详细]
  • 本文是Java并发编程系列的开篇之作,将详细解析Java 1.5及以上版本中提供的并发工具。文章假设读者已经具备同步和易失性关键字的基本知识,重点介绍信号量机制的内部工作原理及其在实际开发中的应用。 ... [详细]
  • 如何将Python与Excel高效结合:常用操作技巧解析
    本文深入探讨了如何将Python与Excel高效结合,涵盖了一系列实用的操作技巧。文章内容详尽,步骤清晰,注重细节处理,旨在帮助读者掌握Python与Excel之间的无缝对接方法,提升数据处理效率。 ... [详细]
  • 深入解析 Synchronized 锁的升级机制及其在并发编程中的应用
    深入解析 Synchronized 锁的升级机制及其在并发编程中的应用 ... [详细]
  • 深入解析C语言中结构体的内存对齐机制及其优化方法
    为了提高CPU访问效率,C语言中的结构体成员在内存中遵循特定的对齐规则。本文详细解析了这些对齐机制,并探讨了如何通过合理的布局和编译器选项来优化结构体的内存使用,从而提升程序性能。 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • 本文深入解析了JDK 8中HashMap的源代码,重点探讨了put方法的工作机制及其内部参数的设定原理。HashMap允许键和值为null,但键为null的情况只能出现一次,因为null键在内部通过索引0进行存储。文章详细分析了capacity(容量)、size(大小)、loadFactor(加载因子)以及红黑树转换阈值的设定原则,帮助读者更好地理解HashMap的高效实现和性能优化策略。 ... [详细]
author-avatar
婧儿2502904787
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有