Erlang 001--开篇
有段时间没有更新博客了,最近稍微接触了下一门相对小众的语言Erlang,个人感觉学习一段时间有必要总结总结,本文作为该系列的开篇,仅仅列举一些与Java的一些不同点和个人对Erlang的一些主观印象,权当自己学习之路上的一丝痕迹。
Erlang的来历?
| Erlang is a general-purpose concurrent, garbage-collected programming language and runtime system. The sequential subset of Erlang is a functional language, with strict evaluation, single 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--开篇的更多相关文章
- [erlang 001] erlang中的错误及异常处理
一. erlang中的错误 1. 分类 1) 编译错误:主要是编译器检测出的代码语法错误: 2) 逻辑错误:是指程序没有完成预期的工作,属于开发人员的问题: 3) 运行时错误:是指erlang运行时抛 ...
- erl_0014 《硝烟中的erlang》 读书笔记001 “绪论”
1.大家听说Erlang,往往是因为其对高并发的良好支持.其实,Erlang的核心特征是容错,从某种程度上讲,并发只是容错这个约束下的一个副产品.容错是Erlang语言的DNA,也是和其他所有编程语言 ...
- 【消息中间件之RabbitMQ学习】-开篇-001
写在前面的话 项目中因为要用到消息中间件,当初极力推荐RabbitMq.但因为种种原因,最终选型为java+mongodb自实现一套分布式的消.没有用RabbitMq工作过,实属遗憾.因为个人来说实在 ...
- ASP.NET Web API 开篇示例介绍
ASP.NET Web API 开篇示例介绍 ASP.NET Web API 对于我这个初学者来说ASP.NET Web API这个框架很陌生又熟悉着. 陌生的是ASP.NET Web API是一个全 ...
- [Erlang 0127] Term sharing in Erlang/OTP 上篇
之前,在 [Erlang 0126] 我们读过的Erlang论文 提到过下面这篇论文: On Preserving Term Sharing in the Erlang Virtual Machine ...
- 一次erlang 节点CPU严重波动排查
新服务上线后观察到,CPU在10 ~ 70%间波动严重,但从每秒业务计数器看业务处理速度很平均. 接下来是排查步骤: 1. dstat -tam 大概每10s一个周期,网络流量开始变得很小,随后突然增 ...
- Erlang学习: EUnit Testing for gen_fsm
背景:gen_fsm 是Erlang的有限状态机behavior,很实用.爱立信的一位TDD大神写了一篇怎样測试gen_fsm,这个fsm是一个交易系统,负责简单的交易员登陆,插入item,删除ite ...
- orleans开篇之hello world
orleans开篇之hello world 什么是orleans Orleans是一个建立在.NET之上的,设计的目标是为了方便程序员开发需要大规模扩展的云服务.Orleans项目基本上被认为是并行计 ...
- Erlang/OTP设计原则(文档翻译)
http://erlang.org/doc/design_principles/des_princ.html 图和代码皆源自以上链接中Erlang官方文档,翻译时的版本为20.1. 这个设计原则,其实 ...
- Java网络编程和NIO详解开篇:Java网络编程基础
Java网络编程和NIO详解开篇:Java网络编程基础 计算机网络编程基础 转自:https://mp.weixin.qq.com/s/XXMz5uAFSsPdg38bth2jAA 我们是幸运的,因为 ...
随机推荐
- 进击的菜鸟问题1(设置checkbox全选)
问题:设置页面标签属性时,常常使用jquery.attr("","");在设置checkbox属性时,会出现操作设置checkbox属性后,无法清除,导致第二次 ...
- arguments详解
arguments 是什么? 是一个对象,一个 很像数组的对象 arguments内容是什么? 1是函数运行时的实参列表 2收到实参收集起来,放到一个arguments对象里 在词法分析中,首先按形参 ...
- [51nod1094]和为k的连续区间
法一:暴力$O({n^2})$看脸过 #include<bits/stdc++.h> using namespace std; typedef long long ll; ],sum[]; ...
- Installshield build all installer in development computer
Step: Copy all "SetupPrerequisites" from build server. please make sure below items: Insta ...
- Add lombok to IntelliJ IDEA
Lombok study link: https://www.jianshu.com/p/365ea41b3573 Add below dependency code to pom.xml <d ...
- cocos2dx之tolua++全面分析(二):类注册
tolua被作为库使用时,首先会做大量内部初始化工作: 一.tolua_open是入口点,它创建很多用于管理的内部变量,以下用_G指代全局表,_R指定registry table: 1._R.TOLU ...
- 12、IGV-Integrative Genomics Viewer
1.IGV的网址:http://software.broadinstitute.org/software/igv/(java环境) 常见的几种输入格式bam/sam(比对文件) TDF(bam的精简 ...
- Entity Framework Code-First(2):What is Code-First?
What is Code-First?: Entity Framework introduced Code-First approach from Entity Framework 4.1. Code ...
- 利用superlance监控supervisor运行状态
此文已由作者张家裕授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 最近开发问到supervisor管理下的进程重启了,有无办法做到主动通知,楼主最先想到的是superviso ...
- Haproxy+Keepalived高可用配置
基本实验 参考文档 博文地址 环境拓扑 下面使我们要实现的负载均衡集群图示 主节点地址: 92.0.0.11 从节点地址: 92.0.0.12 共享虚拟地址:92.0.0.8 下面是负载均衡集群可能出 ...