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