在什么情况下不适合使用动态语言?
哪些因素表明不应使用动态语言来编码项目的解决方案?
解决方案
速度通常是主要的答案。尽管这些天来这已不再是一个问题。
当速度至关重要时。动态语言正在变得越来越快,但仍不能接近编译语言的性能。
程序员熟悉并愿意使用该语言。
动态语言可能是我的静态语言。
系统级开发是关键的一组软件,通常不应该使用动态语言。 (驱动程序,内核级内容等)。
基本上,任何需要获得性能或者低级别硬件访问权限的事物,都应该使用低级语言。
另一个指标是高度数字运算,例如科学数据数字运算。也就是说,如果它需要快速运行并进行数字运算。
我认为一个常见的主题是处理器密集型问题……在这种情况下,我们将很容易看到性能差异,并且我们会发现动态语言无法赋予我们有效使用硬件的能力。
就是说,如果我们要进行大量的处理器工作,并且不介意性能下降,那么我们仍然有可能使用动态语言。
更新:
请注意,对于数字运算而言,我的意思是在科学领域中,长时间运行数字运算的过程持续了数小时或者数天……在这种情况下,性能提升了2倍之多。动态语言仍然可以使用。
互操作怎么样?是否可以从Ruby或者Python调用COM组件?
使用动态语言绝对可以进行互操作。 (还记得经典的Visual Basic,它具有"延迟绑定"吗?)尽管需要帮助COM调用者按名称进行调用,但它还需要对COM组件进行一些额外的编译。
我认为数字处理不是必须静态编译的,通常情况下,这取决于我们如何解决。 Matlab是处理数字的一个很好的例子,它具有非编译语言。但是,Matlab对于数字和矩阵具有非常特定的运行时。
我相信我们应该尽可能选择静态类型的语言。我并不是说Cor Java具有良好的静态系统,但是Cis越来越近了。好的类型推断是关键,因为它可以为我们带来在动态语言中看到的好处,同时仍可以为我们提供安全性和静态类型的功能。问题不再解决。
嵌入式系统的系统级代码。一个可能的问题是动态语言有时会隐藏一条简单易懂的语句对性能的影响。
像这样说一下Perl语句:
@contents = <FILE>;
如果FILE为几兆字节,则这是一条资源消耗大的语句,我们可能会耗尽堆空间,或者导致看门狗超时,或者通常会降低嵌入式系统的响应速度。
如果要"更接近金属编程",则可能要使用静态类型的"中间层"语言。
显卡设备驱动程序
在很大程度上,编程语言是一种样式选择。使用我们想要使用的语言,我们将获得最大的收获和快乐。如果由于某种原因而无法实现,那么希望最终决定将基于有意义的事情,例如我们必须对照真实的或者经验的性能指标运行的平台,而不是其他人的任意样式选择。