Haxe编译器能将任何C#代码转换为Haxe吗?

4

首先我非常陌生Haxe编程语言,所以我要问一个非常基础的问题,并且我有两个问题。

1)我的第一个问题是:我知道Haxe编译器可以将Haxe代码转换为任何其他语言(支持的语言),但它能否将其他语言(支持的语言)的源代码转换为Haxe?

2)如果可以,它的能力如何,例如它只能将一些文件转换为Haxe吗?还是说如果我给出像这个https://github.com/dotnet/corefxhttps://github.com/tensorflow/tensorflow这样的巨大代码库,它能够转换其中的所有内容(我知道这有点难度过大,但不管怎样)?


1
不,没有人编写能够双向转换代码的编译器。有人可能编写了一个C#到Haxe的编译器,但这绝对不是主要项目的目标。 - UnholySheep
https://tardisgo.github.io/ 试图在 Haxe 和 Go 之间转换代码,因此有些人确实尝试这样做,如果 Haxe 变得非常流行,我相信这种情况会发生。但是使用 c# 时,请参见我的其他答案中的 -cs-lib。 - Justinfront
3个回答

9
不,Haxe编译器只能单向转译,即:

Haxe代码 ⭢ 选定目标

如果需要另一个方向的转译,您需要使用独立于Haxe编译器的外部工具。多年来,已经创建了几个这样的工具(有些已经被放弃):

除了编译源代码之外,还有一些用于生成externs的工具:


4
Gama11的答案是正确的,但应该添加-net-lib和externs,因为它们允许您在Haxe c#/mono项目中使用c#/mono代码。
Haxe可以使用编译器定义(externs)消费所有目标的已编译代码,以在同一目标的Haxe项目中使用,对于大多数目标,您需要手动创建适当的externs。但是,对于某些目标(Java、C#、Flash),Haxe可以自动生成所需的externs,尽管不总是成功,但可以使使用现有库变得相当轻松。我已经在Flash上取得了很大的成功,并且在Java目标上的成功各不相同,但它一直在改进,也许曾经尝试过一两次使用mono(c#目标)。在hxml编译器代码中,您可以编写以下内容。
-swf-lib my.swf
-java-lib my.jar
-net-lib my.dll

您不能在C#项目中使用swf或jar文件,也不能在Flash或Java项目中使用dll文件,至少不是这种方式,虽然您可以使用特殊解析库将swf与openfl和nme一起用于以c++为目标的项目。
技术上来说,关于C#的这个问题,未来Haxe手册会更正式地描述,详细信息请参见github markdown页面链接:
"Haxe可以直接加载.NET程序集文件(.DLL),并将其类型定义转换为可用作Haxe类型。要加载.NET程序集,请使用-net-lib library.dll编译器选项。Haxe将自动解析该程序集文件中定义的类型,并使它们可用于作为Haxe类型进行导入。" - 引用自https://github.com/HaxeFoundation/HaxeManual/wiki/Haxe-C%23

0

你的意图是什么?你是:

  1. 试图在针对C#的Haxe项目中使用C#代码编写的逻辑?
  2. 试图在针对非C#的Haxe项目中使用C#代码编写的逻辑?

对于第一种情况,你可以使用-net-lib,这样你就可以直接在Haxe中使用C#库,因此你根本不需要将C#代码转换为Haxe。

对于第二种情况,你必须手动将C#代码转换为Haxe代码,或者使用Gama11提到的一些工具。Haxe本身不支持这种转换。


我想使用TensorFlow编写深度学习的代码,但我需要学习Python才能做到。我熟悉的语言是JavaScript和C#。因此,我看了一下Haxe,认为它可以将任何语言转换为任何语言,并倒向转换。但正如Gama11所说,这是错误的。所以,这就是我的主要目标。我们是否可以用另一种语言编写的库来与我们选择的语言一起使用? - Vignesh S

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