ERLang简介

Erlang入门

  (2008-02-17 14:53:30)
标签: 

it/科技

 
     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,正则表达式,网络应用,嵌入式)