BT

Google、JavaをObjective-Cに変換するJ2ObjCをリリース

| 作者: Abel Avram フォローする 7 人のフォロワー , 翻訳者 笹井 崇司 フォローする 0 人のフォロワー 投稿日 2012年9月19日. 推定読書時間: 3 分 |

原文(投稿日:2012/09/14)へのリンク

 

GoogleはソースコードをJavaからiOSプラットフォーム向けObjective-C/C++に変換するJ2ObjC transpilerをオープンソース化した。

J2ObjCのwikiによると、このプロジェクトはWeb、Android、iOSアプリケーションといった異なるコードベースを扱うことへの不満から始まったようだ。GWTベースのWebクライアントアプリはAndroidアプリとUI以外のコードを共有できるが、iOS向けにはスクラッチから書き直す必要があった。J2ObjCはこの問題を一部解決する。このツールを使うと、ビジネスロジックが書かれたJavaコードを編集不要で使えるObject-C/C++に変換できる。ただしiOSのUIコードは生成してくれない。作者らは「世界に通用する、高速なiOS UIを得る唯一の方法は、AppleのiOS SDKフレームワークを使ってObjective-Cで書くこと」であり、またそうしたコードを扱うのは複雑だと考えているためだ。

理論的にはサーバサイドのコードも変換可能だが、現在のところJ2ObjCはクライアントサイドの開発のみサポートしている。生成されたコードはiOS Foundation Frameworkを使っており、別のmakefileを使った外部ビルドプロジェクトを通して、あるいは、既存のプロジェクトにビルドルールを追加することで、Xcodeと統合できる。ほかのiOSアプリと同様、生成されたコードはXcode Instrumentsを使ってプロファイル、テスト、アナライズできる。

J2ObjCはObjective-Cコードを生成するのに、いくつものステップを踏んでいる

  • デッドコードの削除: JARファイルから使われていないコードを削除する。
  • Rewriter: スタティック変数など、Objective-Cに等価なものがないJavaコードを書き直す
  • Autoboxer: 数値プリミティブ値をボックス化するコードと、数値ラッパークラスを非ボックス化するコードを追加する。
  • IOS Type Converter: JavaからFoundationクラスに直接マップされる型を変換する。
  • IOS Method Converter: メソッド宣言と呼び出しを等価なFoundationクラスメソッドにマップする。
  • Initialization Normalizer: 初期化文をコンストラクタとクラス初期化メソッドに移す。
  • Anonymous Class Converter: 匿名クラスを内部クラスに変更する。そのクラスによって参照されるfinal変数フィールドも含まれる。
  • Inner Class Converter: 同じコンパイル単位にあるトップレベルクラスから内部クラスを取り出す。
  • Destructor Generator: 選択されたGCオプションに応じて、deallocもしくはfinalizeメソッドを追加する。

JavaコードをObjective-Cに変換する上で大きな問題のひとつは、ガベージコレクションだ。J2ObjCは複数の方法で使われていないオブジェクトを管理できるが、デフォルトでは自動リリースプールを使った参照カウントを使っている。

J2ObjCはまだアルファレベルだが、すでにGoogle内のいくつかのプロジェクト(詳細不明)で使われているようだ。

よく似たツールとしてはXMLVMがある。これはJava、.NET、Rubyバイトコードを.NET、Javaバイトコードに、あるいはJavaScript、Python、Objective-C/C++ソースコードに変換するクロスコンパイラだ。名前からわかるように、XMLVMはもとのバイトコードをXMLに変換し、それを後で別のVMのバイトコードや、WebやiOSアプリケーションのソースコードへと変換する。

 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT