从Jython或Scala调用Java代码时除了执行速度以外的问题

从Jython或Scala调用Java代码时除了执行速度以外的问题,java,scala,scalability,jython,neo4j,Java,Scala,Scalability,Jython,Neo4j,我在我的项目中使用neo4j作为后端。 对于前端,我不想用java做它,因为我觉得它太受限制了。 我考虑2种选择。 a使用Jython/Django,因为我可以在其中调用java代码。因此,我可以简单地为我的数据库代码提供一个好的API并调用它。 b使用Scala/Lift,如上所述 我现在能想到的唯一缺点是,从一种语言调用另一种语言可能会很慢,这可能是可伸缩性的一个因素。 我想就什么其他问题可以有可能影响我的项目或这个缓慢单独可以影响很多? 如果太多,那么我将不得不转向java,因为neo4j

我在我的项目中使用neo4j作为后端。 对于前端,我不想用java做它,因为我觉得它太受限制了。 我考虑2种选择。 a使用Jython/Django,因为我可以在其中调用java代码。因此,我可以简单地为我的数据库代码提供一个好的API并调用它。 b使用Scala/Lift,如上所述

我现在能想到的唯一缺点是,从一种语言调用另一种语言可能会很慢,这可能是可伸缩性的一个因素。 我想就什么其他问题可以有可能影响我的项目或这个缓慢单独可以影响很多? 如果太多,那么我将不得不转向java,因为neo4j非常适合该项目


注:我不喜欢任何语言。准备好用任何语言,我也不选择Java,不是因为我不喜欢,而是因为成本因素和学习曲线,我不确定。任何关于这方面的建议都很酷。

我的投票将是Scala/Lift,因为它们更适合彼此。我对Jython/Django集成不太熟悉,但Django是用纯Python编写的,因此两者之间的接口可能会有开销。使用Scala/Lift解决方案,您可以将Scala用于前端和中间层,它可以编译成Java字节码,与neo4j数据库层无缝匹配。

我将投票支持Scala/Lift,因为它们更适合彼此。我对Jython/Django集成不太熟悉,但Django是用纯Python编写的,因此两者之间的接口可能会有开销。使用Scala/Lift解决方案,您可以将Scala用于前端和中间层,它可以编译成Java字节码,与neo4j数据库层无缝匹配。

以下是类X上Java和Scala程序调用方法的反编译代码,刚刚实例化:

public void callX();
  Code:
   0:   new #2; //class X
   3:   dup
   4:   invokespecial   #3; //Method X."<init>":()V
   7:   astore_1
   8:   aload_1
   9:   invokevirtual   #4; //Method X.method:()V
   12:  return

}

public void callX();
  Code:
   0:   new #7; //class X
   3:   dup
   4:   invokespecial   #11; //Method X."<init>":()V
   7:   astore_1
   8:   aload_1
   9:   invokevirtual   #14; //Method X.method:()V
   12:  return

我甚至没有说哪个是哪个,因为正如您所看到的,Scala和Java调用Java代码的方式完全没有区别。事实上,Java也可以调用Scala代码,因为它只是从字节码中不知道它是用另一种语言编写的。

下面是Java的反编译代码和类X上的Scala程序调用方法,刚刚实例化:

public void callX();
  Code:
   0:   new #2; //class X
   3:   dup
   4:   invokespecial   #3; //Method X."<init>":()V
   7:   astore_1
   8:   aload_1
   9:   invokevirtual   #4; //Method X.method:()V
   12:  return

}

public void callX();
  Code:
   0:   new #7; //class X
   3:   dup
   4:   invokespecial   #11; //Method X."<init>":()V
   7:   astore_1
   8:   aload_1
   9:   invokevirtual   #14; //Method X.method:()V
   12:  return

我甚至没有说哪个是哪个,因为正如您所看到的,Scala和Java调用Java代码的方式完全没有区别。事实上,Java也可以调用Scala代码,因为它无法从字节码中知道它是用另一种语言编写的。

前端是什么意思?是否涉及任何网络或这是一个以neo4j作为存储的单片应用程序?不,这不是一个单片应用程序。这是一个数据库为neo4j的网站。我必须决定使用gud框架的语言,它可以帮助构建前端和中间件。这种语言与通信和速度无关。您可以专注于您认为最适合前端开发的内容,并与Jason中的Neo4J进行沟通。您认为前端是什么意思?是否涉及任何网络或这是一个以neo4j作为存储的单片应用程序?不,这不是一个单片应用程序。这是一个数据库为neo4j的网站。我必须决定使用gud框架的语言,它可以帮助构建前端和中间件。这种语言与通信和速度无关。你可以专注于你认为最适合前端开发的东西,并与Jason中的Neo4J进行交流。我想,相信是很恰当的:如果两个编译为同一个东西,那么它们之间的区别是什么?scala提供了java无法提供的东西?scala编译为字节码,但是语言语法本身与Java有很大的不同。特别是,Scala支持函数式编程。此外,它还有其他一些不错的编码糖果,比如闭包、特定于域的语言和类型值范围。从程序员的角度来看,用Scala做一些事情是可能的,而用Java做这些事情要困难得多,只需要更少的代码行。@codecool字节码只是一种机器代码。语言被创造来抽象这些概念,从而提供一种能够表达高级概念的语言,这些概念可以被翻译成低级语言。这一点在这里也同样适用——Scala和Java翻译成字节码,但Scala提供了比Java更高层次的抽象。我想,相信是恰当的:如果两者都编译成相同的东西,那么它们之间的区别又是如何的呢?Scala提供了Java无法提供的东西?Scala编译成字节码,但是语言语法本身与Java有很大的不同。特别是,Scala支持函数式编程。此外,它还有其他一些不错的编码糖果,比如闭包、特定于域的语言和类型值范围。从程序员的角度来看,用Scala做一些事情是可能的,而用Java做这些事情要困难得多,只需要更少的代码行。@codecool字节码i
这只是一种机器代码。语言被创造来抽象这些概念,从而提供一种能够表达高级概念的语言,这些概念可以被翻译成低级语言。同样的情况也适用于这里——Scala和Java转换成字节码,但Scala提供了比Java更高级别的抽象。它不适合与neo4j数据库层无缝配合,因为前端通过网络协议与后端通信。因此,前端技术基本上是不相关的。我会用最适合Neo4J的。例如,如果您可以使用Java RMI与Neo4J交谈,您可以无缝地使用Scala/Java/Lift。如果Neo4J支持Json,那么您可以轻松但不无缝地使用任何其他语言/框架。@Angel O'Sphere Neo4J确实提供Json,但我不知道RMI是否提供Json,但现在最好的选择是什么?编辑:Neo4j确实提供了RMI@AngelO'Sphere你所说的前端是什么意思?它将通过网络与后端进行通信,我们不是只将数据库和动态代码放在服务器上吗。抱歉,如果我在这里遗漏了一些明显的东西,但这是我第一次处理这样的项目Neo4j是用Java编写的。他的应用程序是用Java编写的。对我来说似乎天衣无缝。在这里和这里多读一些。@Perception是的,我知道这一点,如果你仔细阅读这个主题,你就会知道我在上面问过他,他是在开发单一应用程序还是在开发分布式应用程序。他回答说:这是一个分布式应用程序,一个与Neo4J连接的web应用程序talkint,因此:它不像看上去那样无缝@codecool:正如您已经检查过的RMI一样,我建议使用RMI,它通常在开发中提供了一个快速而简单的启动。它不适合与neo4j数据库层无缝配合,因为前端通过网络协议与后端进行通信。因此,前端技术基本上是不相关的。我会用最适合Neo4J的。例如,如果您可以使用Java RMI与Neo4J交谈,您可以无缝地使用Scala/Java/Lift。如果Neo4J支持Json,那么您可以轻松但不无缝地使用任何其他语言/框架。@Angel O'Sphere Neo4J确实提供Json,但我不知道RMI是否提供Json,但现在最好的选择是什么?编辑:Neo4j确实提供了RMI@AngelO'Sphere你所说的前端是什么意思?它将通过网络与后端进行通信,我们不是只将数据库和动态代码放在服务器上吗。抱歉,如果我在这里遗漏了一些明显的东西,但这是我第一次处理这样的项目Neo4j是用Java编写的。他的应用程序是用Java编写的。对我来说似乎天衣无缝。在这里和这里多读一些。@Perception是的,我知道这一点,如果你仔细阅读这个主题,你就会知道我在上面问过他,他是在开发单一应用程序还是在开发分布式应用程序。他回答说:这是一个分布式应用程序,一个与Neo4J连接的web应用程序talkint,因此:它不像看上去那样无缝@codecool:正如您已经检查过的RMI一样,我建议使用RMI,它通常在开发中提供了一个快速而简单的启动。