【发布时间】:2011-10-31 04:41:23
【问题描述】:
我只是听到并看到有人说 scala 是为多线程设计的,尽管它实际上是为通用目的而设计的。
它声称“问题在于,虽然您可以在 Java 中使类成为线程安全的(如果您知道自己在做什么),但 Scala 让这一切变得简单而自然。”
实际上 AKKA 和 Lift 是用 scala 编写的。(实际上是 java 和 scala)
但是 java 也通过 java.util.concurrent 的新包在这方面进行了改进。 那么为什么 AKKA 和 Lift 没有在 JAVA 中诞生呢?
也许你会说 scala 让 java 看起来像 C。:-)
谁能说出更多的见解或更深刻的想法?
我知道可以混合使用 JAVA 和 scala。 Scala 能够无缝调用 Java 代码。那么java有什么,scala也有。
但是不管不同的语法,scala 真正改进了 java 尚未完成的哪些方面?
只有一些设计,如演员/代理或其他? (注意 Actors/Agents 并不能解决多线程中的所有问题。)
或者 scala 编译器和采用一些函数式语言语法真的比在 java 中更重要或更有帮助吗?
我听说 scala 将能够采用 XText。为了能够利用 XText 编写线程逻辑,不确定这是否正确。
Scala 看起来像是多种语言的混合体,使用这种方法可以使其在解决这方面的问题时更具可扩展性?
更新
感谢您从不同角度的出色回答。我觉得他们都很好。不管你站在哪一边。
编辑
下面的主题(一年前的 SO)正在询问类似的事情。 “建设性”的结论非常相似。但是这一次,一些新的观点出来了,可能我问的方式有点不同。仅供参考。
相关:
其实我很感兴趣,有人能以全新的角度回答这个问题,可以启发我的思想,提供一些以前不知道的想法。
但由于没有建设性,它已关闭。 :-)
【问题讨论】:
-
@Mchi 你能用几句话解释一下你的想法吗?
-
实际上,我不喜欢 Scala 的一个方面是使用多线程。我永远不知道到底发生了什么。我错过了语言规范中关于visibility 的一些精确性。例如,规范不保证案例类中的 val 将被编译为 final 字段(通常是这样)......如果你不能做出这个假设,你必须添加样板同步的loooots代码只是为了确定。或者,如果由于某种原因,编译器决定不添加 final 修饰符,您也可以编写一些可能完全被破坏的代码。这种缺乏精确性让我感到厌烦
-
@Bruno 你的话给了我一些提示。如果语言编译器可以更聪明地告诉程序员你的代码不是线程安全的。那么我会非常喜欢它。 :-)
标签: java multithreading scala concurrent-programming