Informatik-Wiki
java2cppソース
最終更新:
Bot(ページ名リンク)
-
view
java2cppソース
java2cppソース中に見たもの
java2cppソースをちらりと覘いてみました。まずすぐに判ったのがdfcアプリである、ということ。冒頭一番、しっかりdfc_core.hをインクルードしているし、その他、dfcライブラリを使用する所ではおなじみのインクルードパスとネームスペースを使いまくっています。
という事は、基本的な機能はすべて現在のdfcライブラリとして実装されている範囲で作られているのでdfcがサポートしていないクラスについては処理されない、という事も明らかです。
java2cppのしくみ
java2cppにはディレクトリツリーをたどりながら*.javaファイルを読み込んで解析するパーサ部分と自分がたどったディレクトリツリーを生成しながら*.javaから読み込んだ情報に対応する*.cppと*.hファイルに出力する部分があります。変換処理中出てくるエラーメッセージはこのパーサ部分が自分の知らないトークンを発見した時に例外を投げて出力しています。
java2cppが対応するクラス
以上の様な動き方をするjava2cppですが、javaソースでimportされているクラスをチェックする時に、dfcソースを検索する様な事はしていません。従って、dfcのsrcおよびinclude配下に新しいクラス定義を置いても読み取ってはくれません。
java2cppが対応するクラスの追加
jakarta commonsライブラリなどの外部から提供されているライブラリを追加しようとすると、以下の様な手順になると考えられます。
- 新機能のdfcソースを作成
- 既存のdfcソースと合わせてビルド
- 新dfcが出来たところでjava2cppもビルド
これは、dfcおよびjava2cppのサポート範囲を直接拡張しようというもので、効果的ではありますが、新規に追加した部分を誰がどう保証するかという問題が残ります。Javaソースが存在しても、C++レベルで実績が無いものを新規に生成する訳なので、十分な試験を行い動作を確認しておかなければなりません。本格的にやろうとすると、それだけでひとつのプロジェクトになってしまう事も考えられます。
Javaレベルでの処理
Javaソースが存在するクラスを処理する方法は2つあります。
- あらかじめ変換しておき-lオプションで追加
- -sオプションを使って全部入力ファイルとして処理
前者はJavaソースを少しずつ変換してエラーにならない範囲を少しずつ拡げるやり方です。依存関係があった場合、それを逐次解決しながら進める必要があります。後者は入力ファイルを一気に処理してしまうやり方です。依存関係の問題が発生しなければ、一気に結果が得られますが、どこかでつまずいた場合はそれ以降が全てダメになる可能性もあります。また、Javaのソースで全ての元データを揃えておかなければなりません。アプリケーションは可能ですが、DFC未対応のJDKやJakartaライブラリ部分をソースで持ち歩くのはなにかと面倒です。
基本的な戦略
以上の事から、DFCが対応していないコアパッケージのクラスはあらかじめ変換しておき、アプリケーションなど後から追加するクラスは-sで一緒に処理するのが効率的と考えられます。
