与静态类型语言相比,动态类型语言的优点和局限是什么?
另请参阅:对动态语言的热爱(更具争议性的话题......)
似乎每个人最近都在跳跃着充满活力,没有编辑的潮流.我大多只使用编译的静态类型语言(C,Java,.Net).我对动态语言的体验是ASP(Vb Script),JavaScript和PHP.在考虑动态语言时,使用这些技术在我的嘴里留下了不好的味道.通常会被编译器捕获的事情(例如拼写错误的变量名称以及将错误类型的值分配给变量)直到运行时才会发生.即便如此,您可能也不会注意到错误,因为它只是创建一个新变量,并分配一些默认值.我也从未见过intellisense在动态语言中运行良好,因为变量没有任何明确的类型.
我想知道的是,人们对动态语言有何吸引力?动态语言允许您执行的操作无法完成或在编译语言中难以完成的主要优点是什么.在我看来,我们很久以前就决定,像未编译的asp页面抛出运行时异常这样的事情是个坏主意.为什么这类代码会重新出现?为什么至少在我看来,Ruby on Rails看起来并不像10年前你用ASP做过的任何东西?
那些真正懂得如何利用动态编程语言的人如何以不同于使用静态语言工作的人来编程?
我对静态与动态类型的整个争论很熟悉,但这不是我所得到的.我想讨论在动态语言中实用但在静态语言中不实用的问题解决技术.
我在动态编程语言中编写的大多数代码与用静态编程语言编写的代码差别不大.俗话说,你可以用任何语言写FORTRAN,很多人都这样做.但有些人使用动态编程语言以一种不易转换为C++的方式解决问题.他们的一些技术是什么?
讨论如何使用动态编程语言的一些好资源是什么?不是关于语言语法或API参考的书籍,而是关于利用动态语言功能的问题解决方法的资源.
编辑(2009年1月5日):我很欣赏下面的答案,但它们似乎并没有说明动态语言倡导者说他们所经历的生产力的巨大提升.