【问题标题】:Dynamic languages - which one should I choose?动态语言——我应该选择哪一种?
【发布时间】:2010-11-05 10:43:16
【问题描述】:

动态语言正在兴起,其中有很多:例如Ruby、Groovy、Jython、Scala(静态,但具有动态语言的外观和感觉)等。 我的背景是 Java SE 和 EE 编程,我想将我的知识扩展到其中一种动态语言,以便更好地为未来做好准备。

但是我应该专注于学习哪种动态语言,为什么?在不久的将来,哪种语言会成为首选语言?

【问题讨论】:

  • 动态或动态类型或两者兼而有之?我建议阅读相关部分中这个问题附近显示的大多数问题/答案,这些问题/答案还可以深入了解为什么人们会选择一种或其他语言,并且它们包含进一步的指示等等。..
  • Scala 实际上并不是动态的:它是一种强大的静态类型语言,具有类型推断功能。

标签: ruby scala groovy jython dynamic-languages


【解决方案1】:

学习 Ruby 或 Python(以及较小程度的 Scala)意味着您将拥有非常可转移的技能 - 您可以使用 Java 版本、本机版本或 .NET 版本(IronRuby/IronPython)。 Groovy 很好,但特定于 JVM。

除非您设想特定的场景,否则“为未来做好更好的准备”是很棘手的。你想从事什么样的工作?你有一个可以用动态语言有用地实现的项目吗?是否足够小,可以试穿几个,感受一下它们的不同之处?

【讨论】:

    【解决方案2】:

    Scala 根本不是动态语言。类型推断并不意味着它是无类型的。然而,它是一种非常好的语言,它很好地混合了 OOP 和函数式编程。唯一的问题是您在此过程中遇到的一些问题。

    由于您已经是一位经验丰富的 Java 程序员,因此它将非常适合您的技能。现在,如果你想一直走动态,Ruby 或 Python 都是很棒的语言。两种语言都有需求。

    【讨论】:

    • 虽然它有 REPL 控制台——从某种角度来看它是“动态的”——和隐式转换;所以它“看起来”是动态的
    【解决方案3】:

    我个人会推荐 Clojure。 Clojure 是一种很棒的新语言,它的流行速度比我见过的任何语言都要快。 Clojure 是一个在 JVM 上实现的强大、简单、快速的 Lisp。它当然可以访问所有 J​​ava 库,就像 Scala 一样。它已经有一本关于它的书,它已经成熟到 1.0 版,并且它有三个正在开发中的 IDE 插件,所有三个都非常有用。

    【讨论】:

    • 它的java访问不需要任何包装或混乱的转换。
    • 以上所有可能都是正确的,但实际上我认为 Clojure 在采用/流行度方面远远落后于 Ruby、Python 甚至 Groovy。
    • @Don,它以惊人的速度越来越受欢迎。现在不要看,但你可能错了。
    【解决方案4】:

    我会看看 Scala。为什么?

    1. 它是一种 JVM 语言,因此您可以利用您当前的 Java 技能
    2. 它现在有很多工具/IDE 支持(例如 Intellij 将处理 Scala 项目)
    3. 它具有功能方面。函数式语言目前似乎受到了很大的关注,我认为这是一个值得为未来学习的范式

    我的(完全主观的)观点是,Scala 似乎得到了 Groovy 在一两年前获得的大量关注。我不想在这里引起争议,或者建议让它成为一种更好的语言,但它似乎是新的 JVM 语言de jour。

    顺便说一句,具有some dynamic attributes 的语言是Microsoft 的F#。我目前正在研究这个(并且忽略了我自己的建议,即上面的第 1 点和第 2 点!)。它是一种基于 .Net 构建的带有对象的函数式语言,目前引起了很多关注。

    【讨论】:

    • F# 确实很有趣,但它不是一种动态语言。
    • 这就是我把它作为旁白提出来的原因。有趣的是research.microsoft.com/en-us/um/cambridge/projects/fsharp/… 是有冲突的。不管是不是动态的。我在 F# 方面的经验不足,无法以一种或另一种方式进行调用。
    • 我已经修改了side更明显的'aside',然而
    【解决方案5】:

    在游戏行业 Lua,如果你是基于 Adob​​e 的设计师 Lua 也不错,如果你是嵌入式程序员 Lua 实际上是唯一的轻量级解决方案,但如果你正在研究 Web 开发和通用工具编写 Python 脚本会更实用

    【讨论】:

    • Lua 的主要优势在于使用 C(和/或 C++)嵌入/扩展它。我不会向最熟悉 Java 和 JVM 的人推荐 Lua。
    • 是的,这是一个很好的观点,但未来证明自己是关于多样性,所以它可能仍然是一个不错的选择,因为它比基于 Java 的语言更能拓宽他的技能
    【解决方案6】:

    我发现 Groovy 是从广泛的 Java 背景中相对容易地跳出来的——它是一种更方便的 Java 版本。如果您需要做这种事情,它也可以很好地与现有的 Java 代码集成。

    【讨论】:

      【解决方案7】:

      我推荐 Python。它有一个庞大的社区并且有一个成熟的实现(以及几个有前途的还不太成熟的)。就我所见,与较新的语言相比,Perl 失去了很多吸引力,大概是因为它的“不直观”(不,不要让我开始这样做)。

      当您在 Python 中完成一两个项目后,继续做其他事情以获得更广阔的视野。如果您已经用两种不同的动态语言完成了一些重要的事情,那么您在同化任何其他语言时都不会遇到任何问题。

      【讨论】:

      • 我认为许多 Perler 正在转向 Ruby,因为它是一种 Perl++
      • 另一方面,学习另一种语言,就像你已经知道的东西比学习完全不同的东西更有价值。
      【解决方案8】:

      JScript 非常有用,而且它肯定是一种动态语言...

      【讨论】:

        【解决方案9】:

        如果您想要一种具有大量模块的语言(几乎适用于任何东西!),请选择Perl。有了它的CPAN,您总能找到您想要的东西,而无需重新发明轮子。

        【讨论】:

          【解决方案10】:

          记住你的背景,我会推荐一种语义与你所知道的相似的语言。因此,像 Scala、Fan、Groovy 这样的语言将是一个很好的起点。一旦你掌握了使用函数式语言的基本语义(并且开始喜欢它),你就可以转向像 Ruby 这样的语言。通过这种方式,您的周转时间会减少,并且您可以朝着成为一名多语种程序员的方向前进。

          【讨论】:

          • 您会推荐 Scala、Fan 还是 Groovy 中的哪一个?为什么?
          • 好吧,如果你想体验动态语言的强大和简单,我会推荐 groovy。如果您来自 java 背景,则非常容易获得。安静地有很多好书和文档可供使用,这显然是一个很大的优势。
          【解决方案11】:

          我会为 Groovy(和 Grails)投票 +1。您仍然可以使用 Java 样式或 Groovy 进行输入(您也可以将两者混合使用,无需担心)。您也可以使用 Java 库。

          【讨论】:

            【解决方案12】:

            作为一般规则,应避免使用动态类型语言。编译时检查的损失和强大的静态类型的自文档性质非常值得将类型信息放入源代码中。如果您在编写代码时需要做的额外输入太费力了,那么具有类型推断的语言(Scala、Haskell)可能会很有趣。

            拥有类型信息会使代码更具可读性,而可读性应该是您在编码时的第一标准。一个人阅读代码的成本很高,任何阻碍读者清晰、准确理解的东西都是一件坏事。在 OO 语言中情况更糟,因为您总是在创建新类型。刚刚熟悉的读者会因为不知道正在传递和修改的类型而感到困惑。例如,在 Groovy 中,以下是合法的 def accountHistoryReport(in, out) 读到,我不知道 in 和 out 是什么。当您查看 20 种不同的报告方法时,您可以快速完全了解homicidal.

            如果你真的认为你必须有非静态类型,那么像 Clojure 这样的语言是一个很好的折衷方案。类似 Lisp 的语言建立在一小部分关键抽象和每个抽象上的大量功能之上。所以在 Clojure 中,我将创建一个具有对象属性的映射(散列)。这有点简化,但我不必查看整个代码库来实现某些未命名的类。

            我的经验法则是我用动态语言编写脚本,用编译的静态类型语言编写系统。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2015-08-30
              • 2012-01-25
              • 1970-01-01
              • 2010-10-08
              • 2016-03-17
              • 1970-01-01
              • 2011-06-14
              相关资源
              最近更新 更多