erlang 订阅
Erlang在1991年由爱立信公司向用户推出了第一个版本,经过不断的改进完善和发展,在1996年爱立信又为所有的Erlang用户提供了一个非常实用且稳定的OTP软件库并在1998年发布了第一个开源版本。目前Erlang同时支持的操作系统有linux,windows,unix等,可以说适用于主流的操作系统上,尤其是它支持多核的特性非常适合现在的多核CPU,而分布式特性也可以很好融合目前的各种分布式集群。 展开全文
Erlang在1991年由爱立信公司向用户推出了第一个版本,经过不断的改进完善和发展,在1996年爱立信又为所有的Erlang用户提供了一个非常实用且稳定的OTP软件库并在1998年发布了第一个开源版本。目前Erlang同时支持的操作系统有linux,windows,unix等,可以说适用于主流的操作系统上,尤其是它支持多核的特性非常适合现在的多核CPU,而分布式特性也可以很好融合目前的各种分布式集群。
信息
类    型
编程语言
开发者
CS-Lab
适    用
主流的操作系统
中文名
Erlang
外文名
Erlang
问    世
1987年
Erlang简介
Erlang是一种通用的面向并发的编程语言,它由瑞典电信设备制造商爱立信所辖的CS-Lab开发,目的是创造一种可以应对大规模并发活动的编程语言和运行环境。Erlang问世于1987年,经过十年的发展,于1998年发布开源版本。Erlang是运行于虚拟机的解释性语言,但是现在也包含有乌普萨拉大学高性能Erlang计划(HiPE)开发的本地代码编译器,自R11B-4版本开始,Erlang也开始支持脚本式解释器。在编程范型上,Erlang属于多重范型编程语言,涵盖函数式、并发式及分布式。顺序执行的Erlang是一个及早求值,单次赋值和动态类型的函数式编程语言。Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此非常适 合于构建分布式,实时软并行计算系统。使用Erlang编写出的应用运行时通常由成千上万个轻量级进程组成,并通过消息传递相互通讯。进程间上下文切换对于Erlang来说仅仅 只是一两个环节,比起C程序的线程切换要高效得多得多了。使用Erlang来编写分布式应用要简单的多,因为它的分布式机制是透明的:对于程序来说并不知道自己是在分布式运行。Erlang运行时环境是一个虚拟机,有点像Java虚拟机,这样代码一经编译,同样可以随处运行。它的运行时系统甚至允许代码在不被中断 的情况下更新。另外如果需要更高效的话,字节代码也可以编译成本地代码运行。 [1] 
收起全文
精华内容
下载资源
问答
  • Erlang

    2019-10-06 12:58:13
    现在,让我们迎接Erlang盛宴! 经历 2007年11月在koders.com搜索代码时,发现*.erl格式的源文件,感叹开发语言的花样百出,此时,我觉得erlang是一个丑陋的小家伙,看名字就没有对它提起多少兴趣。 2008年初的...

    作为程序员,我们曾经闻听很多“业界动态”,“技术革新”,曾经接触很多“高手箴言”,“权威推荐”。这些正确与否,都已成过去!

    现在,让我们迎接Erlang盛宴!

    经历

    200711月在koders.com搜索代码时,发现*.erl格式的源文件,感叹开发语言的花样百出,此时,我觉得erlang是一个丑陋的小家伙,看名字就没有对它提起多少兴趣。

    2008年初的时候,公司的项目开发中,我有缘认识了ejabberd,一个采用Erlang开发的开源jabber服务器。我开始为其诱人的特性所倾倒。是时候认真看看Erlang到底什么样了!

    20084月,通过各种资料的搜集,了解,我决定系统的学习Erlang

    今天,通过4个月的认真学习,我已经熟悉了Erlang,已经在使用Erlang开发项目。作为C++程序员,我不敢妄自使用“熟悉”,“精通”之类的字眼,但是对于Erlang我可以很负责任的说,Erlang很巧,很强大!

    困惑

    面对一个新的事务,我们本性都会充满好奇,可是作为程序员,很多时候对于新的语言我都充满了抵触:这个新东西值得学习么?它会不会让我抛弃我的旧爱?它文档丰富么?其是不是很难理解?它的前景如何?...等等,相信大家跟我有一样的苦恼。

    但是,请听我说!我们是程序员,我们走在技术革新的最前沿。用户的产品,体验是通过我们来产生!我们不能畏缩不前,我们的固步自封,就是我们的公司,乃至整个我们的行业的停滞不前!口号可能有些响亮,但是认真思考,我相信朋友们一定有所感悟。

    Erlang是什么

    Erlang是什么是我们最先要面对的问题,只有清楚了它是什么,我们才能做出我们的决定。可见这个问题的重要性,它决定了很多读者是否会继续看下去!非常紧张。

    Erlang最初是爱立信为开发电信相关产品而产生。

    Erlang是一种面向并发(Concurrency Oriented),面向消息(Message Oriented)的函数式(Functional)编程语言。

    面向并发说明Erlang支持大规模的并发应用,我们可以在应用中处理成千上万的并发,而不相互影响。面向消息,其实是为并发服务!我们应该都熟悉多线程,熟悉加锁解锁操作,熟悉可能出现的资源竞赛与死锁。在Erlang的世界里,我们可以将轻轻的抹去这些令人苦恼的词汇。Erlang的世界,每个处理都是独立的个体,他们之间的交互仅仅靠消息!因此不会有死锁,不会有痛苦的编程经历。

    Erlang中一个非常重要的名词:Process,也就是我们前面提到的“个体”。它不是我们操作系统中的进程,也不是线程。它是Erlang提供给我们的超级轻量的进程。为了适应大规模并发的特性,Process需要能够快速创建,快速销毁。Process之间通信的唯一方法就是消息,我们只要知道一个Process的名字即pid,就可以向其发送消息。Process也可以在任何时候,接收消息。我们这样做只有一个目的:让我们的系统更加简单,用一种朴素的做法,实现一个高效的语言。

    Erlang是种函数式编程语言,对此我没有很深刻的理解,最明显的特征就是,Erlang中到处都是函数,函数构成了我们的产品的主体,把这些函数放到一个个的Process中去,让他们运行起来,那么就组成了我们朝气蓬勃的产品。

    Erlang支持对数据的位操作,拥有丰富的数据持久化机制。

    同时需要说明的是Erlang内建垃圾回收机制(GC)。

    Erlang语言特性

    简单小巧

    Erlang中只有8种基本的数据类型:

    Integerfloatatomreferencefunportpidbitstring

    同时提供2种复合结构:tuplelist,这就是Erlang的所有数据类型。

    模式匹配

    Erlang的函数中,某些语法中,我们可以使用Pattern匹配,这是一个非常好的特性,我们可以让代码自己去决定如何执行

    比如,我们定义一个函数,其告诉我们某种水果的价格:

    price(apple) -> 2.0;

    price(banana) -> 1.2.

    我们随后调用 price(Fruit),会根据Fruit变量的内容返回具体的价格。这样做的好处就是节省了我们的代码量,我们不用if...else…或者switch…case的来伺候了。也便于代码的扩展:加一个新的水果品种,我们只需要加一行就可以了。

    学习Erlang一个非常重要的内容就是模式匹配,但是请不要混淆,这个匹配和正则表达式没有任何干系。

    变量单次赋值

    这个是一个匪夷所思的特性,变量竟然只能单次赋值!是的Erlang中变量一旦绑定某个数值以后,就不能再次绑定,这样做的好处是便于调试出错。当发生错误时,某个变量是什么就永远是什么,不用顺藤摸瓜的查找谁修改过它,省了好多事情。唯一的麻烦就是需要一个信的变量时,你必须再为它想一个名字。

    丰富的libs

    Erlang中提供丰富的libs

    stdlib中包含大量的数据结构如listsarraydictgb_setsgb_treesetsdets

    mnesia提供一个分布式的数据库系统

    inets提供ftp clienthttp client/servertftp client/server

    crypto 提供加密解密相关函数,基于openssl相关实现

    ssl 实现加密socket通信,基于openssl实现

    ssh 实现ssh协议

    xmerl 实现XML相关解析

    snmp 实现SNMP协议(Simple Network Management Protocol

    observer 用来分析与追踪分布式应用

    odbc 使Erlang可以连接基于SQL的数据库

    orber 实现CORBA对象请求代理服务

    os_mon 提供对操作系统的监控功能

    dialyzer提供一个静态的代码或程序分析工具

    edoc 依据源文件生成文档

    gs 可以为我们提供某些GUI的功能(基于Tcl/Tk

    还有很多朋友提供了一些开源的lib,比如eunit,用来进行单元测试。

    灵活多样的错误处理

    Erlang最初为电信产品的开发,这样的目的,决定了其对错误处理的严格要求。Erlang中提供一般语言所提供的exceptioncatchtry…catch等语法,同时Erlang支持LinkMonitor两种机制,我们可以将Process连接起来,让他们组成一个整体,某个Process出错,或推出时,其他Process都具有得知其推出的能力。而Monitor顾名思义,可以用来监控某个Process,判断其是否退出或出错。所有的这些Erlang都提供内在支持,我们快速的开发坚固的产品,不在是奢望。

    代码热替换

    你的产品想不间断的更新么?Erlang可以满足你这个需求,Erlang会在运行时自动将旧的模块进行替换。一切都静悄悄。

    天生的分布式

    Erlang天生适合分布式应用开发,其很多的BIF(内建函数,相API)都具有分布式版本,我们可以通过BIF在远程机器上创建Process,可以向远程机器上的某个Process发送消息。在分布式应用的开发中,我们可以像CC++,JAVA等语言一样,通过Socket进行通讯,也可以使用Erlang内嵌的基于Cookie的分布式架构,进行开发。当然也可以两者混合。分布式开发更加方便,快速。ErlangProcess的操作,Error的处理等都对支持分布式操作。

    超强的并发性

    由于采用其自身Process,而没有采用操作系统的进程和线程,我们可以创建大规模的并发处理,同时还简化了我们的编程复杂度。我们可以通过几十行代码实现一个并发的TCP服务器,这在其他语言中都想都不敢想!

    多核支持

    Erlang让您的应用支持多个处理器,您不需要为不同的硬件系统做不同的开发。采用Erlang将最大限度的发挥你的机器性能。

    跨平台

    如同JAVA一样,Erlang支持跨平台(其目前支持linuxmacwindows19种平台),不用为代码的移植而头疼。

    我们仅仅需要了解平台的一些特性,对运行时进行优化。

    开源

    开源是我非常喜欢的一个词汇,开源意味这更加强壮,更加公开,更加的追求平等。开源会让Erlang更好。

    Erlang与外界的交互

    Erlang可以与其他的语言进行交互,如CC++,Java。当然也有热心的朋友提供了与其他语言的交互,如果需要你也可以根据Erlang的数据格式,提供一个库,让Erang与您心爱的语言交互。

    Erlang支持分布式开发,您可以创建一个C Node,其如同一个Erlang节点,前提是你遵照Erlang的规范。

    当然最常用的交互还是再同一个Node上,比如我们要调用某个lib,调用一些系统提供的功能,这时候主要有两种方式:Port和嵌入式执行。

    PortErlang最基本的与外界交互的方式,进行交互的双方通过编码,解码,将信息以字节流的方式进行传递。(具体这个通道的实现方式,根据操作系统的不同而不同,比如unix环境下,采用PIPE实现,理论上任何支持对应Port通道实现的语言都可以与Erlang进行交互)。Erlang为了方便CJAVA程序员,提供了Erl_InterfaceJinterface

    采用Port,您的代码在Erlang的平台之外运行,其崩溃不会影响Erlang

    嵌入式执行,通过Erlang平台加载,因此这是非常危险的,如果您的程序崩溃,没有任何理由,Erlang也会崩溃。

    Erlang应用场景

    分布式产品,网络服务器,客户端,等各种应用环境。

    Erlang也可以作为一种快速开发语言,进行原型开发。

    Erlang的学习过程

    <!--[if !supportLists]-->1.         <!--[endif]-->安装首先从Erlang官方网站,下载安装Erlanghttp://www.erlang.org/download.html

    linux:获取源代码,根据说明编译;windows:直接安装

    <!--[if !supportLists]-->2.         <!--[endif]-->认真阅读《programming erlang》(中文版图书已经问世),并不断动手练习书中的例程。

    <!--[if !supportLists]-->3.         <!--[endif]-->遇到问题时,不要退却,坚持下去找到解决办法

    <!--[if !supportLists]-->4.         <!--[endif]-->对语言熟悉时,浏览一些好的开源项目

    <!--[if !supportLists]-->5.         <!--[endif]-->有信心时,开始动手做一个小项目

    <!--[if !supportLists]-->6.         <!--[endif]-->不间断的与大家交流,共同提高

    可能遇到的困难:

    <!--[if !supportLists]-->a)         <!--[endif]-->对于语法的不适应?

    坚持看下去,代码继续写下去,我相信1个月,你会喜欢上Erlang的语法

    <!--[if !supportLists]-->b)        <!--[endif]-->有些数据类型不清楚?

    认真看资料,或者询问朋友,比如我

    <!--[if !supportLists]-->c)        <!--[endif]-->中文资料的缺乏?

    Erlang中文的资料会越来越多,此外,Erlang的相关的英文资料也比较容易理解,还是那句话,别怕麻烦

    Erlang开源项目

    排名不分先后

    • couchdb     基于文档的数据库,拥有RestfulAPI,MVCC,View,诸多特性
    • ejabberd    性能出众,使用广泛的Jabber开源服务器
    • mochiweb    轻便,高效的HTTP应用框架
    • nitrogen    基于事件的Web开发框架
    • rabbitmq    中间服务器,实现AMQP协议
    • yaws        高效的web server
    • etorrent    Bittorrent客户端
    • Scalaris           分布式的key-value存储
    • disco       Map-Reduce框架,Erlang Python

    转载于:https://www.cnblogs.com/kex1n/archive/2010/03/24/2286508.html

    展开全文
  • erlang

    千次阅读 2018-01-22 09:34:49
    erlang 学习erlang一个星期的体会 ​ 前言:我只是一个初学者,学了一个星期,感觉只是熟悉了一点语法而已。。还没体会到面向并发编程的 特点,不过感觉这么语言很有自己的特点,我想给大家分享下我的体会 ...

    erlang

    学习erlang一个星期的体会

    ​ 前言:我只是一个初学者,学了一个星期,感觉只是熟悉了一点语法而已。。还没体会到面向并发编程的

    特点,不过感觉这么语言很有自己的特点,我想给大家分享下我的体会

    预备知识

    ​ 关于递归和尾递归(ps:这个语言是没有for循环之类,全是靠递归)我通过代码来解释吧。

    ~~~erlang
    %%求第N个斐波那契数值
    %%递归:
    getfei(N) ->
    getfei(N-1)+getfei(N-2);
    getfei(2) ->
    1;
    getfei(1) ->
    1.
    %%尾递归
    getfei(N,X,Y) when N<3 ->
    Y;
    getfei(N,X,Y) ->
    getfei(N-1,Y,X+Y).

    %% 这个就erlang语言了 ps(其实尾递归就是加了一个标志变量的来控制)

    ~~~


    数据类型

    erlang中 很重要的一点,也是和其他语言的区别 再说这个之前 我又要再啰嗦一下(ps:很难受,我就是想到那里就说哪里吧……..)
    ​ 变量:

    ​ erlang的变量只能赋值一次,一旦被绑定了,就不能再给他赋值了

    ​ 语法:首字母必须大写(小写字母开头的是原子)或下划线开头且第二个字母为大写,如:

    ​ Name Z _SomeThing _Xy

    ​ 所以说对于erlang = 就是模式匹配 而不是赋值 模式匹配是个很重要的概念 后面我会列出来

    ~erlang
    %%例子
    1> X = 2.
    2> X= 3.
    ** exception error: no match of right hand side value 3
    ~

    Erlang中只有8种基本的数据类型:

    ​ integer、float、atom、reference、fun、port、pid、bitstring

    ​ 同时提供2种复合结构:tuple,list,这就是Erlang的所有数据类型。

    ​ Erlang中没有字符串,字符串是个整数列表,”HelloCloud”是一个列表的简写

    ​ number < atom < reference < fun < port < pid < tuple < list < bit string

    ~~~erlang
    %%因为数据类型可以比较所以
    0 == fasle
    =>false
    1 < false
    => true

    %%还有一些符号比较
    22.0==22
    true
    22.0 =:=22
    false

    ~~~

    个人体会:元组和列表用的很多,而且是重点,还有就是记录

    练习题

    我感觉上题目的话,来理解最是最好的,多练点题目,你就会注意语法的那些小细节

    ~~~erlang
    %%99乘法表
    %%倒的
    muti(Max,Max) ->
    io:format(“~p*~p=~p~n”,[Max,Max,Max*Max]);
    muti(I,Max) ->
    io:format(“~p*~p=~p “,[I,Max,I*Max]),
    muti(I+1,Max).

    nine(1) -> 
        muti(1,1);
    nine(X) -> 
        muti(1,X),
        nine(X-1).
    

    =>result
    1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
    1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
    1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
    1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
    1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
    1*4=4 2*4=8 3*4=12 4*4=16
    1*3=3 2*3=6 3*3=9
    1*2=2 2*2=4
    1*1=1

    %%顺的
    muti(Max,Max) ->
    io:format(“~p*~p=~p~n”,[Max,Max,Max*Max]);
    muti(I,Max) ->
    io:format(“~p*~p=~p “,[I,Max,I*Max]),
    muti(I+1,Max).

    nine(1) -> 
        muti(1,1);
    nine(X) -> 
        nine(X-1),
        muti(1,X).
    

    =>result
    1*1=1
    1*2=2 2*2=4
    1*3=3 2*3=6 3*3=9
    1*4=4 2*4=8 3*4=12 4*4=16
    1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
    1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
    1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
    1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
    1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

    %%上面两个代码仔细观察下!!

    %%判断素数
    isshusu(X) ->
    Flag = round(math:sqrt(X)),
    L=lists:seq(2,Flag),

        G=[ Y || Y<-L, X rem Y =:= 0],%%三段式 顺序不能错
        if
            length(G)>0 ->
                io:format("不是素数~n");
            length(G)=:=0 -> 
                io:format("是素数~n")
        end.
    

    %% *
    *
    *
    star(N) ->
    [for(Y) || Y<-lists:seq(1, N)].

    for(Max) ->
    [io:format(“*”)|| X <- lists:seq(1, Max)],
    io:format(“~n”).

    %%**


    **
    *
    for(1) ->
    io:format(“*~n”);
    for(Max) when Max>1 ->
    io:format(“*”),for(Max-1).

    star(1) ->
    for(1,1);
    star(Number) ->
    for(1,number),star(Number).

    %% *



    star(N) ->
    [for(Y,N) || Y<-lists:seq(1, N),Y rem 2 =:= 1].

    for(Max,N) ->
    [io:format(” “)|| Y <- lists:seq(1, (N-Max)div 2)],
    [io:format(“*”)|| X <- lists:seq(1, Max)],
    io:format(“~n”).

    %%接下来我要放大招了
    %%通过几天的学习,我写了一个计算器,可以判断优先级 类似这样的 a*b+c*(d+e)*f+g
    %% @author 30555
    %% @doc @todo Add description to calculator.
    %%
    %% a + b * c + ( d * e + f ) * g
    -module(calculator).

    %% ====================================================================
    %% API functions
    %% ====================================================================
    -export([rpn/1,rpncal/1]).

    -define(F, #{“)”=>0,”+”=>1,”-“=>1,”*”=>2,”/”=>2,”(“=>3}).
    rpn(L) ->
    rpn(string:tokens(L, ” “),[],[]).

    rpn([],[],Resu) ->
    rpncal(lists:reverse(Resu));
    rpn([],Sign,Resu) ->
    rpn([],[],lists:reverse(Sign) ++ Resu);
    rpn([H|T]=L,Sign,Resu)->
    case maps:is_key(H, ?F) of
    false -> rpn(T,Sign,[H|Resu]);
    true -> rpn2(L,Sign,Resu)
    end.

    rpn2([H|T],[],Resu) ->
    rpn(T,[H],Resu);
    rpn2([H|T]=L1,[X|Sign]=L2,Resu) ->
    A = maps:get(H, ?F) - maps:get(X, ?F),
    rpn22(A,L1,L2,Resu).

    rpn22(A,[H|T]=L1,[X|Sign]=L2,Resu) ->
    if A > 0 ->
    rpn(T,[H|L2],Resu);
    abs(A) =:= 3 ->
    rpn(T,Sign,Resu);
    A =< 0 ->
    case maps:get(X,?F) =:=3 of
    true ->
    rpn(T,[H|L2],Resu);
    false ->
    rpn2(L1,Sign,[X|Resu])
    end
    end.

    rpncal(L) ->
    io:format(“==========>~p”,[L]),
    [Res] = lists:foldl(fun rpn/2, [], L),
    Res.
    read(N) ->
    case string:to_float(N) of
    {error,no_float} -> list_to_integer(N);
    [F,_] -> F
    end.

    rpn(“+”,[N1,N2|S]) ->
    [N2+N1|S];
    rpn(“*”,[N1,N2|S]) ->
    [N2*N1|S];
    rpn(“/”,[N1,N2|S]) ->
    [N2/N1|S];
    rpn(“-“,[N1,N2|S]) ->
    [N2-N1|S];
    rpn(X,Stack) ->
    [read(X)|stack].

    %% ====================================================================
    %% Internal functions
    %% ====================================================================

    ~~~

    展开全文
  • ivy-erlang-complete:ivy-erlang-complete是erlang的上下文相关完成,无需连接到erlang节点
  • erlang_ale, Erlang嵌入式框架嵌入式框架的Erlang Actor库 用于嵌入式的/ale Erlang erlang/jar提供了高级抽象,用于嵌入式平台上通过 I2C 。SPI和kdb与硬件外设接口。正在启动erlang/ale同时支持rebar3和 erlang.mk...
  • erlang21.1.2

    2019-02-24 17:21:31
    最新版本rabbitmq需要最新版本的erlang,但是rabbitmq官网不提供erlang的最新版本下载,经过四处寻找,找到此版本,经测试rabbitmq-server3.7.12可以正常启动,如果rabbitmq-server启动时报{"init terminating in do...
  • erlang 21.3

    2020-05-25 15:49:23
    erlang21.3版本安装包 ,otp_src_21.3.tar.gz。官网下载实在是太慢了。
  • erlang 23.1

    2020-09-27 16:42:55
    最新 erlang 下载,帮助大家解决下载慢的问题。官网的下载真的很慢很慢很慢,而且文件也很大,为了方便大家的下载,这里提供一份大家可以接受的积分,可以私信。
  • erlang19.3

    2018-03-25 10:56:19
    erlang19.3 otp_src_19.3.tar.gz
  • Erlang 之父去世,他留给程序员两点忠告

    万次阅读 多人点赞 2019-04-21 21:11:01
    北京时间 4月20日,据Erlang Solutions、Erlang Factories的创始人Francesco Cesarini的推特称,Erlang之父Joe Armstrong于4月20日去世,享年68岁。 Francesco怀念道:“尽管他不在了,但他的工作已经打下的基础,...

    整理 | 伍杏玲
    出品 | CSDN(ID:CSDNnews)

    北京时间 4月20日,据Erlang Solutions、Erlang Factories的创始人Francesco Cesarini的推特称,Erlang之父Joe Armstrong于4月20日去世,享年68岁。

    Francesco怀念道:“尽管他不在了,但他的工作已经打下的基础,将对未来几代人都有用的。”

    Joe Armstrong 是谁?

    1950年12月27日,Joe Armstrong出生于英国伯恩茅斯。

    虽然Joe Armstrong 17岁时开始接触到Fortran编程,但他从本科直到博士念的是物理学,后来因为积蓄用完无法完成学业,而转向计算机科学。

    后来为了谋生,他成为Donald Michie(英国人工智能领域奠基人之一)的研究员。在此期间,他撰写了一些有关机器人视觉的论文。

    后来政府削减了对人工智能的研究经费,Armstrong又回到了物理学领域,从事5年多与物理学编程相关的工作。开始时他在欧洲非相干散射科学协会(EISCAT)工作,后来又到了瑞典空间研究中心工作,协助开发应用程序系统。最后Armstrong加入爱立信计算机科学实验室,在那发明Erlang,成为容错系统开发领域的世界级专家。

    并在2003 年,Armstrong获得瑞典皇家工学院(KTH)的计算机科学博士学位,发表的博士论文《Making reliable distributed systems in the presence of software errors》对研究并发有不菲的参考价值。

    在念本科时,Armstrong有件趣事:他那时已特别喜欢编程和善于调试程序。如果别人程序出了问题,他就会以一杯、两杯、三杯啤酒的“收费”去帮助同学调试程序。

    为什么他的贡献如此重要?

    Armstrong发明的Erlang在全球范围内是个小众语言,根据TIOBE发布的最新语言排行榜,Erlang排名第47位,市场份额占有仅为0.177%。它不是像Java、C++是面向对象语言的,它是函数编程语言。

    早在1986年,Armstrong开始编写Erlang,当时Erlang设计初衷针对的软件是类似于电话交换机那样的高可用性、高可靠性系统。并在1998年,Erlang作为开源项目发布。

    当程序员们开始努力应对多核系统未来的发展趋势时,并发性引起了他们的注意。而Erlang正是拥有强大的并行处理能力和容错机制,并成就了可靠性达到99.9999999%的目前世界上最复杂的 ATM 交换机。

    对于编程语言,Armstrong认为编程语言必须简单好用,才能便于开发者去学。

    老码农的两条忠告


    △Armstrong在SDCC 2016中国软件开发者大会

    Armstrong曾在CSDN主办的“SDCC 2016中国软件开发者大会”上,幽默地分享了他编程20年来对软件开发的一些思考,他说:“人们总认为产品开发流程是这样:Specify→Build→Test→Sell→$$$,然而实际上却是这样的:Start→???→Product”。

    为什么他会这么说呢?

    Armstrong曾在《编程人生》中分享过他在编程习惯上有了两个改变,值得我们开发者借鉴。

    第一:先思考再编程。

    他在编程的20年都犯着一个错:在年轻的时候,会不停地写程序,直到完成。

    等写完后他会突然发现:“啊!搞错了!”等到重新编写程序,会再次发现:“噢,程序是错的。”于是又重新编写。

    他于是开始思考改变:“先不要动手写代码,把这些东西都想好,这样做不是很好吗?”

    第二:不要在疲惫时写代码。

    在年轻的时候,他会通宵地写程序,例如一个小时接着一个小时不休息,不停地编写代码,一口气写到凌晨4点钟。即使身体状况不好他也坚持不懈,因为他要让代码能够跑起来。

    后来他发现程序员在疲惫的时候编写的程序都是垃圾,第二天就要把它们废弃掉。他认为真正好的代码是程序员完全进入状态的时候编写,人甚至没有在考虑程序,只是很放松地坐在那里,输入代码,这样的代码会很不错。

    他建议如果程序员觉得自己状态不对,“不能再写了。”停下来,干点别的。

    在开发者大会上,Armstrong预言在未来二十年,所有与关键性能相关的软件将与硬件相融合。

    可惜Armstrong无法亲自参与这当中来,我们仅在此感谢如此热爱编程的Joe Armstrong,一生为编程所作出的贡献。

    参考资料:
    Joe Armstrong:关于Erlang,有很多东西我想改变
    程序调试与啤酒——Erlang之父Joe Armstrong访谈
    在这里插入图片描述

    展开全文
  • Erlang安装包

    2018-12-13 17:41:05
    Erlang是一种通用的面向并发的编程语言。 其特点有:并发性、分布式、健壮性、软实时性、热代码升级、递增式代码装载、外部接口、速错等等等等
  • erlang安装包

    2017-12-21 11:28:30
    http://www.erlang.org/downloads官网下载太慢,现放上来与大家共享
  • erlang21.0源码

    2018-07-19 08:57:20
    erlang21.0源码。! erlang21.0源码。!erlang21.0源码。!erlang21.0源码。!
  • 安装Erlang

    2021-01-27 11:29:53
    方式一:从Erlang Solution安装Erlang(推荐) 1.添加erlang solutions源 wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm 2.安装软件包 sudo rpm -Uvh erlang-solutions-1.0-1....

    方式一:从Erlang Solution安装Erlang(推荐)

    1.添加erlang solutions源

    wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
    

    在这里插入图片描述
    2.安装软件包

    sudo rpm -Uvh erlang-solutions-1.0-1.noarch.rpm
    

    在这里插入图片描述
    3.安装 erlang

    sudo yum install erlang
    

    在这里插入图片描述

    按照中途会有需要确认的地方,最后成功安装后如下图:
    在这里插入图片描述

    如遇到安装失败可重复操作下,有时可能是网络原因导致

    方式二:从EPEL源安装(这种方式安装的Erlang版本可能不是最新的,有时候不能满足RabbitMQ需要的最低版本)

    1.启动EPEL源

    sudo yum install epel-release
    

    2.安装erlang

    sudo yum install erlang 
    
    展开全文
  • erlang书籍

    2012-08-03 11:19:41
    erlang书籍
  • Riak Erlang客户 本文档假定您已经启动了Riak群集。 有关该先决条件的说明,请参阅的指南。 您也可以在查看Riak Erlang Client EDocs。 建立状态 掌握: 开发: 本文档假定您已经启动了Riak群集。 有关该先决条件...
  • Erlang:使用Erlang Json库 1.下载Erlang的Json库 官网地址:http://www.lshift.net/blog/2007/02/17/json-and-json-rpc-for-erlang/ GitHub地址:https://github.com/tonyg/erlang-rfc4627/ Linux文件:erlang-rfc...
  • Erlang简介

    2020-09-03 20:08:15
    Erlang的教父是乔·阿姆斯特朗,关于此人的生平轨迹,如有兴趣,请自行百度Google。 如果学习Erlang遇到问题,Erlang中文社区也许可以帮助你。 简单了解一下Erlang,这篇文章会让你知道Erlang是有很大的用武之地。 本...
  • Erlang编程指南

    2018-04-03 20:21:22
    erlang编程指南》是对erlang语言的深入介绍。erlang是任何必须并发、容错和快速响应的环境的理想编程语言。随着多核处理器及其针对并发的新的可扩展方式的发展,erlang得到了广泛的使用。通过本书,你将学会如何...
  • Zero-dependency Erlang RPM for RabbitMQ This is a (virtually) zero dependency 64-bit Erlang RPM package that provides just enough to run RabbitMQ. It may be easier to install than other Erlang RPMs in...
  • clojure-erlastic:Micro库,它使用erlang JInterface库来解码和编码Binary Erlang Term和带有core.async通道的简单erlang端口接口。 因此,您可以使用clojure抽象与erlang协程进行通信

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,246
精华内容 12,098
关键字:

erlang