通用困境(2009)

2021-03-21 20:07:01

Rivorus(2009年12月12日1:04 PM)[Multipart Post继续]最后,存在过载的问题。常见问题解答有一个非常薄弱的​​理由,谈到它使语言更简单的事实,它可以是"令人困惑。"某些事情可能很难理解,但这并不意味着他们逃离了解。对于许多程序员来说,重载已经是第二种性质。不仅如此,这对于通用编程来说是非常重要的,并将其遗漏意味着无法创建有效和通用的库。在静态类型的语言中,基于数据类型的超载调度,并在理想的世界中,在他们模型的概念上。在静态类型的语言中设计精心设计的通用程序,您拥有围绕较小且较小的算法构建的高级通用算法,每个算法都在概念的型号上运行。如果有更精细的概念或特定类型,可以具有给定算法的更有效实现,那么该算法对于该类型或概念而过载。在C ++中,由于所有重载都纯粹基于类型/概念数据,因此在编译时派遣了哪些功能,并且您将获得零开销。这种类型的重载是如此必要的原因是通用编程以及为什么简单地命名功能不同地不同地' t削减它是因为算法的层次性质。一个调用B调用c调用d和e等。每个具有通用实现,可以在任何概念模拟特定概念的任何容器或具有接受线性时间的元素的任何容器或范围内工作的通用实现。现在想象该算法" C"可以以更有效的方式编写在传递允许在恒定的时间而不是线性时间中访问任意元素的范围。如果您可以根据此类型的信息重载C,那么您实际上可以使其使算法A和B在传递到任何元素的恒定时间访问范围内时,算法A和B也会自动更有效。如果没有这种能够超载基于类型系统,您无法获得可编译和高效的通用代码。参考上面的例子,制作不同的命名和#34; C"对于特殊的案例优化的情况而不是过载意味着必须使一个不同的命名和#34; A"和#34; B"以及如果您希望它们利用您的优化代码。这意味着如果需要有效而不是自由获取它,并且使用算法的任何人现在必须知道如果希望更优化的实现,则必须知道更多的算法。如果他们的代码已经写入,那可能意味着他们必须重写它,如果他们需要更快地重写它,因为在链条下的一些任意位置更改了实现细节。它'对于每个人来说都是坏消息。由于类型系统,重载和Sfinae,所有这一切都是可能的。虽然Go的概念 - 类似的设施很好,但没有过载和相关类型它'只有在那里的中途。那些只是我个人的一些问题,就像它一样。很多可以改变,常见问题解答让它听起来像是对这种变化的可能性很开放。你已经抓住了大胆的步伐,以你所说的话"界面" (再次只剥夺了"概念"在通用编程中的概念和#34),远离传统的宗教OOP显示很多。我有信心你们努力提供一种坚实的语言 - 一个比较效率的C ++和写通用代码的能力。如果实际上是您的目标,我认为您需要肯定会注意C ++所做的就业以及如何改变或改进,以提供更好的东西。现在看来你没有学习C ++及其通用图书馆所教授的课程。