Erlang入门
(2008-02-17 14:53:30)
Erlang不但是一种编程语言,而且它具有比编程语言更加贴近操作系统的一些特性:并发线程、作业调度、内存管理、分布式、网络化等。据说使用Erlang编写的Yaws Web服务器,其并发性能是apache的15倍!
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环境配置
安装软件:
http://www.erlang.org/download/otp_src_R12B-0.tar.gz
解压缩后查看README,按照提示安装
文档:http://www.erlang.org/download/otp_doc_html_R12B-0.tar.gz
Erlang入门:
1、操作环境
1)进入环境:erl
2)退出环境:ctrl+G 出现提示符:User switch command
然后输入q回车
另外一种退出erlang环境的方法是直接输入“halt().”
3)ctrl+G, 出现提示符:User switch command,输入h查看erlang终端的帮助
2、基本语法
1)每个表达式都是以句点和空格为结束符的!
2)文件名必须和模块名相同
3、程序
1)示例程序1test.erl
-module(test).
-export([fac/1]).
fac(0) -> 1;
fac(N) -> N * fac(N-1).
进入erlang环境编译然后运行,如:
[shangyong@localhost ~]$ erl
Erlang (BEAM) emulator version 5.6 [source] [smp:4] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.6 (abort with ^G)
1> c(test).
{ok,test}
2> test:fac(6).
720
解释:
-module(test).
这一行声明了模块test,函数必须定义在模块内,并且模块名称必须与源文件名相同。
-export([fac/1]).
而这一行声明导出的函数,fac/1指的是有一个参数的fac函数,因为Erlang允许定义同名的有不同参数的多个函数,通过指定/1来说明要导出的是哪个函数。
2)示例程序2 hello.erl
#!/usr/bin/env escript
main(_) ->
io:format("hello,world!").
chmod +x ./hello.erl
运行./hello.erl,输出hello,world!
Erlang官方站点:http://www.erlang.org/doc/index.html
Erlang中文站点:http://www.erlang-china.org/
Erlang中文讨论组:http://groups.google.com/group/erlang-china
学习站点:http://mryufeng.iteye.com/
转自:http://blog.sina.com.cn/s/blog_467cbd1901008hqd.html
分享到:
相关推荐
Erlang是一种面向并发的、函数式的编程语言,最初由爱立信在1986年为解决电信行业的高并发和容错需求而设计。它不仅是一门语言,还包含了一个运行环境,使得它能够轻松地处理大规模并发任务,特别适合构建高可用性和...
#### 一、Erlang简介与特点 **Erlang**是一种通用的、并发性强的、容错性高的编程语言,适用于构建分布式系统的软件。它最初由爱立信公司开发,用于解决电信系统中的大规模并发问题。Erlang 的核心特性之一是它的轻...
【Core Erlang简介】 Core Erlang是Erlang编译器内部使用的中间表示(Intermediate Representation, IR)。它是Erlang源代码经过初步编译后的形式,用于进一步优化和转换成机器可执行的BEAM代码。尽管Core Erlang对...
#### Erlang简介 Erlang是一种通用、并发、强容错的编程语言,最初由爱立信公司开发,旨在解决电信系统的高并发、高可靠需求。它运行在Erlang虚拟机(Erlang Virtual Machine, ERTS)之上,ERTS提供了语言的基础执行...
1. **Erlang简介** Erlang以其强大的并发处理能力而闻名,它采用了轻量级进程模型,使得在单个系统中可以同时运行成千上万个并发任务。这种设计灵感来源于Actor模型,每个进程都有自己的消息队列,通过消息传递进行...
### 一、Erlang简介 Erlang是一种通用的、并发的、容错的、分布式的函数式编程语言。它最初由爱立信公司开发,用于构建高并发服务和应用程序。Erlang特别适合于开发需要高度可靠性和大规模并发处理能力的系统,例如...
- **第1章:Erlang简介** —— 概述Erlang的历史背景、设计理念以及为什么选择使用Erlang。 - **第2章:安装与配置** —— 提供详细的安装指南,帮助读者搭建Erlang开发环境。 - **第3章:基本语法** —— 介绍...
#### Erlang简介及其特性 Erlang是一种专为构建高并发、高可用性和容错性系统而设计的编程语言与运行环境。其核心优势在于支持大规模并发处理能力,并能够实现分布式计算。Erlang由爱立信公司在上世纪80年代末开发...
**1.1 Erlang简介** Erlang是一种通用、并发、容错性强的编程语言,特别适合开发高可用性系统。它最初由爱立信公司为解决电信系统的实时通信问题而设计,后来逐渐成为构建分布式系统、高并发服务的理想选择之一。 ...
#### 一、Erlang简介 Erlang是一种专为处理大规模并发活动设计的编程语言,由瑞典电信设备制造商爱立信的计算机科学实验室(Computer Science Laboratory, CSLab)开发。该语言的目标是创建一个能够支持高度并发性...
#### 一、Erlang简介 Erlang是一种通用、并发、容错的编程语言,特别适用于构建高可用性的分布式系统。它拥有一个独特的运行时环境,类似于Java虚拟机(JVM),使得编译后的Erlang代码可以在任何支持该虚拟机的平台上...
**RabbitMQ与Erlang简介** RabbitMQ是一个开源的消息代理和队列服务器,它基于AMQP(Advanced Message Queuing Protocol)协议实现,广泛应用于分布式系统中的消息传递。RabbitMQ的核心特点是可靠性和灵活性,它...
**RabbitMQ与Erlang简介** RabbitMQ是一款开源的消息队列系统,它基于AMQP(Advanced Message Queuing Protocol)协议实现,广泛应用于分布式系统中的异步处理、任务调度和解耦通信。Erlang则是一种并发性极强、...
**Erlang简介** Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson开发,主要用于构建高可用性、容错性和分布式系统。它的设计灵感来源于过程通信理论,支持轻量级进程(processes)和消息...
#### 一、Erlang简介 Erlang是一种由Ericsson计算机科学实验室设计和开发的程序语言。它最初是为了满足电信系统的需求而创建的,后来开源化以促进其在Ericsson之外的发展。Erlang特别适合于构建高并发、容错性强的...
Erlang简介 Erlang由Ericsson公司于1986年开发,其设计目标是支持大规模并发处理,同时保证系统的容错性和可扩展性。Erlang采用了函数式编程范式,这意味着代码更易于理解和调试,而且能够更好地处理不可变数据。 ...
**Erlang简介:** Erlang是由Ericsson公司为电信应用设计的一门函数式编程语言。它具有强大的并发处理能力,支持轻量级进程(Lightweight Processes,LWP)和分布式计算,非常适合构建高可用性、高并发的系统。...
#### 一、Erlang简介与安装 - **Erlang**是一种通用、并发、函数式编程语言,适用于构建高可用性系统。它在电信行业有广泛应用,同时也被用于互联网服务、分布式计算等领域。 - **安装步骤**: 1. **下载资源**:从...