Erlang语言介绍

 

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]php

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.css

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年发表开放源代码版本。shell

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]apache

 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/

相关文章
相关标签/搜索