【发布时间】:2011-03-15 15:44:00
【问题描述】:
在使用了一些 Haskell 和其他函数式语言之后,我开始欣赏通过笼统地描述问题所带来的设计简单性。虽然模板编程的许多方面可能远非简单,但有些用途很常见,我不认为它们是清晰的障碍(尤其是函数模板)。我发现模板通常可以简化当前设计,同时自动添加一些未来阻力。为什么要将它们的功能委托给库编写者?
另一方面,有些人似乎避免使用像瘟疫这样的模板。十年前我可以理解这一点,当时泛型类型的概念对于大多数编程社区来说都是陌生的。但是现在所有流行的静态类型 OO 语言都支持一种或另一种形式的泛型。增加的熟悉度似乎需要调整保守态度。
最近有人向我表达了这样一种保守的态度:
你永远不应该做任何比必要的更通用的东西——软件开发的基本规则。
老实说,看到这种说法如此不屑一顾,好像它应该是不言而喻的,我真的很惊讶。就我个人而言,我发现它远非不言而喻,除非你另有说明,否则像 Haskell 这样的语言都是通用的。话虽如此,我想我明白这种观点的来源。
在我的脑海里,我确实有类似的规则在喋喋不休。现在它处于最前沿,我意识到我总是从整体架构的角度来解释它。例如,如果您有一个类,您不想在其中加载大量您可能有一天会使用的功能。如果您只需要一个具体版本,请不要费心制作接口(尽管可模拟性可能与此相反)。诸如此类...
然而,我不做的是在微观层面上应用这个原则。如果我有一个没有理由依赖于任何特定类型的小型实用函数,我会制作一个模板。
那你怎么看,所以?你认为什么是过度概括?这条规则是否根据上下文有不同的适用性?你甚至同意这是一条规则吗?
【问题讨论】:
-
你以编码为生吗?由 Haskell 提供支持的 Web 服务器如何为您工作?记住:“聪明并把事情做好”。 joelonsoftware.com/items/2007/06/05.html
-
@James McNellis:谢谢。我不想指责或看起来我只是想挖掘旧的论点。我真的很好奇。
-
这是交易 - 你不再是大学生了。我相信,如果真正需要,您始终可以将特定功能转换为通用功能。现在,你是一个忙碌的成年人,工作时薪 50 美元左右。仅在需要时进行概括不是很有意义吗?时间就是金钱。
-
@Hamish:谢谢你的屈尊。非常感谢。如果你真的对我的回答感兴趣:首先,你需要了解“微妙”和“细微差别”。我的问题如何让你觉得我在说“你想什么时候随意制作模板”?我的问题中真的没有暗示,也许,我会花时间考虑泛化行为的开销吗? (你一做我就改变态度)
-
好问题。我希望你能在一周前问我这个问题,然后我才以我的客户为代价进行我的小型概括盛会。当我不按时交货时,他会很窒息,我对此感到非常难过。哎呀。
标签: c++ templates generic-programming