BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース GoogleのエンジニアがSwiftをWindowsに移植

GoogleのエンジニアがSwiftをWindowsに移植

原文(投稿日:2020/09/25)へのリンク

クロスプラットフォームなプログラミング言語になるというSwiftのビジョンが、Windows 10用のSwiftツールチェーンの導入によって一歩前進したアーリーアダプタはSwiftを使って、プラットフォームが用意する既存ライブラリをC言語ABI経由で相互運用する、Windows 10プログラムの開発が可能になる。

GoogleのエンジニアでSwiftのコアチームメンバであるSaleem Abdulrasool氏の説明によれば、Swiftエンジニアたちの支援やサポートのおかげで、1年以上にわたる移植作業が完成したのだ。

SwiftのWindowsへの移植というのは、単なるコンパイラの移植ではありません。プラットフォーム上で完全なエコシステムが利用可能になったという意味です。この中にはコンパイラ、標準ライブラリ、コアライブラリ(ディスパッチ、基盤、XCTest)が含まれます。

ひとつ不足しているのはSwiftパッケージマネージャだが、Abdulrasool氏によれば、それも間もなく完成する。現時点では、CMakeあるいはNinjaを使うことで、Windows上でSwiftプログラムのビルドが可能である。

モチベーションのひとつとしてAbdulrasool氏は、コミュニティによるWindows用Swiftの要望を挙げている。しかしこれまでは、この移植に特有の技術的課題が、さまざまな形でこの取り組みを遅らせてきた。SwiftをWindowsに移植しようという試みは、これまではcygwinやMinGW、あるいはWindows Subsystem for Linuxなど、互換性レイヤに依存するものが中心だった。それぞれにメリットとデメリットがあるが、システムライブラリにブリッジしてWindows APIをSwiftプログラマが直接利用できるようにしたいと考えていたAbdulrasool氏は、まったく違う方法を採用することにしたのだ。

WindowsにSwiftを移植する作業では、WindowsとLinuxの開発環境にある多くのミスマッチを扱う必要がある。CMakeの依存関係、autotool、Swiftに必要なカスタムビルドシステム、さらにはWindowsプラットフォームの不十分なツーリングへの対応などだ。このようなことからAbdulrasool氏は、Swiftコアチームに必要な開発者ワークフローへの統合など、多数のアカウントによる開発を容易にする方法として、Linux上で引き続き作業を行うクロスコンパイルを手法として選択した。

Linux上でのWindows用Swiftのクロスコンパイルは、しかしながら、大小文字を区別するLinux上でのWindows SDKヘッダやライブラリのファイル名の不一致や、C++実装の違いなど、新たな課題をもたらすことになった。詳細についてはAbdulrasool氏自身が、2019年のLLVM Dev Meetingで行った講演で説明している

Swiftが実際にWindows上での開発に使用できることの証明として、Abdulrasool氏は、GitHubでソースコードが公開されている計算機のデモと、クロスプラットフォームのEメールクライアントであるReaddle Sparkの移植版を、Windows用として提供している。Readdleでは、アプリをWindowsに移植する決定を行った時に、Android、iOS、macOSとの間でコードを共有する手段としてSwiftを採用した。

一部の機能はまだ完成していませんが、Windows用Swiftが私たちのニーズを完全に満足していることは分かりました。実際、一部サードパーティのC/C++依存関係は、Swift以上に私たちの頭痛の種になっていたのです。Sparkのビジネスロジックはすべて、分離したCoreモジュール内に配置されています。実際にはモジュールのパックなのですが、私たちはCoreと呼んでいます。この構成により、macOSのAppKit、iOSのUIKit、AndroidのネイティブUI Toolkitなど、ターゲットプラットフォーム上の任意のUIフレームワークを使用することが可能になっています。

特にSwiftライブラリの統合に関しては、CryptoSwiftやOAuthSwiftなどのピュアSwiftモジュールが簡単に使用できるようになった。GUI開発については、Spark CoreをNode.jsのローダブルモジュールとして構築する必要のあったElectronの利用が容易になった。これが実現したのは、SwiftがC ABIをサポートしたからだ。これにより、NodeモジュールをSwiftコードとして実装し、数行のCコードでラップすることが可能になった。

Windows用Swiftの開発はまだ完了ではない。Abdulrasool氏によれば、次のマイルストンはSwiftパッケージマネージャと、REPLやデバッグエクスペリエンスに使用するlldbになる予定である。興味があるならば、関連するSwiftフォーラムで開発のフォローや今後の開発に関する議論に参加することができる。バグの報告はSwift Bug Trackerで可能だ。

この記事に星をつける

おすすめ度
スタイル

BT