为什么 NetLogo 是在 Java 和 Scala 的混合体中实现的?

Why was NetLogo implemented in a mixture of Java and Scala?

为什么 NetLogo 是在 Java 和 Scala 的混合体中实现的?是因为更好地支持并发吗?我不熟悉 Scala,但我认为函数式编程风格更适合表达并发编程的保证。

以下内容基于我从 2001 年到 2014 年担任 NetLogo 首席开发人员的经验。

NetLogo 中的所有 Java 代码都是旧代码,我们根本没有时间将其转换为 Scala。

NetLogo 项目始于 1999 年左右,远早于 Scala 出现。

到 2008 年我们转向 Scala 时,我们已经积累了大量 Java 代码。随着时间的推移,很多 Java 代码已经转换为 Scala,但不是全部。将所有这些完全转换为 Scala 将是一项巨大的努力;不值得。

自 2008 年以来,几乎所有 NetLogo 中的新代码都在 Scala 中。

并发并不是从 Java 切换到 Scala 的主要动机。 (在大部分NetLogo中,只有两个线程,GUI线程和作业线程。只有BehaviorSpace使用了更多的线程,并且它们在任何一种语言中都比较容易保持分离。)

使用 Scala 的主要动机很简单,因为 Scala 是一种比 Java 更强大、更具表现力、更灵活、更优雅的语言,对函数式编程和不变性的支持也更好,这对我们很有帮助编写优雅、正确的代码。

这使得 Scala 的工作更加有趣和令人满意,并且生成的代码更可能是正确的并且更短且更易于维护。使用 Scala 也(根据我们的经验,通常情况下)会吸引聪明人加入开发团队。