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