笔记之Erlang

来源:互联网 发布:网页美工和淘宝美工 编辑:程序博客网 时间:2024/03/29 09:51

 Fifth Erlang

Erlang简介:(一些很厉害的特性)

它的虚拟机BEAM是唯一堪与java虚拟机匹敌滴;
  • Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此非常适 合于构建分布式,实时软并行计算系统。

  • 使用Erlang编写出的应用运行时通常由成千上万个轻量级进程组成,并通过消息传递相互通讯。进程间上下文切换对于Erlang来说仅仅 只是一两个环节,比起C程序的线程切换要高效得多得多了。

  • 使用Erlang来编写分布式应用要简单的多,因为它的分布式机制是透明的:对于程序来说并不知道自己是在分布式运行。

    Erlang是函数式语言,可靠性方面相当好,可用于开发可靠性极高的系统。(完全的函数式语言)
    使用轻量级进程,发明者简化了应用中多进程创建、管理和通信的过程。分布式消息传递成为基本的语言结构,因此锁机制不在必要,并发性能有很大的提高。
    Erlang能轻易检测到奔溃进程,因此终止相关进程并启动新进程(错误处理”就让它奔溃“);其还能做到”热拔插“代码。也就是说,不必终止代码运行,就可以替换应用程序的各个部分。
(不过,它没有散列表、高阶模块等)
 

语法等:

注释(%)、变量(动态类型)、表达式;
符号(被称为原子),模糊匹配(不知道什么东东)
函数:!!


!!Erlang能表达的最大数没有限制,你可以输出几百位的一个数字,你可以想象得到的结果是满满几个屏幕的数字,而且处理的速度一点不慢、。!!

结构:
Erlang使用case来用作模式匹配:

   case语句用的是模式匹配,而if语句用的是“哨兵”;其,以if关键字开头,后面跟着几个“哨兵->表达式”值得注意的是,Erlang中if语句中在判断是必须有一个为真,(如果之中没有为真的,则会出错)!!
 
匿名函数:(就是把匿名函数当做对象赋值给一个对象进行使用)


列表和高阶函数:

这个章节主要是介绍一些列表操作和高阶函数的使用;
  • 高阶函数:foreach,filter,map,。。。

  • 列表操作:foldl,foldr,。。。

  • 列表构造:【H | T】

    具体的就不写出了,真的想使用或者是深入了解,请看文档或google它;

基本并发语法;

Erlang的三种并发原句是:用“!”发送消息,用spawn产生进程以及用receive接收消息。
下面给一个完整的例子说明使用方法:(如果你把一个西班牙语字符串发送给该进程,它会返回字符串的英语疑问)::

 把分布式消息发送给命名资源,可以使用另一种语法:node@server ! message 。(这是配置远程服务器。。这些请自学,很容易你就能如何去运行一个分布式服务器了)

同步消息:

为了吧消息模型从异步变为同步,我们采取以下三部分策略:
  • 消息服务中的每个receIve子句都要匹配一个元组,元组宝航请求此次翻译服务的进程ID以及需要翻译的词。有了这个ID,我们就知道该把响应发给谁。

  • 每个receive子句都要吧响应送回发送者,而不是吧结果打印出来。

  • 不在使用简单的!语句。




后面还有一个产生链接进程的技术吧,懒得做笔记了,对这个有兴趣的时候可以google或百度下;
这个进程的链接好像很重要,分布式服务可以通过这个来监视系统,实现不同计算机间进程的接管等;
这个点有点难,不好理解,没办法做笔记了;*(直接贴图了)



Erlang总结:

核心:
Erlang其实可以说是并发和容错的代名词。因为处理器的设计者想到了分布式多处理器的方法,所以罪行的编程技术也需要提高。
  • 动态和可靠性:Erlang依靠的不是编译器所提供的人工的“安全网”,而是链接并发的能力,这样既可靠又简单。

  • 轻量级、无共享资源的进程:Erlang拥有消息传递范型和原语,因此它可以轻易的写出带有一定的分离性的应用程序,而这点较为罕见;

  • OTP——企业级的库:这个不了解;

  • 就让他奔溃:这个策略使得i不必理会进程为什么奔溃,因为你只要重启它就好。这是一种函数式编程范型,Erlang的饭不是策略也由此得到了增强。

不足:
  • 语法:它的语法源于Prolog,然而Prolog比较的晦涩难懂,语法有点别扭。(if 、case、还有标点)

整合:不在JVM虚拟机上运行,JVM的各种各样的java库以及数以十万计的可用部署服务器都是宝贵的财富;

 




0 0