我是有偏见的(作为一个Python专家,但是在Java中相当生疏),但是我认为GAE的Python运行时目前比Java运行时更先进,开发得更好——毕竟前者还有一年的时间来开发和成熟。
未来的发展趋势当然很难预测——Java方面的需求可能会更大(特别是因为它不仅与Java有关,而且其他语言也位于JVM之上,所以这是在应用程序引擎上运行PHP或Ruby代码的方式);然而,Python应用程序引擎团队的优势是拥有Guido van Rossum,Python的发明者和一个非常强大的工程师。
在灵活性方面,正如前面提到的,Java引擎确实提供了运行由不同语言(而不仅仅是Java)生成的JVM字节码的可能性——如果您在一家多语言商店中,这是一个相当大的优势。反之亦然,如果您讨厌Javascript,但必须在用户浏览器中执行一些代码,那么Java的GWT(从Java级别的代码中为您生成Javascript)比Python端的替代方案(实际上,如果您选择Python,您将为此目的自己编写一些JS,如果您不喜欢编写JS,那么选择Java GWT是一个可用的替代方法。
就库而言,这几乎是一次洗礼——JVM受到了足够的限制(没有线程、没有自定义类加载器、没有JNI、没有关系数据库),从而妨碍了现有Java库的简单重用,这与现有Python库同样受到Python运行时的类似限制所阻碍的程度一样多。
在性能方面,我认为这是一次洗礼,尽管您应该根据自己的任务进行基准测试——不要依赖于高度优化的基于JIT的JVM实现的性能,因为应用程序引擎环境非常不同(启动成本将经常支付,当应用程序的实例被启动、停止、移动到不同的主机等时,所有这些对您来说都是一本正经的——这些事件在Python运行时环境中通常比在jvm中便宜得多)。
XPath/XSLT的情况(委婉地说……)在任何一方都不是完全完美的,唉,尽管我认为在JVM中它可能不那么糟糕(显然,在JVM中,Saxon的大量子集可以小心地运行)。我认为有必要在Appengine Issues页面上打开标题中有XPath和XSLT的问题——现在只有要求特定库的问题,而且这是短视的:我并不真正关心如何实现一个好的XPath/XSLT,对于Python和/或Java,只要我开始使用它。(特定的库可以简化现有代码的迁移,但这比以某种方式执行“快速应用XSLT转换”之类的任务更不重要!-). 我知道,如果措辞得当(尤其是在独立于语言的情况下),我会挑起这样一个问题。
最后但并非最不重要的一点是:请记住,您可以使用不同版本的应用程序(使用相同的数据存储),其中一些是用Python运行时实现的,一些是用Java运行时实现的,并且您可以使用显式url访问不同于“默认/活动”的版本。因此,您可以让Python和Java代码(在您的应用程序的不同版本中)使用并修改同一个数据存储,从而赋予您更大的灵活性(尽管只有一个会有“nice”URL,如foobar.appspot.com,这可能只对浏览器上的交互式用户的访问很重要,我想;-)。