LLVMインフラストラクチャは、 LLVM IRからWebAssembly (少なくとも実験的に)からのコンパイルをサポートするようになりました。 SwiftはLLVMコンパイラインフラストラクチャを使用し、LLVM IRに簡単にコンパイルできます。だから、SwiftコードをLLVM IRにコンパイルしてから、 WebAssemblyに。
しかし、それほど簡単ではないことが判明しました。 LLVM IRは完全にプラットフォームに依存しているわけではないようです。舞台裏の理由が何であれ、Swift=をLLVM IRにコンパイルする場合、ターゲットアーキテクチャを指定する必要があり、WebAssemblyは使用できません。
次に、2つの質問があります。
1)現在(2017年10月現在)SwiftをWebAssemblyにコンパイルする方法はありませんか?
2)WebAssemblyをSwift to LLVM IRコンパイルのサポート対象にするためには何が必要ですか?
1)2017年11月初旬の私の知る限り、あなたは正しいです:Swift to WebAssembly。おそらく、どこか進取の気性のあるハッカーがどこかでそれを起こしたかもしれませんが、そうであれば彼女はまだ私たちとコードを共有していません。
2)WASMサポートを有効にするには、おそらくいくつかの異なる部分をハッキングする必要があります。コンパイラーの内部(パーサーやオプティマイザーなど)についてほとんど何も知らなくてもできると思いますが、実行時にツールチェーンがどのように機能し、プラットフォームとどのように統合されるかについて学ぶ必要があります。
tonを学ぶことができます。SwiftがAndroidに移植された方法を調べることで、何をする必要があるかを知ることができます。幸いなことに、Brian Gesiakはreallyそのポートがどのように機能したかについての詳細なブログ投稿(警告:小さなPatreonの寄付が必要です):
https://modocache.io/how-to-port-the-Swift-runtime-to-Android
真剣に、あなたはその記事を読まずにこのプロジェクトに乗り出すのに夢中になるでしょう。
私は[〜#〜]ではない[〜#〜]専門家ですが、そのポートと私の(基本的な)Swiftの理解に基づいて、どこでの大まかな概要を考えますあなたがハックする必要があるだろう:
#if os(WebAssembly)
を記述できるように、WebAssemblyプラットフォームをセットアップする必要があります。#if os(WebAssembly)
機能を使用する必要があります。SwiftのWebAssemblyへのコンパイルをサポートする商用製品があるようです。開発者ツール会社であるRemObjectsは、 ElementsコンパイラによるWebAssemblyのサポートを発表したばかりです 、 Java、Swift、C#、およびOxygeneをコンパイルできます。