Haxe编译代码的性能

12

Haxe编译后的代码在性能上与不同目标有何比较?

例如,从Haxe转换而来的PHP代码是比原始PHP代码更快还是更慢?

JavaScript呢?Flash呢?C++呢?等等。

是否有任何严肃的基准测试呢?

2个回答

16

我不知道有什么基准可以比较,而且目标平台肯定也不同,所以我猜这只是一半的答案。但是以下是一些通用观点:

  • 如果搜索,你可以找到几个比较OpenFL/NME和Flash的基准测试。一个例子是这个

  • 对于CPP,我被告知比常规C++稍慢。我想手动优化的C++可能会更快。 HXCPP创建者的一个基准测试示例在这里

  • 对于JS,我知道Haxe坚持相对最佳性能实践。例如,Haxe的严格类型本质倾向于使用Javascript JIT编译器获得最佳性能,因此Haxe代码与编写良好的Javascript非常相似(注意,我在这里谈论的是常规JS,而不是画布/ OpenFL图形内容-显然需要自己的基准测试)。

  • 对于PHP,我不确定Haxe生成的PHP如何与手写的PHP相比。我可以告诉你的是,你几乎可以无缝地从PHP切换到Neko(两者都很容易在apache上运行),并且你将得到比手写PHP快得多的代码。您的瓶颈将来自于DB访问等,而不是代码执行。

  • 对于Flash,请搜索并可能会找到基准测试。 Haxe为您提供了一些编译时特性,例如泛型、类型安全和函数内联,这些可以帮助运行时的性能。

总体

Haxe最大的性能提升不是与同一语言中的手写代码进行比较,而是能够轻松切换到更快的平台。使用PHP编写,切换到Neko->大幅度提速。使用Flash编写,切换到OpenFL(C++)->大幅度提速。

希望其他人可以发布更相关的基准测试链接 :)


1
不错的回答。然而,我进行了测试,并发现Haxe相对于同样良好编写的AS3代码确实能够获得更快的SWF性能,这主要归功于编译时优化。PHP程序员告诉我由于严格类型检查而获得了一些速度提升,但您是100%正确的——瓶颈很少是由于PHP引起的,而是由于数据库处理引起的。 - Creative Magic
谢谢你的回答。如果没有人提供更具体的数据,我会把正确的答案给你。你说的“用PHP编写,切换到neko”是什么意思? - Pier
1
@Pier 不用担心,我也希望看到具体的数据。我的意思是PHP和Haxe中的Neko有非常相似的API。我使用的框架(ufront)编译成PHP和Neko,Haxe DB Records、web dispatchersys package也是如此。neko.Webphp.Web类几乎完全相同。除非你需要现有的PHP库或功能,否则部署到Neko几乎总是更快的,并且你可以随时切换。 - Jason O'Neil
@CreativeMagic 这实际上完全不正确。首先,在Flash(AVM2)中,字符串比较的运行时间为O(1),因此您的变量名有多长并不重要。其次,在函数内部,变量根本没有名称,它们被分配整数索引(您的SWF / SWC文件不包含变量名称)。然而,Adobe Flash编译器可能会在完全不同的级别上搞砸事情。最后,Haxe优化也在不同的级别上工作。除了内联之外,Haxe编译器并没有真正进行太多的优化工作,收益来自于正确的类型,而不是其他任何东西。 - stroncium
1
嘿@JasonO'Neil,我刚刚重新查看了这个答案,并发现“两者都可以轻松运行在Apache上”。你知道如何在Apache上轻松安装mod_neko吗?因为无论我去哪里找,这似乎都不是一件简单的事情。 - Pier
显示剩余3条评论

2

2
不要犹豫,如果需要更多细节,请随时询问。我是那篇论文的作者 ☺️ - staticx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接