近年,電源が喪失してもデータを保持することが可能な主記憶装置である不揮発性メモリが市場に登場した.この不揮発性メモリをJavaなどのマネージド言語で自然に利用できるようにするために,オブジェクトが自動的に永続化される仕組を持つ永続化ヒープが開発されている.本研究では,予想されるオブジェクト永続化のためのオーバヘッドを調査した.そのために,OpenJDKに不揮発性メモリへのアクセスを伴う処理を実装した.実験の結果,全てのオブジェクトを永続化した場合,最大で510% のオーバヘッドが観測された.
無線センサーアクターネットワーク(WSAN)は,物理環境に配備された複数個の計算機が相互に通信することで,物理環境の観測や環境への働きかけを行う分散システムである.その実現には,センサーノードに加えて環境への働きかけなどを行うアクターノードを含む複雑なノード間協調が必要である.ノード間協調が不十分な場合,センサーやアクターへのメッセージの到達順序が入れ替わり,実行順序が意図しないものになるハザードと呼ばれる問題が発生することがある.アクターノードを含まない無線センサーネットワーク(WSN)については,マクロプログラミングと呼ばれる,WSN全体を1つの計算システムとみなしてその動作を記述する手法がある.マクロプログラミングでは処理に用いるノード間協調を全体の動作から導出する.本研究では,ハザード回避を行う協調動作を導出する機構を取り入れたWSAN向けのマクロプログラミング言語を提案する.
Cプリプロセッサ(以下CPP)はC言語やC++言語などのプログラミング言語においてコンパイル時に前処理を行う字句ベースのマクロ処理系である.CPPマクロを用いることで,C言語などの型変数のないプログラミング言語でもジェネリクスのような型を抽象化したコードを記述することができるようになるなど,マクロを使わなかった場合と比べプログラムが書きやすくなる.
一方で,CPPはC言語などのプログラミング言語の構文に関わりなく字句を置換するため,使い方を誤るとメッセージからは特定が難しいエラーを発生させうる.また,CPPの学習は難解であり,さらに#include以外のプリプロセスディレクティブの学習の優先度はプログラミング言語自体の構文や標準ライブラリ,周辺APIよりも低くなりがちである.構文に関わりなく置換が行われることや学習優先度が低いことなどがおそらく要因となり,CPPは正しく理解して活用されることは少ない.マクロの展開過程を見ることによりマクロ展開の挙動の理解が深まるが,既存のマクロ展開過程の表示に対応したCPPはC99に準拠しており,C++17のような新しい言語規格で追加された機能について学習する際に使うことはできない.
そこで,本論文ではCPPの正しい理解を容易にするため,CPPの対話型評価環境Messerを実装し,その実装の詳細について報告する.Messerはマクロ展開の過程を表示できる,C++17に準拠したCPPの対話型環境であり,文脈を考慮した入力補完機能を持つ.この入力補完機能を実装するために,行編集ライブラリLinseを実装した.また,MesserのCPPや入力補完機能を実装するために,字句列に対して構文解析ができるパーサーコンビネーターであるmatcha2を実装した.
Game loops in the existing source code must be identified prior to updating, adding, or modifying game rules or game objects in games software. This paper proposes a static analysis method predicting game loop candidates with likelihood ranks by focusing on the characteristics of game loops. The proposed method is evaluated with ten publicly available games in Github. For eight of the games, actual game loops were predicted: five had an actual game loop listed at the top of the candidates, while the other three had an actual game loop within the top 11 results.
文字列の検索等に広く用いられる正規表現マッチングはその多くがバックトラックに基づくアルゴリズムで実装されており,対象文字列の長さに対して線形時間でマッチングを完了できない場合がある.これを事前に検知するために,マッチングに要する計算量を静的解析する手法が複数の先行研究によって提案されている.本研究では先行研究を拡張し,先読みや後方参照など,現実のソフトウェアで使用されている拡張された正規表現に対しても解析が行える手法を提案する.さらに,既存の解析アルゴリズムを高速化し,より実用的な速度で解析を行える手法を提案する.そして,これらの改良を施した計算量解析のツールをScalaで実装し,Weidemanらによる既存のツールよりも多くの正規表現が解析できることを実験により確認した.
Androidアプリケーションはイベント駆動型ソフトウェアである.開発者はAndroid API内のコールバックメソッドを継承し内部を記述することでイベントに対する処理を実装する.Android フレームワークから継承したクラスを作成する際に,実装すべきコールバックメソッドを実装し忘れている場合,アプリケーションが予想外の振る舞いをする可能性がある.本研究では,そのような実装漏れメソッドを検出し,開発者に提示する手法を提案する.提案手法では,同じ基底クラスを持つサブクラスの多くに実装されているメソッドや,同時に実装されているメソッドに着目し,既存プロジェクトを解析して得たメソッドの実装頻度と実装の共起関係を基に実装漏れメソッドを検出して,開発者に提示する.提案手法を Android Studio のプラグインとして実装し,既存の Android プロジェクトを対象に評価実験を行った結果,実装漏れメソッドのうちの半数以上を未実装メソッドの上位 15 % 以内に検出し提示できることを確認した.