在讨论计算机语言的演变时,Alan Kay说他的Smalltalk的一个最重要的属性是后期绑定;它赋予了语言的可扩展性和可扩展性,并允许随着时间的推移重构不适当的耦合。你同意吗?早期绑定是否有补偿优势,可以解释为什么它似乎是领域的两个范例中的主导,其中任何一个都可以使用?
我的个人经验(不够广泛或深入到权威),基于使用javascript、jQuery、jsext、actionscript、php、java、RoR和asp.net实现web应用程序,似乎表明延迟绑定和减少臃肿之间存在正相关关系。我确信早期绑定有助于检测和防止某些类型安全错误,但自动完成和良好的IDE以及良好的编程实践也是如此。因此,在我的风险规避方面恢复我的理性观点之前,我倾向于让自己支持后期绑定方面。
但我真的不太清楚如何平衡两者之间的权衡。
发布于 2008-12-15 04:02:49
传统上,早期绑定的最大优势是性能:后期绑定语言必须在运行时携带有关其所有数据的类型信息,并且失去了在编译时进行某些优化的机会。然而,随着计算机变得更快,以及虚拟机在动态优化方面变得更加智能,这种差异已经变得不那么重要了。
发布于 2009-01-19 20:13:13
根据我对高性能软件(例如游戏、数字运算)和性能中立软件(网站,几乎所有其他软件)的经验,后期绑定有一个巨大的优势:您提到的可扩展性/可维护性/可扩展性。
早期绑定有两个主要好处。第一个:
这是普遍接受的,但通常是不相关的,因为在大多数情况下,投入硬件解决问题是可行的,这是更便宜的。当然,也有例外(例如,如果你不拥有你正在运行的硬件)。
早期绑定的第二个好处:
似乎被低估了。在开发人员使用其他人的组件的大型项目中,IDE可以读取早期绑定,并使用它们来通知开发人员(通过自动完成、文档等)。这在后期绑定中就不太实用了,因为绑定是在运行时创建的。如果IDE可以从代码中推断出结构定义,那么使用后绑定语言仍然是可能的,但是因为结构总是可以在运行时更改,所以它不是很可靠。
开发的简易性是个大问题。它最大限度地减少了昂贵的程序员时间--并且开发团队越大,它就变得越重要。您需要在这一点与使用后期绑定语言获得的灵活性之间取得平衡。
发布于 2013-10-15 07:14:05
延迟绑定允许正在运行的系统进行自我扩展。例如,系统启动时了解了Wolves。随着时间的推移,Wolf(?)中的evolveDomesticate()方法旋转一个名为Dog的新类并实例化它,我们现在就有了Dog。Smalltalk将保存整个系统映像,因此如果您关闭它并重新启动,Dog在重新启动后仍将存在。一旦你进化到运行在特定硬件上并连接在网格网络中的对象,整个生态系统就不会真正关闭(直到Sun爆炸)。我想这就是Alan Kay所说的后期绑定的优势,成为神。
https://stackoverflow.com/questions/367411
复制相似问题