编程与类型系统

[美] 弗拉德·里斯库迪亚(Vlad Riscutia)
Preface 前言 我将多年间学习类型系统和软件正确性的经验汇聚起来,加以提炼,并辅以现实世界的应用,编写了这本实用的图书。 我一直对编写更好的代码有浓厚的兴趣,但是如果让我准确说出从什么时候开始走上这条道路,我会说是2015年。当时,我换了团队,想要快速学习现代C++。我开始观看C++会议视频,并阅读Alexander Stepanov关于泛型编程的著作,从一种完全不同的视角了解了如何编写代码。 与此同时,我在业余时间学习Haskell,一步步了解它的类型系统的高级特性。在使用函数式语言进行编程后,就能够很清晰地理解为什么随着时间的推移,更主流的语言开始采用函数式语言中的一些被认为理所当然的特性。 我阅读了关于这个主题的许多图书,包括Stepanov的Elements of Programming和From Mathematics to Generic Programming,Bartosz Milewski的Category Theory for Programmers,以及Benjamin Pierce的Types and Programming Languages。从书名就可以知道,这些图书更偏向理论/数学方面。在学习了关于类型系统的更多知识后,我在工作中编写的代码也变得更好了。类型系统设计的理论与日常生产软件之间存在直接的联系。这并不是一个革命性的发现:复杂的类型系统特性之所以存在,就是为了解决现实世界的问题。 我意识到,并不是每个程序员都有时间和耐心来阅读那些提供数学证明、讲解深入的图书。但我阅读这些书并没有浪费时间,这使我成为一名更好的软件工程师。我认为应该有这样一本书:以更加轻松的方式来介绍类型系统及它们提供的优势,并关注每个人能够在日常工作中使用的实际应用。 本书旨在全面介绍类型系统的特性,从基本类型开始,涵盖函数类型和子类型、OOP、泛型编程和高阶类…