有段时间没有更新博客了,最近稍微接触了下一门相对小众的语言Erlang,个人感觉学习一段时间有必要总结总结,本文作为该系列的开篇,仅仅列举一些与Java的一些不同点和个人对Erlang的一些主观印象,权当自己学习之路上的一丝痕迹。

Erlang的来历?

Erlang is a general-purpose concurrentgarbage-collected programming language and runtime system. 
The sequential subset of Erlang is a functional language, with strict evaluationsingle assignment
anddynamic typing. For concurrency it follows the Actor model. It was designed by Ericsson to support 
distributed, fault-tolerant, soft-real-time, non-stop applications. It supports hot swapping, thus 
code can be changed without stopping a system.[1]

                          ----以上摘自维基百科

  源于1981年开始的一个研究项目,该项目的目的是探索更好的编写电信应用软件的方法。电信类应用都是一些大型的程序,虽然经过了严密的测试,但是投入运行后还是难免会有许多错误。我们假设这些程序不可避免地会含有错误,进而寻求在软件包含错误的情况下构建可靠系统的方法。该项研究的成果是开发出了一种新的编程语言(Erlang),一门设计方法学,和一个用以构建健壮系统的程序库(OTP)

  ----以上摘自Erlang之父Joe Armstrong于2003年发表的论文:Making reliable distributed systems in the presence of software errors

Erlang与主流语言的区别?

  Erlang是一门面向消息的语言(message-oriented language);

  没有for,控制逻辑简单只有if 和 case,没有else,没有continue break goto,what???(想迭代用递归);

  万物皆进程,并发靠通信;

  进程具有强隔离性(strong isolation),一个进程因错误而结束,不会影响到其他进程;

  唯一的一门并发上做到公平调度的语言;

  没有共享内存,没有锁(但不代表不存在竞态条件,需求导向下,依然会隐式地使用锁的替代机制);

  快排只需5行(???);

  变量Immutable(没想到吧);

  不存在布尔类型,平时我们用的true和false都是原子而已(???);

  不同类型不能相加,但可以比较(1<false返回true,抓狂了吧);

  将同名,但参数不同数量的方法视为不一样的两个方法(不同于Java的方法重载,经常弄错结尾符号);

  进程要么好好跑,要么死翘翘;

  神奇的模式匹配(读写记录,加载函数,处处都用的到);

  丰富的工具集;

  内存缓存解决方案ETS(检索时间为常量而且为常量值);

  极其轻量的进程(一个Erlang进程大概300个字,创建只需几微秒);

  系统高容错;

  支持代码热更新(不用等到凌晨没人的时候更新了);

  适合构建分布式并行计算系统;

  大佬们评价Erlang就是并行计算的未来(火钳刘明)。

Erlang 001--开篇的更多相关文章

  1. [erlang 001] erlang中的错误及异常处理

    一. erlang中的错误 1. 分类 1) 编译错误:主要是编译器检测出的代码语法错误: 2) 逻辑错误:是指程序没有完成预期的工作,属于开发人员的问题: 3) 运行时错误:是指erlang运行时抛 ...

  2. erl_0014 《硝烟中的erlang》 读书笔记001 “绪论”

    1.大家听说Erlang,往往是因为其对高并发的良好支持.其实,Erlang的核心特征是容错,从某种程度上讲,并发只是容错这个约束下的一个副产品.容错是Erlang语言的DNA,也是和其他所有编程语言 ...

  3. 【消息中间件之RabbitMQ学习】-开篇-001

    写在前面的话 项目中因为要用到消息中间件,当初极力推荐RabbitMq.但因为种种原因,最终选型为java+mongodb自实现一套分布式的消.没有用RabbitMq工作过,实属遗憾.因为个人来说实在 ...

  4. ASP.NET Web API 开篇示例介绍

    ASP.NET Web API 开篇示例介绍 ASP.NET Web API 对于我这个初学者来说ASP.NET Web API这个框架很陌生又熟悉着. 陌生的是ASP.NET Web API是一个全 ...

  5. [Erlang 0127] Term sharing in Erlang/OTP 上篇

    之前,在 [Erlang 0126] 我们读过的Erlang论文 提到过下面这篇论文: On Preserving Term Sharing in the Erlang Virtual Machine ...

  6. 一次erlang 节点CPU严重波动排查

    新服务上线后观察到,CPU在10 ~ 70%间波动严重,但从每秒业务计数器看业务处理速度很平均. 接下来是排查步骤: 1. dstat -tam 大概每10s一个周期,网络流量开始变得很小,随后突然增 ...

  7. Erlang学习: EUnit Testing for gen_fsm

    背景:gen_fsm 是Erlang的有限状态机behavior,很实用.爱立信的一位TDD大神写了一篇怎样測试gen_fsm,这个fsm是一个交易系统,负责简单的交易员登陆,插入item,删除ite ...

  8. orleans开篇之hello world

    orleans开篇之hello world 什么是orleans Orleans是一个建立在.NET之上的,设计的目标是为了方便程序员开发需要大规模扩展的云服务.Orleans项目基本上被认为是并行计 ...

  9. Erlang/OTP设计原则(文档翻译)

    http://erlang.org/doc/design_principles/des_princ.html 图和代码皆源自以上链接中Erlang官方文档,翻译时的版本为20.1. 这个设计原则,其实 ...

  10. Java网络编程和NIO详解开篇:Java网络编程基础

    Java网络编程和NIO详解开篇:Java网络编程基础 计算机网络编程基础 转自:https://mp.weixin.qq.com/s/XXMz5uAFSsPdg38bth2jAA 我们是幸运的,因为 ...

随机推荐

  1. Zeppelin的入门使用系列之创建新的Notebook(一)

    不多说,直接上干货! 前期博客 hadoop-2.6.0.tar.gz + spark-1.6.1-bin-hadoop2.6.tgz + zeppelin-0.5.6-incubating-bin- ...

  2. [hdu4734]F(x)数位dp

    题意:求0~f(b)中,有几个小于等于 f(a)的. 解题关键:数位dp #include<bits/stdc++.h> using namespace std; typedef long ...

  3. HTable基本概念

    出处:http://www.taobaotest.com/blogs/1582 引言 团队中使用HBase的项目多了起来,对于业务人员而言,通常并不需要从头搭建.维护一套HBase的集群环境,对于其架 ...

  4. hibernate&nbsp;hql&nbsp;查询指定…

    以数组的形式抛出,前台页面就要把它当成一个数组来处理 以对象抛出,就要当成一个对象来处理. 在JSP页面使用标签时一定要注意这点. 版权声明:本文为博主原创文章,未经博主允许不得转载.

  5. Prim算法:最小生成树---贪心算法的实现

    算法图解: http://baike.baidu.com/link?url=hGNkWIOLRJ_LDWMJRECxCPKUw7pI3s8AH5kj-944RwgeBSa9hGpTaIz5aWYsl_ ...

  6. Ubuntu的apt-get本地源搭配——根据需要自己添加软件作源

    试验机器:   Ubuntu 12.04.Lubuntu都可,其他版本应该也没问题,服务器ip:192.168.235.133     主机执行步骤:   1.在/var/cache/apt/arch ...

  7. 移除KVO的风险

    为之前项目添加一个功能用到了一个开源库XMTextView,然后运行报错提示: 显示没有注册一个叫font的观察者,所以闪退.但是我的UITextView没有添加观察者呀,怎么会删除呢? 原来是由分类 ...

  8. Dapper 存储过程、事务等

    接上一篇<Dapper 增删改查> 0.存储过程 create proc p_login ), ), ) output as begin if(exists(select * from U ...

  9. hdu1521(字典树模板)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1251 题意: 中文题诶~ 思路: 字典树模板 代码1: 动态内存, 比较好理解一点, 不过速度略慢, ...

  10. xml 的使用和解析 及解析工具

    xml 一.xml简介 1. 什么是xml XML:Extensiable Markup Language,可扩展标记语言.和HTML有语法相似之处,也有作用上的不同: 和html相似: 都是由一堆标 ...