fantom 生成的字节码与 java 等效字节码的性能一样吗?
从当今出现的众多 jvm 语言中,有一种似乎特别有吸引力,
请查看
http:// /fantom.org/doc/docIntro/Tour.html
我只是想知道,当忽略动态类型功能时,生成的字节码的性能是否相当于 java...
ps:添加了有关性能的声明
from the many jvm languages appearing nowdays, there's one that seems to be particularly appealing
have a look at
http://fantom.org/doc/docIntro/Tour.html
I just wonder if, when ignoring the dynamic typing feature, the generated bytecode is performant equivalent to java...
ps: added aclaration about performance
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我做了一些快速排序性能测试。
所以我想说,目前 Fantom 的代码运行速度比 Java 的代码慢大约 10 倍。但请注意,我使用了 Java 的 int 和 Fantom 的 Int,它们并不相同。 Java 的 int 是 32 位,Fantom 的 int 是 64 位。经过一番分析后,有迹象表明 Fantom 代码的性能几乎与
爪哇。但是,如果性能绝对至关重要,请远离列表,使用平台特定版本的列表或下拉至本机并用 Java 编写。
编辑:我和布莱恩谈过,他证实了我的怀疑。 Fantom 速度较慢的原因是它的所有
Int
都是 64 位整数,并且所有Int[]
数组都类似于ArrayList
。新的测试显示了差异。 Fantom 仍然较慢的原因可能是它的 Duration、Int 和 List 类比普通的 ArrayList 或 Integer 或 System.currentMillis 有更多的方法/字段。 /代码>。这是一个可能适合你也可能不适合你的权衡。如果您确实需要高性能,只需创建一个本机方法并用 Java/C#/Javascript 对其进行编程。这样您将获得与 Java 相当的性能。如果您想自己测试一下,这里有一些源代码:
Fantom 源代码:
所有 Int 都被 long 和 ArrayList 替换的 java。原始 Java 实现可以在 http:// strongtypedblog.blogspot.com/2009/07/java-vs-scala-vs-groovy-performance.html。
I did some quicksort performance testing.
So I'd say that at the moment Fantom's code runs about 10x slower than Java's code. However do note that I used Java's int and Fantom's Int which aren't the same. Java's int are 32-bit and Fantom's are 64-bit.After profiling things a bit there are indications that Fantom code is almost performant as
Java. However if performance is absolutely critical, stay away from Lists, use platform specific versions of lists or drop down to native and write in Java.
EDIT: I had a talk with brian and he confirmed my suspicions. The reason Fantom is slower is because all it's
Int
are 64-bit integer and allInt[]
arrays are similar toArrayList<Long>
. The new test show the difference. The reason Fantom is still slower is probably that its Duration, Int and List classes have a lot more methods/fields than plainArrayList
orInteger
orSystem.currentMillis
. It's a tradeoff that may or may not suit you. If you really need high performance just make a native method and program it in Java/C#/Javascript. That way you'll get Java equivalent performance.Here are sources if you want to test it yourself:
Fantom source:
And java with all the Ints replaced by longs and ArrayList. Original Java implementation can be found at http://stronglytypedblog.blogspot.com/2009/07/java-vs-scala-vs-groovy-performance.html.
我没有使用 fantom 的经验,但看起来 fantom 解释器可以使用 java、.net 或 JS 库,但这并不是 fantom 编译的字节码< /em> 可以通过 java、.net 或 javascript 直接读取。
话虽如此……我稍后会检查一下,看起来很有趣:)
I have no experience with fantom, but it looks like the fantom interpreter can use java, .net or JS libraries, but it's not that the fantom compiled bytecode can be read out of the box by java, .net or javascript.
Having said that... I'll check it later, it looks interesting :)
Fantom 编译为自己的字节码格式,称为“fcode” - 然后在运行时转换为 java 字节码或 IL - 有关更多详细信息,请参阅此页面:
http://fantom.org/doc/docLang/Deployment.html
JavaScript 的工作方式有点不同 - 实际的 JavaScript 源代码是在编译时从 Fantom 源代码生成的代码(以及 Fantom 运行时所需的所有元数据) - 生成可以直接在浏览器中运行的独立 js 文件。
Fantom compiles down to its own byte-code format called "fcode" - which is then translated to java byte code or IL at runtime - see this page for more details:
http://fantom.org/doc/docLang/Deployment.html
JavaScript works a bit different - actual JavaScript source code is produced at compile time from the Fantom source code (along with all the meta-data the Fantom runtime needs) - to produce a standalone js file you can run directly in your browser.