香川研究室の研究テーマは、主に、
プログラミング言語処理系
プログラミング学習支援システム
です。
以下に卒業研究・修士研究のテーマ例を挙げます。内容はあくまでも例示です。
「コード解析・変換システム」
C, Java, Oolong, Bison, Flex, Haskell, Scheme,
Prolog, PHP, Python などが本学部及び大学院の授業・演習
で使用されています。これらのプログラミング言語に対して、例えば、次のようなシステムが考えられます。
C に対しては、printf
/scanf
・if〜
else文などの制御構造・代入演算子・関数・値渡し・再帰・変数のスコープと記憶域期間
・ビット演算子などの修得が難しい概念の学習を支援する環境が必要です。
language-c-quote (),
CIL ()
などを使って C 言語の解析が必要な学習支援を行います。
Javaに対しては、動的束縛・カプセル化・パッケージ・モジュールなどの概念の学習を支援する環境が必要です。 language-java (), ObjectWeb ASM () などを使って Java 言語の解析が必 要な学習支援を行います。
JavaScript や WebAssembly などの言語、あるいは Haskell の JavaScript バックエンド () など、 あるいは tree-sitter () などのパーサージェネレーターを利用して、 コンパイラーやオートマトンに対する学習支援環境を作成します。
その他 Python, Ruby, JavaScript, Haskell, Scheme, Clojure, Prolog, Go, Rust, miniKanren () などの言語にもさまざまな方法の学習支援が考えられます。 これらを Parsec (), GHC.Generics () などの Haskell のライブラリーを利用して解析したり、 Emscripten (), TeaVM (), Pyodide () などの基盤を使って Web ブラウザー上で実行したりします。
JavaScript のライブラリーの ThreeJS (), D3.js (), JSAV () などを使って、プログラムの実行の様子の可視化を行います。
「プログラミング言語の設計」
プログラミング言語の意味を説明するために設計された教育用言語
Util
の改良版など、領域特化言語 (DSL) を設計し、
Parsec などの Haskell のライブラリーで実装します。
「Haskell の型システムの拡張」
Typing Haskell in 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 年生以降は、自分の研究に関連する文献(主に国際会議の論文)の調査と、 卒業研究・修士研究プロジェクトの進捗報告が中心になります。