我一直想知道是否可以将LLVM实现的后端从ARM更改为C或C ++的其他内容?目前,Adobe使用Actionscript3前端(我目前无法找到 - 闭源?)来使LLVM生成iOS应用程序。我想知道为什么其他后端没有更多的选择?当然,走这条路线是有限制的,在运行时没有加载外部swf文件(仅举一例),但iOS应用程序似乎很好地管理了这个专长。
我确实找到了pdf,其中讨论了AS3 LLVM前端,但没有指导代码的位置或如何调查......
我认为这是错过了Adobe错失的机会,并想知道做这样一项壮举需要做多少工作?
请注意:我知道Haxe目前可以很好地输出到C ++; - )
[编辑:更新了Haxe笔记]
答案 0 :(得分:2)
我喜欢你的想法,我曾经在那条路上冒险,并且真的很努力地研究如何完成同样的事情。有关炼金术工具链如何工作(特定于iOS)的更多详细信息,请参阅此答案:
基本上你是对的,adobe使用的是非开源的actionscript编译器的内部版本。但是,如果你想危险地生活(lol),你可以随时下载旧的打包器,用于iphone或新的AIR 2.7 SDK,并从ADT.jar中提取他们的ASC版本。您会注意到有大量新的LLVM相关类与现在包含在SDK中的LLVM dll(以及旧的PFI)相连接。这是前端,这些LLVM java类是在编译期间拦截字节码并将它们传递出LLVM库,LLVM库又导出到ARM。现在您可以编译自己的LLVM库并替换现有的LLVM库,只需将您的LLVM lib上的输出目标设置为LLVM当前支持的任何内容(我相信有一个C / CPP后端)。这可能是可能的,因为就像我说的那样,根据我的理解,LLVM编译库没有内置的前端,前端是用Java编写的,基本上将AVM字节码转换为LLVM IR,然后通过该IR到LLVM lib。如果你设法做到这一点,请找到在这里告诉我,因为我真的对此感兴趣。我只是没有时间自己去追求它。
答案 1 :(得分:1)
此流程(AS3 / SWF - >其他目标)是一个引人入胜的主题,我很乐意了解更多信息。基本上问题是,如何在Flash Player外部获取基于Flash的内容?理想情况下支持Stage3D。
一个明显的目标是JavaScript + webgl(又名HTML5技术)。
以下是我所知道的一些资源:
我相信自上面的讨论以来引入了Emscripten / asm.js。它是一个LLVM到JavaScript编译器,主要用于将C / C ++移植到JavaScript(see slide)。从list of apps ported到ScummVM到Doom,来自emscripten的Linux令人印象深刻!正如您所提到的,AIR编译器(adt.jar)在某一时刻生成LLVM - 也许可以通过LLVM / emscripten将AIR应用程序移植到JS。
Renaun Erickson posted关于一个使用(可悲的是现在是defunt)Randori框架移植到JavaSciprt和webgl的starling示例。但git repos仍然存在,his demo在Chrome中游戏(虽然不适用于iOS 8.1,支持webgl,嗯。)
上述Jangaroo很有意思,但1)似乎性能有限,2)实现了subset of AS3,3)似乎没有提到Stage3D(GPU加速)。
OpenFL值得一提,因为它支持比AIR更多的目标,包括C / C ++和HTML5 / webgl,虽然它需要从AS3到Haxe的源代码翻译(这些翻译是相关的,但是不同于通过OpenFL(和starling demo)在HTML5中搜索related thread。
这可能更像是一个维基/讨论而非答案,但我希望我们的信息收集变成一个良好的工作流程并回答这个问题。