【发布时间】:2010-09-29 21:04:13
【问题描述】:
似乎 C# 中的几乎所有特性都是从其他语言中借用的(Java 中的 OOP、ML 家族中的泛型(参数多态性)和 lambda、Haskell 单子中的 LINQ 和动态语言中的动态),但我不知道属性的起源(Java 世界中的注解)。 C# 是第一个引入属性的语言吗?
【问题讨论】:
-
你的意思是类属性????
-
我很确定 OOP 不是从 Java 借来的:p
-
Java OOP 是从 C++ 借来的,C++ 是从 Smalltalk 借来的。我认为 C# 泛型是从 Ada 借来的,尽管我对 C# 或 ML 不够熟悉,无法判断您的版本是否更准确。如果 LINQ 是基于 Haskell monads(而不仅仅是一种特定于域的子语言),我会感到非常惊讶 - 无论哪种方式它都不是特别原始。真正的原创语言可能只用手指就能数出——甚至可能只用一只手。剩下的只是通过细微的调整和混搭进行进化——有点像遗传算法。
-
@Steve314 是的,这些概念有很多根源,但我不知道任何属性的根源,所以这让我认为这是 C# 的创新。
-
@gaearon - 对我来说,这听起来仍然像任何其他抽象层,并且几乎是 SQL 在不同级别的用途。单子只是一个代数。例如。 Python 列表推导——尽管它们是从 Haskell 借用的——不是单子的。底层的一元结构不存在,你不能与例如混合和匹配。类似 Haskell 的“do”表示法或显式绑定运算符。 Python 列表推导可以很容易地直接从数学集合表示法复制,而不需要单子连接。我可以提出类似的论点来反对 LINQ 是一元的吗?
标签: c# programming-languages attributes history