真正知道如何利用动态编程语言的人与使用静态语言的人相比,如何以不同的方式进行编程?
我熟悉关于静态类型与动态类型的整个争论,但这不是我要表达的内容。我想讨论在动态语言中实用但在静态语言中不实用的问题解决技术。
我见过的大多数用动态编程语言编写的代码与用静态编程语言编写的代码没有太大区别。俗话说,你可以用任何语言编写 FORTRAN,而且很多人都这样做。但有些人使用动态编程语言来解决问题,而这种方式不容易转化为 C++ 等语言。他们的技术有哪些?
有哪些讨论如何使用动态编程语言的好资源?不是有关语言语法或 API 参考的书籍,而是有关利用动态语言功能解决问题的方法的资源。
编辑(2009 年 1 月 5 日):我很欣赏下面的答案,但它们似乎没有解释动态语言倡导者所说的生产力的巨大提高。
我喜欢苗条的回答。我确实花费了大量时间在 Java 和 C++ 上制作自定义数据结构,而这些数据结构在 Python/Ruby 中是免费的。并设计专门的函数来处理这些自定义数据结构。是的,在C++中,STL确实很好。是的,Java 中的泛型很好。它们有助于更快地创建自定义数据结构,但是它们仍然需要大量的思考和考虑。
然而,动态语言更容易使用还有一个更根本的原因。这是一个深刻的想法,称为鸭子类型。上面的一些评论涉及鸭子类型,但请花点时间思考一下什么是鸭子类型。这是一种根本不同的看待世界的方式。与 Java 和 C++ 等语言不兼容的视图。
鸭子类型意味着您不必浪费时间来定义鸭子是什么。由于不必正式定义对象,因此可以节省大量时间和精力。获得正确的定义是很困难的。看看我的这篇博文,我在其中给出了示例:正式定义没有你想象的那么有用 http://www.daniel-lemire.com/blog/archives/2007/12/05/formal-definitions-are-less-useful-than-you-think/
事实证明,鸭子打字非常有用。这XML 中的“必须忽略”原则 http://www.tbray.org/ongoing/When/200x/2006/01/09/On-XML-Language-Design正是 XML 在 Web 上如此重要和有用的原因。但这只是鸭子打字的一个例子。
表达鸭子类型的另一种方式是通过网络口头禅“严格发送,慷慨接受”。这也是一个非常基本的想法。
最后,您可能想回到我的一篇长篇博客文章,其中我解释了鸭子类型以及它与人工智能和建模等事物的关系:鸭子打字、人工智能和哲学 http://www.daniel-lemire.com/blog/archives/2007/01/27/duck-typing-artificial-intelligence-and-philosophy/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)