Titanium News

Appcelerator Titanium Mobileに関するニュースなどを淡々とお伝えしていきます。

Introducing Hyperloop 抄訳

本記事はIntroducing Hyperloopの抄訳になります。詳細は原文をあたってください。 http://www.appcelerator.com/blog/2013/10/introducing-hyperloop/


ここ数ヶ月取り組んできたHyperloopについて紹介するときをついに迎えました。

Hyperloopは、コンパイル時にどのようにそのコードを扱うかを指定するための特別なキーワードを少数追加したHSJという特別なJavaScriptから"ネイティブコード"を生成する次世代のコンパイラです。この"ネイティブコード"は実行時にJavaScriptランタイムエンジンと連携して動作します。

Objective-C+iOS向けの簡単な例を見てみましょう。

@import("UIKit");
@import("CoreGraphics");
var view = new UIView();
view.frame = CGRectMake(0,0,100,100);

上記のコードは、UIKitとCoreGraphicsフレームワークをインポートして、JavaScriptのスコープで宣言されてないすべての変数・関数の名前解決を行うようコンパイラに指示されています。実際にUIViewはUIKitで定義されたインタフェイス、CGRectMakeはCoreGraphicsで定義されているCの関数ですが、これらに対してJavaScriptの構文を通してアクセスします。さらに通常のJavaScriptとは異なり、Hyperloopコンパイラはこのコードをネイティブコード(ここではObjective-C)にコンパイルします。

Hyperloopの構造

大半のコンパイラの設計と同様に、ソースコードを解析してASTを作成しソースの最適化を行うフロントエンド部と、ASTをターゲットとなる言語やプラットフォームに依存したネイティブコードに落とし込んでいくバックエンド部に分かれます。

現在の開発者向けプレビューでは、Objective-C・iOSをサポートしていますが、同時にAndroidとWindows8のサポートに取り組んでいます。

Titaniumとどう関係あるのか。

AppceleratorではHyperloopコンパイラを用いて、Ti.Nextと呼んでいるTitaniumの再構築を行っています。新しいTitanium APIはHJSで完全に構築され、Hyperloopコンパイラによって純粋なネイティブコードに変換されます。新しいAPIのためのより柔軟なアーキテクチャ、既存のネイティブアプリをTitaniumと統合させることによって、ものすごい実行性能を得ることができます。またHyperloopでネイティブモジュールを構築したり、Titaniumアプリに第三者のコードを直接統合する柔軟な方法を提供します。

Hyperloopはデスクトップアプリやnode.jsのような他のプラットフォームでも使えるのか?

そこをゴールに設定しています。

TitaniumなしでもHyperloopは使えるのか?

Titaniumは将来的にHyperloopに依存しますが、Hyperloop自体はTitaniumと一切依存関係はありませんので、Titaniumを使わずにHyperloopだけでネイティブアプリケーションを構築することができます。

今のTi(Ti.Current)とモジュールはどうなるのか。

Hyperloopコンパイラのコマンドとして、HJSのソースから現行のTitanium(Ti.Current)のネイティブモジュールをターゲットにする(あくまでも)試験実装をすすめており、近々提供するつもりです。

この機能はTi.Nextの登場を待つことなく、Hyperloopの利点を用いることができる最適な方法となると考えています。実際、Titanium 3.2.0で追加する新しいAPIをHyperloopで実装することが短期間で実現可能か短期間で使える(訳注:新APIをHJS+Hyperloopで実装できるか?という意味かも)か*1 を検証しています。

プラットフォーム間で異なるAPIの抽象化を簡単にするつもりはあるのか?

現在はありません。Hyperloopは(Titaniumがそうであるような)クロスプラットフォームツールキットであることを意味していませんので、今後もそういった機能がHyperloopとして追加されることはありません。 ただ、Hyperloopはrequire機構をサポートしているので、抽象化機構を自分で作ってロードすることはできるようになっています。

これってネイティブのシステムAPIを覚える必要があるってこと?

はい。HyperloopはネイティブAPIをプログラムすることでネイティブと同様のコンパイル後のパフォーマンスを得る手段です。システムAPIを呼び出す方法を十分に習得していないと、Hyperloopは十分に活用できません。

しかしながら、TitaniumモジュールSDKの開発では、システムAPIを理解しなければならない必要がありますよね。

いつHyperloopはStableになるか? Ti.Nextはいつから使えるか?

具体的なタイムラインは決まっていません。安定化に向けてかなり進展してきていますが、リリースする準備には程遠い状況です。またTi.Nextプラットフォームの再構築に取りかかる前に、Windows8とAndroid向けのHyperloopバックエンドの開発を進めなくてはなりません。しかし、研究開発フェーズのTi.Next API群の初期実装には満足していますので、Hyperloopがstableになりさえすれば、一気に進捗を得ることができるでしょう。

その日程をお約束できませんが、iOS・Android・Windows8のHyperloop安定版を年末までに得て、Ti.Next APIの本格的な作業を開始したいと考えていますが、Ti.NextについてはAPIだけではなくCLI・Studio・テスト・品質管理等いろいろと懸念事項がたくさんあります。

Hyperloopを使って何か出来ないの?

GitHubのレポジトリに現在いくつかの例を用意しており、数日ごとに追加していっていますので、Hyperloopが如何に強力なのかというアイディアを得ることができるでしょう。

何か手伝えることはある?

Hyperloopはオープンソースであり、すでにいくつものpull requestを頂いていることに感謝しています。

Titanium同様にApache Public Licenseですので、forkしたり、pull requestを頂くことを歓迎します。まだCLA(貢献者ライセンス同意書)を取り交わしていないのなら、pull requestを送信する前に締結してください。

Hyperloopに関する議論はどこでやってるのか?

Hyperloop開発についてのGoogleグループを用意しています。また、フィードバックもお待ちしています。問題を見つけたときはGitHubでIssueチケットを作成してください。

*1:2013/10/23 @infosiaさんのご指摘を受けて修正