香川研究室の研究テーマは、主に、
プログラミング言語処理系
プログラミング学習支援システム
です。
以下に卒業研究・修士研究のテーマ例を挙げます。内容はあくまでも例示です。
「コード解析・変換システム」
C, Java, Haskell, JavaScript,
Prolog, Python などが本学部及び大学院の授業・演習
で使用されています。これらのプログラミング言語に対して、例えば、次のようなシステムが考えられます。
C に対しては、printf/scanf・if〜
else文などの制御構造・代入演算子・関数・値渡し・再帰・変数のスコープと記憶域期間
・ビット演算子などの修得が難しい概念の学習を支援する環境が必要です。
language-c-quote (),
CIL ()
などを使って C 言語の解析が必要な学習支援を行います。
Javaに対しては、動的束縛・カプセル化・パッケージ・モジュールなどの概念の学習を支援する環境が必要です。 language-java (), ObjectWeb ASM () などを使って Java 言語の解析が必 要な学習支援を行います。
その他 Python, Ruby, JavaScript, Haskell, Scheme, Clojure, Prolog, Go, Rust, miniKanren () などの言語にもさまざまな方法の学習支援が考えられます。 これらを Parsec (), GHC.Generics () などの Haskell のライブラリーを利用して解析したり、 Emscripten (), TeaVM (), Pyodide () などの基盤を使って Web ブラウザー上で実行したりします。
JavaScript のライブラリーの ThreeJS (), D3.js (), JSAV () などを使って、プログラムの実行の様子の可視化を行います。
「プログラミング言語の設計」
AI によるコーディングのアシストが当たり前になると、それにふさわしいプログラミング言語が必要になると考えられます。
実行前(コンパイル時)にさまざまな良い性質がチェックできることや、
領域特化言語 (DSL) の利用により、
人間にとって簡潔で理解しやすい形式に表現できることなどが重要になると考えられます。
これまでは難易度の高いテーマでしたが、AI をうまく利用できれば卒論で手が届くテーマになっている可能性があります。
プログラミング言語の意味を説明するために設計された教育用言語 Util の改良版など、領域特化言語 (DSL) を設計し、 Parsec などの Haskell のライブラリーで実装します。
Typing Haskell in Haskell などを参考に、Haskell などの型推論の改良・拡張を実装します。
「Web ベースエディター」
Web ブラウザー上で動作する学習支援用の高機能なエディターを作成します。
「プログラミング学習支援統合環境」
上記の可視化システムやエディターなどを組み合わせて提供するときに、ファイルをアップロードしたり、
対話による操作支援をしたり、ログ(学習データ)を収集したり、
何らかの基盤となるサーバー側のシステムが必要です。
Python (Django,
Flask),
Java/Kotlin (Play,
Javaline) などのフレームワークを使います。
将来的に、インテリジェントな学習支援システムにつなげます。また、Electron
などを利用したクライアント側のシステムも必要です。
「教員支援用 Web アプリケーション」
Haskell Wai (),
JupyterLab,
Docker などを使って、
数学や計算機科学の問題の自動生成・一括自動採点など高機能な機能を持つ教員支援用 Web アプリケーションを構築します。
「算数・数学とプログラミング」
小・中・高の算数・数学とプログラミングの学習を結びつけるシステムを設計します。
Python, JavaScript などの言語と Blockly
ベースのプログラミング環境などを利用して、
算数・数学を題材にしたプログラミング学習環境・コンテンツを作ります。
SageMath, STACK
などの数学関係のシステムを利用する可能性があります。
3 年生の間は、アルゴリズムに関する英語の本と、Haskell, JavaScript などプログラミング言語に関する資料を、主に輪読で学習します。
4 年生以降は、自分の研究に関連する文献(主に国際会議の論文)の調査と、 卒業研究・修士研究プロジェクトの進捗報告が中心になります。