问题描述
SPJ = Simon Peyton Jones,Haskell 主要设计者和 GHC 维护者其实C#很大程度上就是MSR的作品啊。
最最最最初的C#设计有三个主要源头:
- 最早期的Java
- COM以及Windows的MS系经验
- Anders Hejlsberg所代表的Borland系经验
所以这奠定了一个基础:
- 跟Java有血缘关系(继承了一些Java非常纱布的设计,例如说covariant array),
- 能跟COM良好交互并试图替代COM成为新的component技术,同时尝试避免DLL hell,然后为了方便GUI编程等场景而需要有方便的“事件”/“回调”设计(Delegate / Event),
- 然后总体设计经过打磨,语言和标准库的设计都有种流畅感,而且可以在Visual Studio里有很好的编辑体验。
然而在这个基础之上,很多新东西都是MSR贡献出来的。例如说:
- C# 2.0 / .NET 2.0的泛型
- Design and Implementation of Generics for the .NET Common Language Runtime - Microsoft Research
- Formalization of Generics for the .NET Common Language Runtime - Microsoft Research
- Variance and Generalized Constraints for C# Generics - Microsoft Research
- Combining Generics, Pre-compilation and Sharing Between Software-Based Processes - Microsoft Research
- C# 3.0的LINQ,还有后来各种衍生研究例如说DryadLINQ。同学们玩过LINQ引入的Expression Tree就会发现,把一个lambda表达式赋值给Expression<T>类型不就是LISP的quote么,然后得到的Expression<T>不就是像S-expr一样的“代码即数据”么。
- C# 4.0 / .NET 4.0的Code Contracts - 源自MSR的Spec# - Microsoft Research
所以说现在我们所看到的C#,其实已经是有浓厚的MSR风格的语言了。有好些大牛,例如Erik Meijer、Don Syme等,都强力参与了这个过程。
虽说没有F#那么纯粹MSR。