类型系统的五十年设计博弈:为什么每个选择都意味着放弃
1960年代,Bertrand Russell为了解决集合论悖论而提出类型理论时,大概没想到这个概念会在六十年后成为程序员日常争论的焦点。今天,每一个新编程语言的诞生都伴随着同样的灵魂拷问:静态类型还是动态类型?结构化还是名义?类型擦除还是单态化? ...
1960年代,Bertrand Russell为了解决集合论悖论而提出类型理论时,大概没想到这个概念会在六十年后成为程序员日常争论的焦点。今天,每一个新编程语言的诞生都伴随着同样的灵魂拷问:静态类型还是动态类型?结构化还是名义?类型擦除还是单态化? ...
1964年,IBM在设计PL/I语言时引入了一个被称为"ON语句"的构造。这个看似简单的语法元素,开创了编程语言中结构化错误处理的先河。六十年后,当Rust的?操作符和Go的显式错误检查成为现代语言的主流选择时,我们不禁要问:为什么错误处理这个问题困扰了语言设计者如此之久? ...
一个概念,三种命运 1975年,Robin Milner在ML语言中首次引入了参数化多态(parametric polymorphism)——这便是我们今天所称"泛型"的理论源头。半个世纪过去,这个概念已经渗透进几乎所有主流编程语言。然而,当你打开C++、Java、Go、Rust、C#的编译器源码,会发现同一个"泛型"概念在这些语言中竟然演化出了截然不同的实现策略。 ...
2019年,微软安全响应中心公布了一组令人震惊的数据:从2006年到2018年,微软产品中约70%的安全漏洞源自内存安全问题。这并非孤例——Chrome团队的数据同样显示,其高危安全漏洞中超过三分之根植于内存安全缺陷。Google的研究人员指出,这一比例在C/C++代码库中呈现出惊人的稳定性。 ...
一位TypeScript开发者在重构代码时遇到了这样一个错误: Type 'string' is not assignable to type 'number'. 错误指向了一个看似完全正确的函数调用。他检查了函数签名,检查了传入的参数类型,甚至检查了调用链上的每一个函数,花了整整两个小时才找到问题的根源——一个在文件另一端、三百行之外的对象属性赋值。 ...