Erlang (/ˈɜrlæŋ/ er-lang) is a general-purpose concurrent, garbage-collected programming language and runtime system. The sequential subset of Erlang is a functional language, with strict evaluation, single assignment, and dynamic typing. It was designed by Ericsson to support distributed, fault-tolerant, soft-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,现在你也可以尝试编写一些有趣的程序了。
更多: