我在考虑使用Haxe进行跨语言开发,但不确定它是否适合这项任务。我将编写一个通用库,应该能够在目标语言中使用,并且可以进行文档化(类似于Doxygen)。换句话说,我想在Haxe中编写一个通用库,输出C++代码(一旦完成还要输出Java代码),并使其可供其他程序员访问(不仅限于C++编译器)。对于这个任务来说,这是最好的选择吗?还是为每种语言编写一个版本的库会更好?
当然可以,但具体取决于所选择的平台,可能会有一些不方便之处。在JavaScript、neko和Flash上,生成的代码非常接近本地代码,人们甚至可以在不知道是Haxe生成的情况下使用它。关于PHP,我不太清楚它的工作原理。但是,有一些命名空间技巧有点尴尬,但我认为这些可以通过手写代码来解决库的包装问题。在C++中,如果你不介意添加一些样板代码以使反射工作正常,它基本上可以正常工作。它处理构造函数的方式不符合标准,而且你应该非常小心,因为它附带了一个垃圾收集器,并且我不知道它如何处理持有它不知道的外部代码引用的情况。关于新的目标-C#和Java将与本地代码互操作。大多数Haxe功能都映射到平台的本机功能,除了委托。但是,如果您不在接口中公开委托,则没有问题。他们还将生成一些样板代码,以便在这些平台上快速启用反射,但如果您知道自己在做什么,也有禁用此功能的方法。
Haxe并非专门用于编写跨语言库,但是可以实现,我看到了一些例子证明它可行:- polygonal,一个数据结构和物理引擎,可在Haxe和AS3中使用。 - verb,一个基于NURBS的CAD库,可在Haxe和JS中使用。 - daff,一个用于比较表格的库,可在JS、Python、Java、C#、C++、Ruby和PHP中使用。然而,对于特定的C++,由于hxcpp生成了大量Haxe特定的内容,包括GC,可能需要进行大量清理或难以使用。您可以在Haxe邮件列表中询问。