Erlang (/ˈɜrlæŋ/ er-lang) is a general-purpose concurrentgarbage-collected programming language and runtime system. The sequential subset of Erlang is a functional language, with strict evaluationsingle assignment, and dynamic typing. It was designed by Ericsson to support distributed, fault-tolerantsoft-real-time, non-stop applications. It supports hot swapping, so that code can be changed without stopping a system.[2]

While threads require external library support in most languages, Erlang provides language-level features for creating and managing processes with the aim of simplifying concurrent programming. Though all concurrency is explicit in Erlang, processes communicate using message passing instead of shared variables, which removes the need for locks.

The first version was developed by Joe Armstrong in 1986.[3] It was originally a proprietary language within Ericsson, but was released as open source in 1998.
wikipedia:http://en.wikipedia.org/wiki/Erlang_(programming_language)

Erlang是一种通用的并行程序设计语言,它由乔·阿姆斯特朗瑞典电信设备制造商爱立信所辖的计算机科学研究室开发,目的是创造一种可以应付大规模开发活动的程序设计语言运行环境。Erlang于1987年发布正式版本,最早是爱立信拥有的私有软件,经过十年的发展,于1998年发表开放源代码版本。

Erlang是运作于虚拟机解释型语言但是现在也包含有乌普萨拉大学高性能Erlang计划(HiPE)[1]开发的原生代码编译器,自R11B-4版本开始,Erlang也支持脚本方式执行。在程序设计范型上,Erlang属于多重范型编程语言,涵盖函数式并行分布式。循序运行的Erlang是一个及早求值单次赋值动态类型函数式编程语言

Erlang得名于丹麦数学家统计学家Agner Krarup Erlang,同时Erlang还可以表示Ericsson Language。Erlang语言由瑞典爱立信电信公司的乔·阿姆斯特朗开始设计,开始于公元一九八零年代。最初是以Prolog程序设计语言为基础,几度改版之后,改成以Joe's Abstract Machine为基础的独立语言运行环境。虽然语言风格仍与Prolog相近,不过因Erlang语言设计的走向,Erlang成为具备函数语言特色的程序设计语言[2]

http://baike.baidu.com/view/765701.htm

语言特色

  • 并行程序设计 在语言中,可以借由spawn/*函数,将特定的函数设置为独立的进程,之后可以做跨进程通信。
  • 函数式程序设计 由于Erlang早期以Prolog开发制成,受语言特性影响,即成为函数式语言。
  • 单次赋值 每个变量只能跟数据绑一次,所以,不像一般程序设计语言的变量可以多次指定为不同的值。单次赋值的好处是状态单纯,使程序容易阅读。
  • 及早求值或严格求值 Erlang基本求值策略为电脑语言中及早求值之特性。而且,可以借由明确使用无参数的λ表达式,将特定函数设置为惰性求值策略。
  • 动态数据类型与类型系统 有编译时期的类型检查系统支持。
  • 快速失败 在运行时期发生的错误,会由错误位置提交信息,发生错误的进程立刻停止执行。借由进程通讯机制,可以自动传递错误、捕捉错误,使其他进程能够帮助处理错误。
  • 代码热更新 由于Erlang是函数语言,可以撰写特定的程序结构,制作实时更换新版函数的机制。
  • 脚本语言 Erlang实现提供了脚本运行方式。

http://zh.wikipedia.org/wiki/Erlang

几分钟入门教程:

Erlang不但是一种编程语言,而且它具有比编程语言更加贴近操作系统的一些特性:并发线程、作业调度、内存管理、分布式、网络化等。据说使用Erlang编写的Yaws Web服务器,其并发性能是apache的15倍!

这个Erlang初始开源版本包含了Erlang的实现,同时它也是用于构建分布式高可用性系统的Ericsson中间件的最大组成部分。

Erlang具有以下特性:

◆并发性

Erlang具有超强的轻量级进程,这种进程对内存的需求是动态变化的,并且它没有共享内存和通过异步消息传送的通讯。Erlang支持超大量级的并发线程,并且不需要操作系统具有并发机制。

◆分布式

Erlang被设计用于运行在分布式环境下。一个Erlang虚拟机被成为Erlang节点。一个分布式Erlang系统是多个Erlang节点组成的网络(通常每个处理器被作为一个节点)。一个Erlang节点能够创建运行在其它节点上的并行线程,而其它节点可以使用其它操作系统。线程依赖不同节点之间的通讯,这完全和它依赖于单一节点一样。

◆健壮性

Erlang具有多种基本的错误检测能力,它们能够用于构建容错系统。例如,进程能够监控其它进程的状态和活动,甚至这些进程是在其它节点上执行。在分布式系统中的线程能够配置为在其它节点故障的情况下自动进行故障恢复,并在故障节点恢复时自动迁移回到恢复节点。

◆软实时性

Erlang支持可编程的“软”实时系统,这种系统需要反应时间在毫秒级。而在这种系统中,长时间的垃圾收集(garbage collection)延迟是无法接受的,因此Erlang使用了递增式垃圾收集技术。

◆热代码升级

一些系统不能够由于软件维护而停止运行。Erlang允许程序代码在运行系统中被修改。旧代码能被逐步淘汰而后被新代码替换。在此过渡期间,新旧代码是共存的。这也使得安装bug补丁、在运行系统上升级而不干扰系统操作成为了可能。

◆递增式代码装载

用户能够控制代码如何被装载的细节。在嵌入式系统中,所有代码通常是在启动时就被完全装载。而在开发系统中,代码是按需装载的,甚至在系统运行时被装载的。如果测试到了未覆盖的bug,那么只有具有bug的代码需要被替换。

◆外部接口

Erlang进程与外部世界之间的通讯使用和在Erlang进程之间相同的消息传送机制。这种机制被用于和操作系统通讯、与其它语言编写的程序交互。如果出于高效率的需要,这种机制的一个特殊版本也允许例如C程序这样的代码直接链接到Erlang运行时系统中来。

Erlang组件

Erlang具有许多单独的组件,它们能够在开发应用时作为组建块(building blocks)使用。同时这些组件也熟知Erlang的系统消息(load、unload、start、stop、restart、change code)。

◆Inets

HTTP 1.0服务器和FTP客户端。

◆Mnesia

使用Erlang的分布式实时数据库。它支持RAM复制、磁盘存储、动态改变shema、保存任意复杂的数据结构。Mnesia之所以非常快速,是因为它运行在和应用相同的地址空间(因为Mnesia和应用都使用Erlang编写)。Mnesia展示了Erlang的强大:你能够使用多少种语言使用少于20000行的代码编写一个全特性、工业强度、分布式的DBMS?

◆Orber

CORBA v2.0对象请求代理(ORB)。

◆SNMP

可扩展的SNMP v1/v2代理和MIB编译器。

Erlang工具和代码库

Erlang具有一套常用工具库:

◆Appmon

进程组图形监控(在本地和远程节点上)。

◆ASN.1

支持ASN.1基本标记法和BER、DER、PER编码规则的编译时和运行时的代码包。

◆Compiler

Erlang编译器。

◆Debugger

图形化Erlang调试器。

◆ERTS

Erlang运行时系统,包括虚拟机、垃圾收集、端口映射守护进程。

◆GS

编写图形用户接口的代码库。

◆IC

把OMG的接口定义语言(IDL)转换到Erlang、C和Java语言的编译器。

◆Kernel

运行Erlang系统所必须的C代码:Erlang内建功能(BIFs);代码、启动、命名服务;对网络和分布式的支持;装载器、连接器、记录器;操作系统和文件系统接口。

◆Mnemosyne

可选的用于Mnesia的查询语言。

◆Mnesia Session

以IDL定义的与Mnesia接口的外部语言,它们通过IIOP和erl_interface协议对Mnesia进行访问。

◆OS monitor (OS_MON)

监控CPU、硬盘、内存使用情况,包括SNMPv1/v2 MIBs。并且提供了与Solaris syslogd、Windows NT事件日志的接口。

◆Parse tools

用于Erlang的LALR-1解析生成器(yecc),它和yacc类似。Yecc使用BMF语法定义作为输入,生成Erlang代码作为解析输出。Yecc被用于生成Erlang解析器。

◆PMan

跟踪、查看Erlang进程状态(在本地或者远程节点上)的工具。

◆SASL

进程、错误、崩溃报告处理、报告浏览、释放处理、重载管理。

◆Stdlib

标准代码库:输入、输出;基于内存、磁盘的表存储(ETS和DETS);图表、字典、列表、字符串、集合、队列;正则表达式;数学公式。Erlang解释器、tokenizer、解析器、lint和格式化打印。用于容错服务器的通用框架、事件处理器、状态机和线程监管等等。

◆Table visualizer

查看ETS和Mnesia表格的工具。

◆Toolbar

简化了对Erlang工具的访问。

◆Tools

覆盖分析器、优化器、基于文字的跟踪器、Emacs模式、Emacs TAGS文件生成器、make工具、调用图形化工具。

 

启动Erlang

如果你使用unix系统的话,请输入“erl”;而如果你使用Window系统的话,请点击Erlang的开始图标来启动Erlang。你应该看到如下界面:

os prompt > erlErlang (JAM) emulator version 4.7.3.3 Eshell V4.7.3.3  (abort with ^G)1>

“>”提示表示了系统正在等待输入。

将Erlang用作计算器

1> 2131836812671*12937192739173917823.275799837339909288133199991352332>

记住每个表达式都是以句点和空格为结束符的!

编辑从前的表达式

我们使用简单的emacs行编辑命令编辑从前的表达式,最常用的命令如下:

◆^P 获取上一行。
◆^N 获取下一行。
◆^A 将输入焦点移动到当前行首。
◆^E 将输入焦点移动到当前行尾首。
◆^D 删除当前光标所在的字符。
◆^F 向前移动一个字符。
◆^B 向后移动一个字符。
◆回车 执行当前命令。

请注意: ^X 表示Control + X 。尝试按下Control+P,看看什么会发生?

编译你的第一个程序

在你所喜欢的文本编辑器中输入以下内容,并将其保存到文件中:

-module(test).-export([fac/1]).fac(0) -> 1;fac(N) -> N * fac(N-1).

保存文件名为test.erl,请注意文件名必须和模块名相同。

通过输入c(test)编译程序,然后运行它:

3> c(test).{ok,test}30> test:fac(20).24329020081766400004> test:fac(40).
81591528324789773434561126959611589427200000000032>

Ok,现在你也可以尝试编写一些有趣的程序了。

更多:

http://www.ibm.com/developerworks/cn/opensource/os-erlang1/

Erlang语言介绍的更多相关文章

  1. 记一次erlang语言bug导致rabbitmq的队列没有消费者的问题

    公司开发和测试环境采用的erlang版本是19.0.3,rabbitmq版本为3.6.10.集群条件下稳定使用了近一年时间,没什么问题. 为了保持和线下一致,线上生产环境采用了相同的版本,运行几个月后 ...

  2. Erlang基础 -- 介绍 -- Erlang特点

    前言 Erlang是具有多重范型的编程语言,具有很多特点,主要的特点有以下几个: 函数式 并发性 分布式 健壮性 软实时 热更新 递增式代码加载 动态类型 解释型 函数式 Erlang是函数式编程语言 ...

  3. R语言实战读书笔记1—语言介绍

    第一章 语言介绍 1.1 典型的数据分析步骤 1.2 获取帮助 help.start() help("which") help.search("which") ...

  4. Arduino语言介绍

    Arduino语言介绍 Arduino语言是建立在C/C++基础上的,其基础是C语言,Arduino语言只不过把AVR单片机(微控制器)相关的一些参数设置都函数化,不用我们去了解他的底层,让不了解AV ...

  5. day02编程语言,Python语言介绍,Python解释器安装,环境变量,Python代码执行,pip,应用程序使用文件的三步骤,变量,变量的三大组成,比较,pycharm

    复习 重点: 1.进制转换:二进制 与十六进制 2.内存分布:栈区 与堆区 # 二进制1111转换十六进制 => 8 4 2 1 => f 10101100111011 => 2a7 ...

  6. Erlang语言学习入门

    这是一个命令行程序,可以直接在里面输入表达式进行计算,例如来一个简单的: Erlang R15B01 (erts-5.9.1) [smp:4:4] [async-threads:0] Eshell V ...

  7. (转)expect命令脚本语言介绍及生产实践

    原文:http://www.fblinux.com/?p=526 Expect介绍 expect是一个用来实现自动交互功能的软件套件,是用来实现自动和交互式任务程序进行通信,无需人的手工干预.比如SS ...

  8. Erlang基础 -- 介绍 -- Wordcount示例演示

    在前两个blog中,已经说了Erlang的历史.应用场景.特点,这次主要演示一个Wordcount的示例,就是给定一个文本文件,统计这个文本文件中的单词以及该单词出现的次数. 今天和群友们讨论了一个问 ...

  9. Java众神之路(1)-语言介绍

    Java语言介绍 1.Java的历史 我个人认为,学习一种技术,不止要关注技术本身,也应该去了解一下它的发展史,这一方面是对技术本身的尊重,另一方面也是希望能够通过该技术的发展历史推测出其未来可能的发 ...

随机推荐

  1. Log4j之properties配置文件详解

    Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式.日志信息的优先级从高到低有ERROR.WARN. INFO.DEBUG,分别用来指定这条日志信息的重要程度: ...

  2. 前端MVVM学习之KnockOut(二)

    现在开始学习Knockout并且做个简单的例子. Knockout是建立在以下三个核心功能之上的: 1.Observables and dependency tracking(属性监控与依赖跟踪) 2 ...

  3. EF调用存储过程实例

    创建实体: public class User { public string UserID { get; set; } public string UserName { get; set; } pu ...

  4. Code First 创建数据库

    最近在对以前学的知识做一个总结,EF 这块,Code First 是很重要的一部分,方便快捷创建模型.   Code First有两种配置方式: DataAnnatation: [Table(&quo ...

  5. 【图解ASP.NET MVC运行机制理解-简易版】

    很多盆友咨询ASP.NET MVC的机制.网上也有好多.但是都是相当深奥.看的云里雾里的.我今天抽空,整理个简易版本.把处理流程走一遍. 当然,这个只是处理请求的一部分环节.百度的面试题“客户端从浏览 ...

  6. CentOS安装错误:no default or ui configuration

    靠,以后再也不用浏览器自带的下载工具下载镜像文件了,原来是下载的不完整,但是显示完全下载完毕了,真特么误导人.文件的checksum不对. references: https://www.centos ...

  7. vi常用命令笔记

    1.Vi 删除全部内容,删除某行到结尾,删除某段内容 (1)转到文件指定行 nG (2)删除所有内容(先用G转到文件尾) ,使用: $G :1,.d (3)删除第9行到第200行的内容(先用200G转 ...

  8. Linux 下的php,nginx,mysql的安装

    yum -y install wget make vim install gcc gcc-c++ ncurses ncurses-devel autoconf libjpeg libjpeg-deve ...

  9. spark-submit

    一旦用户的应用打包后,就可以使用bin/spark-submit脚本来启动,此脚本就会为Spark和它的依赖安排配置环境变量,还支持不同的集群管理和部署模式: ./bin/spark-submit \ ...

  10. 【SDUT 3038】迷之博弈

    action=showproblem&problemid=3038">[SDUT 3038]迷之博弈 简直就是上次省赛的缩减版... 仅仅只是这个是链 省赛是环. ..1 2先 ...