JNIを利用したSLIMと他のLMNtalプロダクトとの連携の調査

Slides:



Advertisements
Similar presentations
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
Advertisements

プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
OWL-Sを用いたWebアプリケーションの検査と生成
モデル検査の応用 徳田研究室 西村太一.
シーケンス図の生成のための実行履歴圧縮手法
C言語によるプログラミングスタイル 制御システム工学科 山北 昌毅.
IBM Power Systems Linux センター のご紹介
プログラムを「StiLL」で作成します。
プログラミング入門 (教科書1~3章) 2005/04/14(Thu.).
背景 我々の研究室で開発しているJavaプログラム解析フレ ームワークでは,解析情報はメモリ上に保持される 問題点
LMNtalからC言語への変換の設計と実装
班紹介 描画班一同.
侵入検知システムの構築と ログの可読性向上
情報理工学部 情報システム工学科 ラシキアゼミ3年 H 岡田 貴大
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
LMNtalからC言語への変換の設計と実装
LMNtalからC言語への変換の設計と実装
侵入検知システム(IDS) 停止 IDS サーバへの不正アクセスが増加している
プログラミング言語論 理工学部 情報システム工学科 新田直也.
Androidソースコード公開後のJNI
複数CPU間のための共有メモリ 小島 隆史(中央大学大学院理工学研究科 國井研究室)
OpenOffice.orgの日本語処理 中本 崇志.
Javaプログラムの実行まで バイト Javaの コード 実行 ソースコード Java ファイル名 ファイル名 abc.java
MPIによる行列積計算 情報論理工学研究室 渡邉伊織 情報論理工学研究室 渡邉伊織です。
Occam言語による マルチプリエンプティブシステムの 実装と検証
概要 Boxed Economy Simulation Platform(BESP)とその基本構造 BESPの設計・実装におけるポイント!
コンパイラの解析 (2) GCJのデータ構造 - 1.
型付きアセンブリ言語を用いた安全なカーネル拡張
プログラミング言語入門 手続き型言語としてのJava
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
動的依存グラフの3-gramを用いた 実行トレースの比較手法
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
実行時情報に基づく OSカーネルのコンフィグ最小化
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
パソコンのしくみ ハードウェア OS(Operating System) アプリケーション NEC DOS
動的データ依存関係解析を用いた Javaプログラムスライス手法
オープンソース開発支援のための ソースコード及びメールの履歴対応表示システム
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
プログラミング言語論 第十四回 理工学部 情報システム工学科 新田直也.
Javaバイトコードの 動的依存解析情報を用いた スライシングシステムの実現
バイトコードを単位とするJavaスライスシステムの試作
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
Javaバーチャルマシンを利用した 動的依存関係解析手法の提案
コーディングパターンの あいまい検索の提案と実装
JAVAバイトコードにおける データ依存解析手法の提案と実装
コンパイラ 2012年10月1日
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
保守請負時を対象とした 労力見積のためのメトリクスの提案
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
コンピュータアーキテクチャ 第 5 回.
プログラム分散化のための アスペクト指向言語
プログラミング基礎a 第9回 Java言語による図形処理入門(1) Javaアプレット入門
統合開発環境のための プログラミング言語拡張 フレームワーク
第2回 開発環境とゲーム 05A1030 佐々木 和也.
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
コンパイラ 2012年10月11日
ソフトウェア工学 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
プログラミング演習I 2003年6月11日(第9回) 木村巌.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
オブジェクト指向メトリクスを用いた 開発支援に関する研究 --- VC++とMFCを用いた開発を対象として ---
GluonJ を用いたビジネスロジックからのデータベースアクセスの分離
1.2 言語処理の諸観点 (1)言語処理の利用分野
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

JNIを利用したSLIMと他のLMNtalプロダクトとの連携の調査 2009/7/21 キックオフ 2009/8/6 加筆修正 B4 上野裕介

概要 LMNtal言語では様々な派生プロダクトが誕生 SLIM C言語で実装されたLMNtal実行時処理系 特徴的な機能 モデル検査器や非決定実行モードなど Java言語で実装された他のプロダクトと深い連携がなされていない SLIMと他のプロダクトを連携する手段としてJNIを取り上げ、その使用方法を調査

目次 LMNtalのプロダクト 卒論に向けて まとめと今後の課題 LMNtalプロダクト間の連携 SLIMの連携の利点の例 JNI(java Native Interface) JNIに関する調査 JNIのプログラムの実行 OSによる違い まとめと今後の課題 今後やること 参考文献

LMNtalのプロダクト(1/3) LMNtalコンパイラ(java) Java版実行時処理系(java) 中間命令列を解釈実行し、計算を行う 他言語インタフェース機能によって、インラインのJavaプログラムを実行可能 Javaクラスライブラリを利用可能

LMNtalのプロダクト(2/3) C版実行時処理系SLIM(C言語) 中間命令列を解釈実行し、計算を行う 他言語インタフェース機能 LTLモデル検査器が実装済 非決定的実行 全実行結果の出力が可能

LMNtalのプロダクト(3/3) UNYO-UNYO 3G(java) LMNtalEditor(java) プログラムのデバッグや直観的理解に役立つ LMNtalEditor(java) LMNtalのための統合開発環境 ボタン1つでJava版実行時処理系、SLIM、UNYO-UNYO 3Gでプログラムを実行できる StateViewer SLIMが非決定的実行時に出力した全実行結果を可視化

LMNtalプロダクト間の連携(1/2) Java版実行時処理系とLMNtalコンパイラ Java版実行時処理系とUNYO-UNYO 3G SLIMとLMNtalEditor SLIMの非決定的実行の実行結果をLMNtalEditorで受け取ることで、StateViewerでの可視化を実現している LMNtalコンパイラと両処理系の中間命令列を介した連携は自明の連携として、取り扱わない。

LMNtalプロダクト間の連携(2/2) Java版実行時処理系は、実行中にほかのプロダクトとデータのやり取りを行うような密な連携がなされている。 C版実行時処理系SLIMは、今のところ、実行結果を他のプロダクトに引き渡すような単純な連携しかなされていない。 SLIM以外はJavaで実装されているため、実装言語の違いが開発が避けられている一因と考えられる もちろん、誰もそこに興味を持たなかったし、必要に迫られなかったという理由も考えられる。

目次 LMNtalのプロダクト 卒論に向けて まとめと今後の課題 LMNtalプロダクト間の連携 SLIMの連携の利点の例 JNI(java Native Interface) JNIに関する調査 JNIのプログラムの実行 OSによる違い まとめと今後の課題 今後やること 参考文献

卒論に向けて これまでやってきたこと SLIMと他のプロダクトとの連携を図ることで、LMNtal開発環境の向上が見込める。 先輩方の論文をいくつか読んだ。 SLIMの他言語インタフェースを実際に記述した。 SLIM、UNYO-UNYO 3G、LMNtalEditorどれも面白そうだと思った。 SLIMと他のプロダクトとの連携を図ることで、LMNtal開発環境の向上が見込める。 JavaとC言語という実装言語の違うプログラムを連携させる方法を調査し、実装してみたい。

SLIMの連携の利点の例(1/3) SLIMとLMNtalコンパイラの連携 SLIMでの対話的実行(インタラクティブモード)の実現

SLIMの連携の利点の例(2/3) SLIMとUNYO-UNYO 3Gの連携 SLIMでの実行過程の可視化 SLIMもJava実行時処理系も基本的には同じLMNtalプログラムを処理するが、他言語インタフェースなど、処理系に依存したプログラムも存在する。 SLIMでしか実行できないLMNtalプログラムでも実行過程が可視化できれば、デバッグやプログラムの理解がはかどる。

SLIMの連携の利点の例(3/3) SLIMとLMNtalEditorの連携 StateViewerの逐次実行の実現 StateViewerはSLIMの実行結果を解析するため、状態空間の大きなプログラムの場合、StateViewerでの表示に非常に時間がかかったり、メモリが足りずにSLIMで正常な出力ができず、StateViewerでは結果を表示できない場合もある。 SLIMの実行中に非決定的実行時の状態を逐次出力し、LMNtalEditorとデータのやり取りが行えれば、StateViewerで途中まで表示することができそう。

JNI(Java Native Interface) Javaから他言語のアプリケーションを呼び出したり、他言語からJavaクラスを呼び出したりするための標準仕様。 C言語からJavaクラスを呼び出すためにはJDKに付属の<jni.h>をインクルードする必要がある C言語からJavaクラスを呼び出すときには、基本的にはJava側の修正は必要ない JNIを導入してC言語からJavaクラスを呼び出しても、Java側の保守性を下げることが少ない SLIMをほかのプロダクトと連携させることに利点があって、LMNtal開発環境が向上しそうだ。 実際にC言語のSLIMとJavaの他のプロダクトを連携する手段をどうするかというところで、 JNI(Java Native Interface)という技術に注目して調査しました。

JNIに関する調査 以下の調査を行った 実際にC言語からJavaクラスを呼び出せるのか 複数のOSで動作するか SLIMの実行環境としてよく用いられているWindows(cygwin)とLinux(Ubuntu)で調査 コンパイル時にどんなオプションが必要か 実行時にどんな環境変数が必要か

JNIのプログラムの実行 C言語からJavaVMを生成し、java.lang.Mathパッケージのpow()メソッドで25を計算し、計算結果のdouble型のデータをC言語で出力するプログラムを作成した。 Windows(cygwin)もLinux(Ubuntu)も同じCソースコードをコンパイルして正しい実行結果が得られた。 JavaVMの生成 Math.pow(2,5); 32.000 結果の出力 C Java

OSによる違い Windows(cygwin) Linux(Ubuntu 8.04) 環境変数 JAVA_HOME JDKのインストールパス PATH %JAVA_HOME%\jre\bin %JAVA_HOME%\jre\bin\client コンパイルオプション gcc -o main.exe -O2 main.c \ -D__int64='long long’ \ -I${JAVA_HOME}/include \ -I${JAVA_HOME}/include/win32 \ -L. -l jvm その他 dlltoolを用いてjvm.dllのインポートライブラリを生成する必要がある 環境変数 JAVA_HOME JDKのインストールパス LD_LIBRARY_PATH ${JAVA_HOME}/jre/lib/i386/client コンパイルオプション 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 同じソースコードを用いてはいるが、環境変数やコンパイルオプションには違いがあります。

目次 LMNtalのプロダクト 卒論に向けて まとめと今後の課題 LMNtalプロダクト間の連携 SLIMの連携の利点の例 JNI(java Native Interface) JNIに関する調査 JNIのプログラムの実行 OSによる違い まとめと今後の課題 今後やること 参考文献

まとめと今後の課題 JNIを用いると、C言語からJavaクラスを呼び出せることが確認できた。 同一のプログラムが複数のプラットフォームで実行できることが確認できた。 今後は実際にSLIMと他のプロダクトを連携するための具体的な実装方法を考える必要がある。 例:SLIMと他のプロダクトの双方にアトムやルールのデータを保持する必要があるのかどうか、そうであればどのように共有するか JNI以外にも実装方法は考えられるかもしれない

今後やること(1/2) まずはどれか1つでも連携機能を実装し、JNIプログラミングのコツをつかみたい SLIMの特徴が活かせる機能連携を優先させたい インタラクティブnd実行 StateViewerの逐次実行など StateViewerの逐次実行 LMNtal Editor プログラムの可視化 SLIM UNYO-UNYO 3G インタラクティブモード LMNtal コンパイラ

今後やること(2/2) SLIMへの多くの変更は避けられない 連携部を中間アプリケーションのような形で独立させたい JNI連携(C→Java)の場合、C言語側でほとんどのプログラムを書く JNI 連携(Java→C)の場合、C言語側はライブラリ化する必要がある 連携部を中間アプリケーションのような形で独立させたい 他のプロダクトの保守性をねるべく下げないような実装が理想 Java LMNtal Editor Application Java JNI UNYO-UNYO 3G SLIM LMNtal コンパイラ Java

参考文献 [1] 乾敦行,工藤晋太郎,原耕司,水野謙,加藤紀夫,上田和紀: “階層グラフ書換えモデルに基づく統合プログラミング言語LMNtal”,コンピュータソフトウェア,Vol.25,No.1,pp.124-150,2008. [2] 石川力, 堀泰祐, 村山敬, 岡部亮, 上田和紀: “軽量なLMNtal 実行時処理系SLIM の設計と実装”,情報処理学会第70 回全国大会,”5-153”-”5-154”,2008. [3] 中野敦: “スケーラブルな可視化機能を備えたLMNtal開発環境の設計と実装”, 早稲田大学大学院理工学研究科,修士論文,2008. [4] 齊藤和佳子: “LMNtal プログラムのカスタマイズ可能な可視化機能の設計と実装”, 早稲田大学理工学部コンピュータ・ネットワーク工学科,卒業論文,2008. [5] 綾野貴之: “システム検証機能を備えたLMNtal 統合開発環境の設計と実装”, 早稲田大学理工学部コンピュータ・ネットワーク工学科,卒業論文,2008. [6] 石川力: “LMNtal からC 言語への変換の設計と実装”,早稲田大学理工学部コンピュータ・ネットワーク工学科,卒業論文,2008. [7] ロブ・ゴードン: “JNI JavaTM Native Interface プログラミングC/C++コードを用いたJava アプリケーション開発”, ピアソン・エデュケーション,1998.