【问题标题】:Under what circumstances are dynamic languages not appropriate? [closed]什么情况下不适合动态语言? [关闭]
【发布时间】:2008-09-26 21:54:56
【问题描述】:

哪些因素表明项目的解决方案不应使用动态语言进行编码?

【问题讨论】:

    标签: dynamic-languages


    【解决方案1】:

    程序员熟悉并愿意使用该语言。

    你的动态语言可能是我的静态语言。

    【讨论】:

      【解决方案2】:

      系统级开发是一组关键的软件,通常不应使用动态语言。 (驱动程序、内核级别的东西等)。

      基本上,任何需要具有每一盎司性能或低级硬件访问权限的东西都应该使用低级语言。

      另一个指标是它是否是高度数字运算,例如科学数据数字运算。也就是说,如果它需要快速运行并进行数字运算。

      我认为一个常见的主题是处理器密集型问题......在这种情况下,您会很容易看到性能差异,并且您会发现动态语言无法让您有效地使用硬件。

      也就是说,如果您正在执行处理器密集型工作并且您不介意性能受到影响,那么您仍然可以使用动态语言。


      更新:

      请注意,对于数字运算,我的意思是在科学领域中运行数小时或数天的真正长时间运行的数字运算......在这种情况下,2 倍的性能提升是巨大的......如果它在更小规模,那么动态语言仍然可以使用。

      【讨论】:

      • 好吧,数字运算和动态语言不是正交的,只要有正确的库。想想 Python 和 Numpy,或者 Star*P 等。
      【解决方案3】:

      在很大程度上,编程语言是一种风格选择。使用您想使用的语言,您将获得最大的生产力和快乐。如果由于某种原因这是不可能的,那么希望您的最终决定将基于一些有意义的东西,例如您必须运行的平台或真实的经验性能数据,而不是其他人的任意风格选择。

      【讨论】:

        【解决方案4】:

        显卡设备驱动

        【讨论】:

        • 虽然......即使有适当的库也是可能的。看看 numpy。
        【解决方案5】:

        速度通常是主要答案。尽管这些天来这已不再是一个问题。

        【讨论】:

        • 速度很大程度上取决于实现的质量,与语言是动态类型还是静态类型几乎没有关系。好的 Common Lisp 编译器当然可以与 C 竞争,差的 C 编译器可能比 CPython 慢得多。
        【解决方案6】:

        当速度至关重要时。动态语言的速度越来越快,但仍无法达到编译语言的性能。

        【讨论】:

          【解决方案7】:

          使用动态语言绝对可以实现互操作。 (还记得经典的 Visual Basic,它有“延迟绑定”吗?)它需要编译 COM 组件并添加一些额外内容,以帮助调用者按名称调用。

          我不认为数字运算必须是静态编译的,通常是你如何解决的问题。 Matlab 是一个很好的数字运算示例,它具有非编译语言。然而,Matlab 有一个非常具体的数字和矩阵运行时。

          【讨论】:

            【解决方案8】:

            我认为您应该始终尽可能选择静态类型语言。我并不是说 C# 或 Java 具有良好的静态系统,但 C# 正在接近。好的type inference 是关键,因为它会给您带来动态语言中的好处,同时仍然为您提供静态类型语言的安全性和功能。问题解决了 - 没有更多的火焰战争。

            【讨论】:

            • 这是非常主观的......即使类型推断也不能总是做一个非常动态的语言可以做的事情,至少在没有对类型系统进行很多大的改变的情况下......跨度>
            • (顺便说一句,haskell 是一种有趣的语言,具有强大的类型推断功能,但我仍然更喜欢更灵活、动态、面向对象的语言,例如 Ruby)
            • 当然,动态语言总是更灵活,但要以某些保证为代价。我认为动态语言的灵活性被高估了。 Ruby 确实是一门很棒的语言,但它的大部分创新功能现在即使在 C# 3.0 中也可以实现,而不会在编译期间丢失静态检查
            【解决方案9】:

            嵌入式系统的系统级代码。一个可能的问题是动态语言有时会隐藏一个简单的语句的性能影响。

            就像说这个 Perl 语句:

            @contents = <FILE>;
            

            如果 FILE 是几兆字节,那么这是一个消耗资源的语句 - 您可能会耗尽堆,或者导致看门狗超时,或者通常会减慢嵌入式系统的响应。

            如果您想“编程更接近金属”,您可能希望使用静态类型和“中级”语言。

            【讨论】:

              【解决方案10】:

              互操作怎么样?是否可以从 Ruby 或 Python 调用 COM 组件?

              【讨论】:

              • 几乎没有痛苦。 Ruby 和据我所知 Python 都有用于此目的的 Win32Ole 模块。 .Net 互操作也是可能的,但我认为它与 IronRuby/IronPython 实现更有效。
              • 动态语言通常在“胶水语言”标签下提供,因此工作描述中包含互操作性:)
              猜你喜欢
              • 2010-10-10
              • 2011-03-01
              • 2013-06-02
              • 2011-04-07
              • 2010-10-21
              • 1970-01-01
              • 2011-01-13
              • 2010-10-16
              • 2010-12-02
              相关资源
              最近更新 更多