SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

はてなエンジニア直伝! はてなのサービスを取り巻く先端技術トピック

Swiftから透けて見えるAppleのコンパイラ技術

はてなエンジニア直伝! はてなのサービスを取り巻く先端技術トピック 第1回


LLVMとSwift

 LLVMやClangへのコミットがどうSwiftに繋がるのでしょうか?AppleはLLVMとClangによって作り上げた環境を、Swiftでもやりなおしたわけではありません。実はSwiftもObjective-Cと同じくLLVM上で動作するのです。なぜそんなことが可能なのでしょうか。秘密はLLVMの仕組みにあります。

 LLVMでは以下のようにソースコードをマシン語に変換し実行します。

ソースコード -> フロントエンド -> LLVM Optimizer -> バックエンド -> マシン語

 ざっくり説明すると、ClangやGCCなどのフロントエンドがソースコードを受け取り、最適化を施しバックエンドに送った上で最終的にマシン語に変換されて実行されます。ここで、フロントエンドとLLVM Optimizer、LLVM Optimizerとバックエンドの間はそれぞれLLVM IR(Intermediate Representation)という形式でやりとりされます。ここまでで勘の良い方は気づいたと思いますが、フロントエンドさえ別の言語に対応すれば他の言語もLLVMで動かすことができる設計になっています。実際、GCCでコンパイルできるAdaやFortranのような言語をLLVMで動作させることができます(LLVMプロジェクト内のDragonEggを参照してください)。つまり、SwiftはLLVMの新しいフロントエンドとして実装されているということです。

 公式に詳しく紹介されているわけではありませんが、コンパイラのオプションなどから以下のようにLLVM IRにコンパイルされることがわかります。

ソースコード -> Swift AST -> SIL -> LLVM IR

 ソースコードはまず、Swift Abstract Syntax Tree(AST)に変換されます。次にSwift Intermediate Language(SIL)に変換され、Swift向けの最適化を施した後にLLVM IRへと変換されLLVM Optimizerに送られます。なお、これらの中間状態はSwiftコンパイラから直接取り出すことも可能です。コンパイラのヘルプ(xcrun swiftc -help)を見ると出力の仕方がわかりますので、興味のある方は是非試してみてください。

 このようにSwiftにおいてもLLVMの技術は深く関わっています。SwiftではObjective-Cと共存できたりCを直接使ったりすることができますが、そういったことができるのも共通の基盤としてLLVMがあるからこそです。そのおかげでObjective-Cのプログラマは少し勉強すればSwiftを使いこなせるようになりますし、Swiftへの移行が非常に緩やかに実現できます。これこそまさにAppleの技術選択が非常にうまくはまっていることを示す良い例だと言えます。

まとめ

 Appleのコンパイラ関連技術の歴史を紹介し、Swiftがその恩恵を強く受けた言語であることを紹介しました。その歴史を踏まえてSwiftを見てみると、Appleが自分たちのプラットフォームのためのプログラミング言語を新しく作ることがそれほど突飛な発想でないことがわかるとおもいます。

 Swiftの登場当時、筆者の周りではその魅力的な仕様とは裏腹に「これに移行して大丈夫なのか」や「いつかAppleが強制的にSwiftに移行しろと言いだす」のようなネガティブな声が聞こえていました。登場があまりに突然だったことも少なからず影響していることでしょう。しかし、Swiftは決してAppleの思いつきでリリースされたようなものではなく、長年積み重ねてきた技術の結晶です。

 WWDC 2015ではSwift 2が発表されました。いくつかの構文やエラーハンドリングの追加に留まらず、Swiftをより使いやすくするためにObjective-Cにジェネリクスのサポートまで追加されており、正にAppleがSwiftに本気で取り組んでいることが見て取れます。

 また、Keynoteで2015年末ごろSwiftがオープンソースプロジェクトになると発表された瞬間こそ、その日会場から最も高い歓声が上がった瞬間でした。Swiftの進化そのものだけでなく、開発者コミュニティの熱の高さにも驚きます。オープンソース化に伴いLinuxのサポートの追加も発表されているので、ますます利用される領域も増えていくでしょう。

 筆者にはこれからのSwiftとそのコミュニティが楽しみでなりません。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
はてなエンジニア直伝! はてなのサービスを取り巻く先端技術トピック連載記事一覧
この記事の著者

yashigani(ヤシガニ)

Twitter:@yashigani ブログ:yashigani?.days

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/8768 2015/07/01 18:26

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー