将Swift编译为WebAssembly

将Swift编译为WebAssembly,第1张

概述LLVM基础结构现在支持从 LLVM IR to WebAssembly开始编译(至少是实验性的)。 Swift使用LLVM编译器基础结构,可以轻松编译为LLVM IR。所以我认为将一些Swift代码编译为LLVM IR然后编译为WebAssembly会很简单。 然而事实证明并非那么容易。看起来LLVM IR并不完全独立于平台?无论幕后的原因是什么,在将Swift编译为LLVM IR时,必须指定目 LLVM基础结构现在支持从 LLVM IR to WebAssembly开始编译(至少是实验性的)。 Swift使用LLVM编译器基础结构,可以轻松编译为LLVM IR。所以我认为将一些Swift代码编译为LLVM IR然后编译为WebAssembly会很简单。

然而事实证明并非那么容易。看起来LLVM IR并不完全独立于平台?无论幕后的原因是什么,在将Swift编译为LLVM IR时,必须指定目标体系结构并且WebAssembly不可用。@H_502_2@

那我有两个问题:@H_502_2@

1)我是否正确当前(截至2017年10月)无法将Swift编译为WebAssembly?@H_502_2@

2)如何使WebAssembly成为Swift到LLVM IR编译的受支持目标?@H_502_2@ 1)据我所知,截至2017年11月初,您是对的:没有通常可用的方法将Swift编译为WebAssembly。也许某个有进取心的黑客已经成功实现了它,但如果是这样,她还没有与我们分享她的代码。

2)为了启用WASM支持,您可能需要破解几个不同的部分。我认为你可以在不了解编译器内部的任何内容的情况下做到这一点(例如解析器和优化器),但是你需要了解工具链的工作原理以及它如何在运行时与平台集成。@H_502_2@

通过研究Swift如何移植到AndroID,你可以了解到你需要做什么。幸运的是,Brian Gesiak发布了一篇非常详细的博客文章,讲述了该端口的确切运作方式(警告:需要小型Patreon捐赠):@H_502_2@

https://modocache.io/how-to-port-the-swift-runtime-to-android@H_502_2@

说真的,如果没有阅读那篇文章,你就会疯狂地开始这个项目。@H_502_2@

虽然我不是专家,基于该端口和我对Swift的基本理解,我认为你需要攻击的大概概述是:@H_502_2@

> Swift编译器@H_502_2@

>你需要教它关于LLVM使用的WASM“三重”,所以它知道如何与其余的工具链集成
>您需要设置一个WebAssembly平台,以便人们可以在需要条件编译的地方编写#if os(WebAssembly)
>您还需要设置类似的构建时宏。 AndroID文章很好地解释了这种事情。@H_502_2@

> Swift运行时@H_502_2@

>这是用C语言编写的,它需要在WASM上运行
>由于WASM是一个不寻常的平台,因此可能会有一些工作。您可能需要为各种系统调用等提供兼容性填充程序。
>像Emscripten这样的项目已经证明了很多成功将C编译为WASM。@H_502_2@

> Swift标准库@H_502_2@

>理论上你可以写&运行Swift代码,不使用标准库,但谁想要?
>另外在理论上,如果运行时工作,这应该“正常工作”,但你可能需要在这里使用#if os(WebAssembly)功能解决平台违规问题@H_502_2@

>奖金:基金会和派遣图书馆@H_502_2@

>如果您想使用现有的Swift代码,这两个库将是必不可少的。@H_502_2@

链接:@H_502_2@

> Brian Gesiak的精彩博文:https://modocache.io/how-to-port-the-swift-runtime-to-android
>链接到AndroID端口的拉取请求:https://github.com/apple/swift/pull/1442
>有趣的文章,关于跨平台Swift的挑战和回报:https://medium.com/@ephemer/how-we-put-an-app-in-the-android-play-store-using-swift-67bd99573e3c@H_502_2@ 总结

以上是内存溢出为你收集整理的将Swift编译为WebAssembly全部内容,希望文章能够帮你解决将Swift编译为WebAssembly所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1051975.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存