【问题标题】:How did generics influence the design of C# and .NET?泛型如何影响 C# 和 .NET 的设计?
【发布时间】:2011-02-23 22:57:02
【问题描述】:

这可能是一个广泛的问题,但我不是很清楚,也不是很好奇。

对于某些问题,我经常听到原因是因为泛型在 .NET 1.0 中不可用。这让我想到以下两件事:

  1. 以前没有考虑过泛型,因此开发人员在 .NET 1.0 之后提出了它,这可能会极大地影响 C# 和 .NET 的设计,但由于已经做出决定(向后兼容性)而不能这样做。

  2. 泛型从一开始就一直在计划中,因此在 .NET 1.0 中没有发布它的唯一问题是直到 2.0 才能够使用它。但除此之外,没有引入多余的功能,也没有做出错误的、不可逆转的决定。

我主要假设 #1,但 #2 是实际情况吗?

【问题讨论】:

  • 这看起来像是飞碟人的工作。
  • 或 Eric Lippert。
  • 1.0 没有泛型或模板。 1.1 的出现是因为他们通过用户测试发现 1.0 使用起来很糟糕。 2.0 是一次重写,是我们今天使用的基础。
  • 考虑到 C++ 在 C# 之前有多久的模板,我很确定 1 不是答案。埃里克·利珀特(Eric Lippert)可能会加入
  • @Joan:不,它们非常不同。 C++ 模板可以接受非类型参数,它们是编译时特性。 C# 泛型只能接受类型参数,它们是运行时特性。表面上它们很相似,但实际上它们有很大不同——只需查看C++ generics 即可了解不同之处。

标签: c# .net generics


【解决方案1】:

泛型已经存在了很长时间,可以与 C++ 模板进行粗略的比较,尽管这个概念(以及可能在其他语言中的实现)甚至早于此。

.Net 1.0 是一个平台的第一个版本,因此计划是发布一些可以合理运行的东西。如果团队中有任何体面的架构师,泛型必须在“计划的未来”中,但可以稍后添加。事实上,关于为 .NET 实现泛型的论文早在 .Net Framework 1.0 RTM 出现前一年就发表了。

时间线:(http://en.wikipedia.org/wiki/List_of_.NET_Framework_versions)

2002-03-05 .Net Framework version: 1.0.3705.0 released
~May, 2001 Don Syme's paper on "Design and implementation of generics for .NET"

Microsoft 可能需要 10 年时间来构建 .Net Framework 4.0(作为 1.0 版),但同时有如此多的代码和如此多的功能,如果该项目需要 5 年时间才能找到所有错误和可用性问题甚至可以成功。

所以你的问题的答案是#2。

Don Syme 主要在 C# 和 .Net 中设计和实现泛型。

资源

Anders Hejlsberg 是我的英雄——来自维基百科——Turbo Pascal 的原作者,Delphi 的首席架构师,后来的 C# 首席架构师

【讨论】:

  • 所以安德斯不在 1.0 的团队中?
  • @Joan - 他是。但是你不能通过隐藏并花费 10 年时间来构建一些东西来进行革命。放出某事(至少合理运作)并发展它。
  • Anders 也应该在 SO 上。
  • @Richard 你忘了 50 美元的 TurboPascal!
  • @Richard TP 从 2011 年开始看起来很蹩脚,但我认为它确实具有开创性,至少在 PC 上是这样。
【解决方案2】:

我几乎可以肯定,从一开始就设想了泛型。完全意识到这项工作将是相当可观的。该项目由 Don Syme(以 F# 闻名)领导,他关于设计的 first publication 日期为 2001 年 1 月。CLR 是作为给定的,该文件记录了对 MSIL 的补充,尽管当时 .NET 1.0 还没有还没发货。那又过了一年。总而言之,可以公平地得出结论,他们花了将近 4 年的时间才将其整合到具体的运输软件中。

【讨论】:

    【解决方案3】:

    Don Syme,F# 的设计者,部分负责 .NET 泛型。

    【讨论】:

      【解决方案4】:

      如果您对 c# 的历史感兴趣,请查看 channel9this video in particular

      他们已经与 Anders Hejlsberg 就这类事情进行了number of interviewsnumber of interviews

      【讨论】:

        猜你喜欢
        • 2011-04-14
        • 2011-02-06
        • 1970-01-01
        • 2016-11-11
        • 2018-04-25
        • 1970-01-01
        • 1970-01-01
        • 2011-08-16
        • 1970-01-01
        相关资源
        最近更新 更多