热转印 东莞网站建设,外贸企业建网站,企业网站开发综合实训,中小企业查询网站Erlang入门 (2008-02-17 14:53:30) 标签#xff1a; it/科技 Erlang不但是一种编程语言#xff0c;而且它具有比编程语言更加贴近操作系统的一些特性#xff1a;并发线程、作业调度、内存管理、分布式、网络化等。据说使用Erlang编写的Yaws Web服务器#xff0c;其并发性… 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退出环境ctrlG 出现提示符User switch command 然后输入q回车 另外一种退出erlang环境的方法是直接输入“halt().” 3ctrlG 出现提示符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环境编译然后运行如[shangyonglocalhost ~]$ erlErlang (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