ErLang语言框架

开源公司:爱立信公司

作品详情

1历史

Erlag得名于丹麦数学家及统计学家Ager KrarupErlag,同时Erlag还可以表示EricssoLaguage。

Erlag并非一门新语言,它出现于1987年,只是当时对并发、分布式需求还没有今天这么普遍,当时可谓英雄无用武之地。Erlag语言创始人Joe Armstrog当年在爱立信做电话网络方面的开发,他使用Smalltalk,可惜那个时候Smalltalk太慢,不能满足电话网络的高性能要求。但Joe实在喜欢Smalltalk,于是定购了一台Tektroix Smalltalk机器。但机器要两个月时间才到,Joe在等待中百无聊赖,就开始使用Prolog,结果等Tektroix到来的时候,他已经对Prolog更感兴趣,Joe当然不满足于精通Prolog,经过一段时间的试验,Joe给Prolog加上了并发处理和错误恢复,于是Erlag就诞生了。这也是为什么Erlag的语法和Prolog有不少相似之处,比如它们的List表达都是[Head | Tail]。

1987年Erlag测试版推出,并在用户实际应用中不断完善,于1991年向用户推出第一个版本,带有了编译器和图形接口等更多功能。1992年,Erlag迎来更多用户,如RACE项目等。同期Erlag被移植到VxWorks、PC和 Macitosh等多种平台,两个使用Erlag的产品项目也开始启动。1993爱立信公司内部独立的组织开始维护和支持Erlag实现和Erlag工具。

2特点

Erlag特性:

● 并发性 - Erlag支持超大量级的并发进程,并且不需要操作系统具有并发机制。

●分布式- 一个分布式Erlag系统是多个Erlag节点组成的网络(通常每个处理器被作为一个节点)

●健壮性- Erlag具有多种基本的错误检测能力,它们能够用于构建容错系统。

● 软实时性- Erlag支持可编程的“软”实时系统,使用了递增式垃圾收集技术。

● 热代码升级-Erlag允许程序代码在运行系统中被修改。旧代码能被逐步淘汰而后被新代码替换。在此过渡期间,新旧代码是共存的。

●递增式代码装载-用户能够控制代码如何被装载的细节。

●外部接口-Erlag进程与外部世界之间的通讯使用和在Erlag进程之间相同的消息传送机制。

●Fail-fast(中文译为速错),即尽可能快的暴露程序中的错误。

●面向并发的编程(COP cocurrecy-orieted programmig)

●函数式编程

●动态类型

●及早求值或严格求值

●支持脚本运行

分布式

代码示例如下:

% create process  call the fuctio web:start_server(Port, MaxCoectios)
ServerProcess =spaw(web, start_server, [Port, MaxCoectios]),
% create a remote process  call the fuctio web:start_server(Port, MaxCoectios) o machie
RemoteNodeRemoteProcess =spaw(RemoteNode, web, start_server, [Port, MaxCoectios]),
%  the {pause, } message (a tuple with a atom   a umber ) to ServerProcess (asychroously)
ServerProcess ! {pause, },
% receive messages set to this process
receive
a_message -> do_somethig;
{data, DataCotet} -> hadle(DataCotet);
{hello, Text} -> io:(, [Text]);
{goodbye, Text} -> io:(, [Text])
ed.

函数式

Erlag函数大致写法如下,以一个求整数阶乘的模块为例:

-(fact).-([fac/]).
fac() -> ;
fac(N)wheN >  -> N * fac(N).

注:该文件要保存成"fact.erl",文件名必须和模块名一致才能编译通过。

其运行结果如右图:

下面是快速排序算法的一个Erlag实现:

%% 
%%     
().
()() > ;
() >
() ++  ++ ().

注:该文件要保存成“quicksort.erl”文件名必须和模块名一致才能编译通过。其运行结果如右图。

3开发工具

Sublime text

liux下有全套的IDE环境插件可用 完善的如SublimErl[1],widows下只能自己简单的集成一部分基础功能

优势比于eclipse 的erlide 是大项目时操作响应速度快 体验流畅错误少

Emacs

可以使用任何你喜欢的编辑器编写Erlag程序,但如果你使用Emacs编辑可以支持很多功能,比如:代码缩进、语法高亮、验证模块名称、支持段落的注释、模块骨架、标签和更多的支持。

有关详细信息请参阅Erlag Tools文档。

Erlide

这是一个基于Eclipse的Erlag图形界面插件(ErlIDE),ErlIDE正在积极开发新特性,同时它也是开源的。

插件安装说明

项目链接地址[2]

4流量单位

指测量电话呼叫流量的单位。一个厄朗等于一个小时的中继负荷,或3600秒中继负荷。如果将CCS(百秒呼叫)转换成厄朗值,则需先乘以100,然后再除以3600(或直接除以36)。因此,呼叫中心可使用厄朗值来反映中继线路负荷,即一个小时满负荷的平均中继线路有多少数量。例如,在一个小时中,呼叫中心呼叫流量为12.35厄朗时,就意味着在该时段中,平均有12条线多一些都处于全负荷状态。据此可以大致推算出需要多少座席人员。

指一种数学计算方法,这种方法是基于已知的信息,如平均通话时长,来预测无规则的工作负荷,如电话呼叫量。它是呼叫中心人员和中继线路数量的决策参考方法。

厄朗公式有两类,厄朗B用于呼叫量随机状态,同时没有排队的情况;厄朗C用于呼叫量随机状态,同时有排队的情况,它假设所有来电者将无限期地进入队列等待被接通。因此,呼叫量不可能比可用的中继线路数量还大,如果那样的话,将造成排队无限期地延迟。

爱尔兰分布是另一个常用的车头时距分布,分布的密度函数为:

(15)

式中:k和为参数。对给定参数k,(15)式对应着一种分布,而随着k取不同的值,可以得到不同的分布函数。因此,爱尔兰分布适用范围较广。特别地,当k=1时,(15)对应着车头时距为负指数分布的情形,当k=时,(15)对应着车头时距为均匀分布的情形。研究表明,随着k 值的增大,说明交通越拥挤,驾驶员行为的随机程度越小。

对于单条车道上行驶的车辆,车头时距不能小于最小车头时距,因此,需要对模型(15)修改,引入带移位的爱尔兰分布,分布密度为:

(16)

对于(15)式,有:

(17)

(18)

式中,-样本均值;S-样本方差。因此,由(17),(18)两式可得到参数k和的估计:

(19)

(20)

对于式(16)而言,参数k和仍可分别由(19)和(20)估计,对于参数i由(10)估计。

功能介绍

Erlang(['ə:læŋ])是一种通用的面向并发的编程语言,它由瑞典电信设备制造商爱立信所辖的CS-Lab开发,目的是创造一种可以应对大规模并发活动的编程语言和运行环境。Erlang问世于1987年,经过十年的发展,于1998年发布开源版本。Erlang是运行于虚拟机的解释性语言,但是现在也包含有乌普萨拉大学高性能Erlang计划(HiPE)开发的本地代码编译器,自R11B-4版本开始,Erlang也开始支持脚本式解释器。在编程范型上,Erlang属于多重范型编程语言,涵盖函数式、并发式及分布式。顺序执行的Erlang是一个及早求值, 单次赋值和动态类型的函数式编程语言。Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此非常适 合于构建分布式,实时软并行计算系统。使用Erlang编写出的应用运行时通常由成千上万个轻量级进程组成,并通过消息传递相互通讯。

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态
案例
三国题材的回合制SLG卡牌手游,画风精美,游戏包括武将系统、战斗系统等玩法,包含多种战斗模式,每个回合玩家可选择5个武将出阵进行战斗。
1610手游
游戏包含pvp、pve战斗,跨服战斗等玩法,战斗效果酷炫,美术风格精美; 本人在项目中担任后端开发工程师,开发了跨服帮派战、跨服云购等玩法,增加了游戏的可玩性和盈利
3100手游
该项目是一个策略类游戏,涉及建筑、资源、联盟、战斗、英雄等等。我参与了绝大多数功能的开发。其中跨服联盟战采用erlang实现长链接,并引入lua解决高并发下联盟数据被覆盖的问题。
迎接IMBoy,一款融合了技术创新和用户体验的即时聊天解决方案。我们的产品基于Erlang、Flutter和PostgreSQL,为您提供了一个高性能、稳定可靠的通讯平台。不仅如此,IMBoy还支持基于WebRTC的一对一视频通话功能,让沟通更加生动和真实。我们致力于为您提供安全、私密的聊天体验,您的数据将得到严格的保护和加密。而且,IMBoy是完全开源的,您可以根据自己的需求进行定制和扩展。加入IMBoy,发现即时通讯的新世界!
4091FlutterfluttercssIM
迎接IMBoy,一款融合了技术创新和用户体验的即时聊天解决方案。我们的产品基于Erlang、Flutter和PostgreSQL,为您提供了一个高性能、稳定可靠的通讯平台。不仅如此,IMBoy还支持基于WebRTC的一对一视频通话功能,让沟通更加生动和真实。我们致力于为您提供安全、私密的聊天体验,您的数据将得到严格的保护和加密。而且,IMBoy是完全开源的,您可以根据自己的需求进行定制和扩展。加入IMBoy,发现即时通讯的新世界!
4091FlutterfluttercssIM
当前共58个项目

评论