编程语言的类型系统为什么如此重要?

程序是类型的证实。算法

计算机程序是创建在计算机硬件和一系列规则、协议、规范、算法基础之上的;编程

 

程序是创建在逻辑和严格证实基础之上的;安全

逻辑学的基本要素是:概念、判断、推理;闭包

类型系统至关于逻辑和科学中的概念,在此基础上才能进行运算和推理;编程语言

编程语言不过是创建了类型系统和在类型系统基础上的一些列运算法则而已。函数

类型+运算法则+运算推演=程序;性能

 

做者:匿名用户学习

连接:https://www.zhihu.com/question/23434097/answer/42374622优化

来源:知乎编码

著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。

 

先匿了,我不肯定我说的好很差。
发现和《Types and Programming》说的如出一辙,不匿了
安全,有了类型系统之后就能够实现类型安全,这时候程序就变成了一个严格的数学证实过程,编译器能够机械地验证程序某种程度的正确性,从而杜绝不少错误的发生。
正面例子:Haskell、Rust
反面例子:C,动态语言

抽象能力,在安全的前提下,一个强大的类型系统的标准是抽象能力,能将程序中的不少东西归入安全的类型系统中进行抽象,这在安全性的前提下又不损耗灵活性,甚至性能也能很优化。动态语言的抽象能力能够很强,但安全性和性能就不行了。
泛型、高阶函数(闭包)、类型类、Monad、Lifetime(Rust) 属于这一块。

工程能力,一个强类型的编程语言比动态类型的语言更适合大规模软件的构建,哪怕不存在性能问题,可是一样取决于前两点。
对于编译器来讲能清楚程序的意图,对于人来讲也是如此 。一个函数或者相似的东西,说白了就是一个映射关系,Python 中这些映射关系都是没有很明显的约束,要靠约定和默契才能维持,对大型软件来讲这是不行的。一个优秀的强类型的程序,不少函数都不须要文档,光看函数申明就能够了。而在安全的前提下的抽象,也是不容易引起灾难的。

---

不过,同时类型检查和标注增长了学习成本和编码时间成本(类型推倒不是万能的),编译不过也会挫伤初学者信心,不像动态语言上马就能干,边干边学。不过我的以为值。

 

https://www.zhihu.com/question/23434097

相关文章
相关标签/搜索