【问题标题】:A platform for Java, Scala, Groovy and jRuby would be implemented in what language?Java、Scala、Groovy 和 jRuby 的平台将用什么语言实现?
【发布时间】:2013-09-02 09:36:38
【问题描述】:

作为一个实验,我正在为 Java 应用程序(客户端服务器、P2P 等)开发一个小型平台,我希望能够在 Java 和 Scala 中使用它。也可能来自 Groovy、jRuby 等。

我知道 Scala 可以轻松地调用 Java,但 Java 不能轻松地回调 Scala。我不知道这在 jRuby 和 Groovy 中是如何工作的。

我最初的想法是用 Java 实现这个平台,然后看看我是否可以将它提供给其他语言。但是,平台可能包括启动线程,这些线程调用实现某些 Java 接口的组件。是否有可能通过例如一个在 Scala 中实现的工厂,但它实现了一个 Java 接口到一个 Java 组件,并让该 Java 组件调用 Scala 工厂?

对于实施这样一个跨语言平台,您一般有什么建议?

【问题讨论】:

  • 你描述的方式(java core + per-language api)就是vert.x的方式
  • 也许你可以让你的应用程序语言中立,作为一个工作的 HTTP(或其他通用协议)服务器。然后任何可以想象的东西都可以使用它,例如使用 JSON,这样对象在那时是相当普遍的。
  • 它将有一个 HTTP / TCP 接口。但是您需要在平台内运行组件——例如 servlet 或 PHP 页面。类似的东西。

标签: java scala grails groovy jruby


【解决方案1】:

我绝不是专家,也从未做过这样的跨语言项目(只是较小的 Java/Scala)。

但我建议用语言实现它:

  • 你最清楚
  • 让您的工作效率最高
  • 确保最大的可维护性

在我的例子中是 Scala。

所以我要做的是以 Java 接口 的形式定义 API,然后我将在 Scala 中实现它(可能我需要来回转换 Scala/Java 集合,但那将是一个实现细节)。

这样您可以确保其他 JVM 语言可以与您的 API 交互,并且您可以使用您最擅长的任何语言来实现它。

【讨论】:

  • 那么,用 Java 编写平台代码是有意义的,然后再看看如何使它可以从其他语言中使用,对吧?
  • 这样的项目的例子——Akka和Storm——是的,两者都是作为java-first项目完成的(所以scala和clojure 代码实现 java 接口)。
  • 如果您愿意,当然可以完全用 Java 编写平台代码。但正如我所说,我认为这不是必要的要求。如果你向外界展示一个与 Java 兼容的 API 就足够了。我会用我将要实现的任何语言来实现 Java 接口。我认为 Play 框架也在 Scala 中实现,但提供了 Java API。
  • 此外,对不同 JVM 语言中的 API 使用进行测试覆盖可能是个好主意;但这可能有点矫枉过正。
【解决方案2】:

反过来,Java 也可以像调用 Scala 一样简单, 使用 Eclipse,您需要从“日食市场”安装“Scala IDE” 并在 Properties->'Scala Compiler'->'Build Manager'->compileorder 中将编译器配置为'Scala Then Java'选项。

附:您还需要将 Scala 特性添加到项目中。

【讨论】:

  • 那么,用 Java 编写平台代码是有意义的,然后再看看如何使它可以从其他语言中使用,对吧?
  • 是的!这更有意义。 Java 可以合并到所有其他语言中,例如 jPython、Scala、Groovy 等,因为它们都承认 Java 包的价值。
【解决方案3】:

Would it be possible to pass e.g. a factory implemented in Scala, but which implements a Java interface, to a Java component and have that Java component call the Scala factory?

即使是这样,切换到 Scala 也不能解决问题,因为 jRuby 访问该组件会遇到更多问题。

实际上,所有列出的语言都声明了与 Java 的互操作性,而不是与其他语言的互操作性。因此,第一个设计目标是,您的平台应该在其所有 API 中都与 Java 兼容,尽管某些组件可以用其他语言编写 - 但是 API 用户无法看到它。实现它的最简单方法是全部用 Java 编写。此外,我推荐 Java 是因为“更高级”语言的特性有其反面 - 一条看似无辜的代码行可能会消耗大量 CPU 时间或内存。

【讨论】:

  • 所以她/他应该写C,因为一行看似无辜的代码会消耗大量的CPU时间或内存? (并使其与瘦 Java 包装器一起使用?)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
  • 2014-02-12
  • 1970-01-01
  • 2019-07-07
  • 1970-01-01
  • 2012-07-03
  • 2016-03-15
相关资源
最近更新 更多