Haxe适用于创建库吗?

9
我在考虑使用Haxe进行跨语言开发,但不确定它是否适合这项任务。我将编写一个通用库,应该能够在目标语言中使用,并且可以进行文档化(类似于Doxygen)。换句话说,我想在Haxe中编写一个通用库,输出C++代码(一旦完成还要输出Java代码),并使其可供其他程序员访问(不仅限于C++编译器)。对于这个任务来说,这是最好的选择吗?还是为每种语言编写一个版本的库会更好?
2个回答

7
当然可以,但具体取决于所选择的平台,可能会有一些不方便之处。
在JavaScript、neko和Flash上,生成的代码非常接近本地代码,人们甚至可以在不知道是Haxe生成的情况下使用它。
关于PHP,我不太清楚它的工作原理。但是,有一些命名空间技巧有点尴尬,但我认为这些可以通过手写代码来解决库的包装问题。
在C++中,如果你不介意添加一些样板代码以使反射工作正常,它基本上可以正常工作。它处理构造函数的方式不符合标准,而且你应该非常小心,因为它附带了一个垃圾收集器,并且我不知道它如何处理持有它不知道的外部代码引用的情况。
关于新的目标-C#和Java将与本地代码互操作。大多数Haxe功能都映射到平台的本机功能,除了委托。但是,如果您不在接口中公开委托,则没有问题。他们还将生成一些样板代码,以便在这些平台上快速启用反射,但如果您知道自己在做什么,也有禁用此功能的方法。

你能澄清一下在C++中你所说的“gc”是什么意思吗? - Anderson Green
@Anderson 我的意思是垃圾回收 ;) - Waneck
我对这句话感到困惑:“C#和Java将与本机代码100%互操作。”在这种情况下,“本机代码”是指什么? - Anderson Green
你知道在哪里可以找到有关在Java中使用生成的Haxe库(而不是相反)的额外信息吗? - Anderson Green
你可以通过gtalk联系我,我的邮箱是waneck@gmail.com,我很乐意为你提供帮助。 本地代码指的是使用宿主语言(Java和C#)原生编写的代码。 - Waneck
@Waneck: 通常情况下,原生代码是指机器代码,也就是非CIL字节码。 - Janus Troelsen

3
Haxe并非专门用于编写跨语言库,但是可以实现,我看到了一些例子证明它可行:
- polygonal,一个数据结构和物理引擎,可在Haxe和AS3中使用。 - verb,一个基于NURBS的CAD库,可在Haxe和JS中使用。 - daff,一个用于比较表格的库,可在JS、Python、Java、C#、C++、Ruby和PHP中使用。
然而,对于特定的C++,由于hxcpp生成了大量Haxe特定的内容,包括GC,可能需要进行大量清理或难以使用。您可以在Haxe邮件列表中询问。

2
那么,编写跨语言库时推荐使用哪些框架或语言绑定? - Anderson Green
2
如果Haxe不是为编写跨语言库而设计的,那么是否有更好的工具用于此目的(或者Haxe一般是用于此目的的最佳工具)? - Anderson Green

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