JNIを利用したSLIMと他のLMNtal プロダクトとの連携の調査 2009/7/21 キックオフ 2009/8/6 加筆修正 B4 上野裕介 1 概要 • LMNtal言語では様々な派生プロダクトが誕生 • SLIM – C言語で実装されたLMNtal実行時処理系 – 特徴的な機能 • モデル検査器や非決定実行モードなど – Java言語で実装された他のプロダクトと深い連携 がなされていない • SLIMと他のプロダクトを連携する手段として JNIを取り上げ、その使用方法を調査 2 目次 • LMNtalのプロダクト – LMNtalプロダクト間の連携 • 卒論に向けて – SLIMの連携の利点の例 – JNI(java Native Interface) – JNIに関する調査 • JNIのプログラムの実行 • OSによる違い • まとめと今後の課題 – 今後やること – 参考文献 3 LMNtalのプロダクト(1/3) • LMNtalコンパイラ(java) – LMNtalプログラムを解析して中間命令列に変換 • Java版実行時処理系(java) – 中間命令列を解釈実行し、計算を行う – 他言語インタフェース機能によって、インラインの Javaプログラムを実行可能 • Javaクラスライブラリを利用可能 4 LMNtalのプロダクト(2/3) • C版実行時処理系SLIM(C言語) – 中間命令列を解釈実行し、計算を行う – 他言語インタフェース機能 • C言語で実装した関数を実行可能 – LTLモデル検査器が実装済 – 非決定的実行 • 全実行結果の出力が可能 5 LMNtalのプロダクト(3/3) • UNYO-UNYO 3G(java) – LMNtalプログラムの実行過程を可視化 – プログラムのデバッグや直観的理解に役立つ • LMNtalEditor(java) – LMNtalのための統合開発環境 – ボタン1つでJava版実行時処理系、SLIM、UNYO-UNYO 3Gでプログラムを実行できる – StateViewer • SLIMが非決定的実行時に出力した全実行結果を可視化 6 LMNtalプロダクト間の連携(1/2) • Java版実行時処理系とLMNtalコンパイラ – Java版実行時処理系の実行中にデータをやり取りす ることで、対話的実行(インタラクティブモード)を実現 している • Java版実行時処理系とUNYO-UNYO 3G – UNYO-UNYO 3Gの実行中にデータをやり取りすること で、実行過程の可視化を実現している • SLIMとLMNtalEditor – SLIMの非決定的実行の実行結果をLMNtalEditorで 受け取ることで、StateViewerでの可視化を実現して いる 7 LMNtalプロダクト間の連携(2/2) • Java版実行時処理系は、実行中にほかのプ ロダクトとデータのやり取りを行うような密な 連携がなされている。 • C版実行時処理系SLIMは、今のところ、実行 結果を他のプロダクトに引き渡すような単純 な連携しかなされていない。 – SLIM以外はJavaで実装されているため、実装言 語の違いが開発が避けられている一因と考えら れる 8 目次 • LMNtalのプロダクト – LMNtalプロダクト間の連携 • 卒論に向けて – SLIMの連携の利点の例 – JNI(java Native Interface) – JNIに関する調査 • JNIのプログラムの実行 • OSによる違い • まとめと今後の課題 – 今後やること – 参考文献 9 卒論に向けて • これまでやってきたこと – 先輩方の論文をいくつか読んだ。 – SLIMの他言語インタフェースを実際に記述した。 – SLIM、UNYO-UNYO 3G、LMNtalEditorどれも面白 そうだと思った。 • SLIMと他のプロダクトとの連携を図ることで、 LMNtal開発環境の向上が見込める。 – JavaとC言語という実装言語の違うプログラムを連 携させる方法を調査し、実装してみたい。 10 SLIMの連携の利点の例(1/3) • SLIMとLMNtalコンパイラの連携 – SLIMでの対話的実行(インタラクティブモード)の 実現 • ユーザが入力したプログラムを逐次コンパイルして実 行するため、SLIMの実行中にLMNtalコンパイラとの連 携が必要 – SLIM独自の機能として、非決定的実行時の全実 行結果を対話的に出力することができそう • LMNtalの理解、非決定的実行時の動作の理解が深ま る。デバッグもはかどる。 11 SLIMの連携の利点の例(2/3) • SLIMとUNYO-UNYO 3Gの連携 – SLIMでの実行過程の可視化 • SLIMの実行中にUNYO-UNYO 3Gとデータのやり取りを 行うことで可視化が実現できそう • SLIMもJava実行時処理系も基本的には同じLMNtalプ ログラムを処理するが、他言語インタフェースなど、処 理系に依存したプログラムも存在する。 • SLIMでしか実行できないLMNtalプログラムでも実行過 程が可視化できれば、デバッグやプログラムの理解が はかどる。 12 SLIMの連携の利点の例(3/3) • SLIMとLMNtalEditorの連携 – StateViewerの逐次実行の実現 • StateViewerはSLIMの実行結果を解析するため、状態 空間の大きなプログラムの場合、StateViewerでの表 示に非常に時間がかかったり、メモリが足りずにSLIM で正常な出力ができず、StateViewerでは結果を表示 できない場合もある。 • SLIMの実行中に非決定的実行時の状態を逐次出力し、 LMNtalEditorとデータのやり取りが行えれば、 StateViewerで途中まで表示することができそう。 13 JNI(Java Native Interface) • Javaから他言語のアプリケーションを呼び出し たり、他言語からJavaクラスを呼び出したりす るための標準仕様。 – C言語からJavaクラスを呼び出すためにはJDKに 付属の<jni.h>をインクルードする必要がある – C言語からJavaクラスを呼び出すときには、基本的 にはJava側の修正は必要ない • JNIを導入してC言語からJavaクラスを呼び出しても、 Java側の保守性を下げることが少ない 14 JNIに関する調査 • 以下の調査を行った – 実際にC言語からJavaクラスを呼び出せるのか – 複数のOSで動作するか • SLIMの実行環境としてよく用いられている Windows(cygwin)とLinux(Ubuntu)で調査 – コンパイル時にどんなオプションが必要か – 実行時にどんな環境変数が必要か 15 JNIのプログラムの実行 • C言語からJavaVMを生成し、java.lang.Mathパッ ケージのpow()メソッドで25を計算し、計算結果の double型のデータをC言語で出力するプログラム を作成した。 – Windows(cygwin)もLinux(Ubuntu)も同じCソースコード をコンパイルして正しい実行結果が得られた。 C Java JavaVMの生成 Math.pow(2,5); 32.000 結果の出力 16 OSによる違い Windows(cygwin) Linux(Ubuntu 8.04) 環境変数 環境変数 JAVA_HOME JDKのインストールパス JAVA_HOME JDKのインストールパス PATH %JAVA_HOME%\jre\bin PATH %JAVA_HOME%\jre\bin\ client LD_LIBRARY_ PATH ${JAVA_HOME}/jre/lib/i3 86/client コンパイルオプション gcc -o main.exe -O2 main.c \ -D__int64='long long’ \ -I${JAVA_HOME}/include \ -I${JAVA_HOME}/include/win32 \ -L. -l jvm コンパイルオプション gcc -o main.exe -O2 main.c \ -D__int64='long long‘ \ -I${JAVA_HOME}/include \ -I${JAVA_HOME}/include/linux \ -L${JAVA_HOME}/jre/lib/i386/client \ -l jvm その他 dlltoolを用いてjvm.dllのインポートライ ブラリを生成する必要がある 17 目次 • LMNtalのプロダクト – LMNtalプロダクト間の連携 • 卒論に向けて – SLIMの連携の利点の例 – JNI(java Native Interface) – JNIに関する調査 • JNIのプログラムの実行 • OSによる違い • まとめと今後の課題 – 今後やること – 参考文献 18 まとめと今後の課題 • JNIを用いると、C言語からJavaクラスを呼び出せ ることが確認できた。 • 同一のプログラムが複数のプラットフォームで実 行できることが確認できた。 • 今後は実際にSLIMと他のプロダクトを連携する ための具体的な実装方法を考える必要がある。 – 例:SLIMと他のプロダクトの双方にアトムやルールの データを保持する必要があるのかどうか、そうであれ ばどのように共有するか – JNI以外にも実装方法は考えられるかもしれない 19 今後やること(1/2) • まずはどれか1つでも連携機能を実装し、JNI プログラミングのコツをつかみたい – SLIMの特徴が活かせる機能連携を優先させたい • インタラクティブnd実行 • StateViewerの逐次実行など SLIM StateViewerの逐次実行 LMNtal Editor プログラムの可視化 UNYOUNYO 3G インタラクティブモード LMNtal コンパイラ 20 今後やること(2/2) • SLIMへの多くの変更は避けられない – JNI連携(C→Java)の場合、C言語側でほとんどのプログラムを書 く – JNI 連携(Java→C)の場合、C言語側はライブラリ化する必要が ある • 連携部を中間アプリケーションのような形で独立させたい – 他のプロダクトの保守性をねるべく下げないような実装が理想 Java Java JNI SLIM Application LMNtal Editor UNYO-UNYO 3G LMNtal Java コンパイラ 21 参考文献 • [1] 乾敦行,工藤晋太郎,原耕司,水野謙,加藤紀夫,上田和紀: “階層 グラフ書換えモデルに基づく統合プログラミング言語LMNtal”,コンピュー タソフトウェア,Vol.25,No.1,pp.124-150,2008. • [2] 石川力, 堀泰祐, 村山敬, 岡部亮, 上田和紀: “軽量なLMNtal 実行時処 理系SLIM の設計と実装”,情報処理学会第70 回全国大会,”5-153”-”5154”,2008. • [3] 中野敦: “スケーラブルな可視化機能を備えたLMNtal開発環境の設計 と実装”, 早稲田大学大学院理工学研究科,修士論文,2008. • [4] 齊藤和佳子: “LMNtal プログラムのカスタマイズ可能な可視化機能の 設計と実装”, 早稲田大学理工学部コンピュータ・ネットワーク工学科,卒 業論文,2008. • [5] 綾野貴之: “システム検証機能を備えたLMNtal 統合開発環境の設計 と実装”, 早稲田大学理工学部コンピュータ・ネットワーク工学科,卒業論 文,2008. • [6] 石川力: “LMNtal からC 言語への変換の設計と実装”,早稲田大学理 工学部コンピュータ・ネットワーク工学科,卒業論文,2008. • [7] ロブ・ゴードン: “JNI JavaTM Native Interface プログラミングC/C++コード を用いたJava アプリケーション開発”, ピアソン・エデュケーション,1998. 22
© Copyright 2025 ExpyDoc