七周七语言(6)
函数式编程的特点
1 一切都是函数,没有对象的概念
2 给定相同的输入产生相同的输出
3 函数没有内部状态,函数没有副作用
在erlang来说,继承了函数式编程的特点,同时增加了一条,elang函数变量只能赋值一次
erlang继承了prolog的思想,在prolog语言中,有三种元素——原子,变量,列表,erlang也是一样,
同时也继承了其语法和强大的模式匹配功能,这些特色都是来自与prolog
如果说 erlang本身的特色的,主要包括以下几点:
1 没有线程,都是轻量级进程
没有线程就意味无资源共享,极大的简化了并发编程以及增加了并发执行的效率,对于并发实现来说,主要是创建一个轻量级进程。这个我比较好奇,这个和操作系统本身的进程之间的关系。
本身来说,操作系统都是提供进程,erlang这个轻量级进程和操作系统之间的进程不知道有什么关系,是不是自己实现的
2 动态热拔插以及稳定性高
动态语言都有这个都具有热拔插的功能,这个是动态语言的最大优势。但是erlang貌似是编译执行的,难道引用执行的此模块的系统都能够及时感知?
对于稳定性,可能语言核心相对比较小,微内核的,所以有很高的稳定。
3 错误处理机制以及进程自动重启
在遇到错误的时候,java很多语言通过显示定义异常或者在运行时候抛出异常,通过应用程序扑捉来决定如何,erlang则是不处理,进程直接奔溃,然后在重启进程,主要还是因为函数式编程,都是无状态,重试多少次结果都一样
至于强大的并发编程模型,也就是actor模型,和scala很是类似,发送方异步发送消息,接收方通过模式匹配来接受消息
![](https://img2024.cnblogs.com/blog/35695/202408/35695-20240826070647288-243310440.jpg)