プログラミング言語研究室(鵜川研)配属情報

鵜川のホームページに戻る

見学と説明会

プログラミング言語研究室について

プログラミング言語研究室では, プログラミングやプログラミング言語に関連する研究を行っています. JavaScriptのプログラムを実行するための処理系を開発したり, プログラムが正しいかどうかをプログラムを実行せずに調べる方法を研究したり, プログラムを安全に実行する仮想環境を開発したりしています.

よくある誤解ですが,プログラムを作ること自体は研究の目的ではありません. 情報学群の他の研究室と同じように,実験の一環としてアイデアを実現するプログラムを開発します. とはいえ,研究対象であるプログラムについてもある程度の知識は必要です. 特にプログラミング言語の理論を勉強します. これはプログラミング言語の研究だけでなく,良いプログラムを作ることにも役立ちます.

プログラムの仕組みを学びたい方,良いプログラムを書けるようになりたい方,計算機システムに興味がある方におすすめです.ボードゲームが好きであればなお良いです.

プログラミング研究室はA棟3の北の端,A361にあります. 近くまで寄らないと明かりがついていることも分かりません. 階段付近からは休業中のように見えても遊びに来てください.

配属情報

情報通信専攻とコンピュータサイエンス専攻を受け入れます.

配属には鵜川と面談してサインをもらう必要があります.

面談可能な日は以下の通りです.

面談には予約が必要です. 前日までに鵜川の教員室(A417)前に貼ってある予約表に学籍番号と名前を記入してください.面談は予約した時間にA417にお越しください.A417にいなかったら申し訳ありませんがA361に行ってみてください.

どんな研究ができるのか

プログラムを相手にした研究をしています.究極の目標は,安心して使える高性能なソフトウェアを簡単に早く作れるようにすることです.(安心して使える高性能なソフトウェアを簡単に早く作れるようになることではありません念のため.) つまり,信頼性の高い(バグの少ない)プログラムを作る手法の開発や,プログラミングを簡単にする言語やツール,ライブラリなどの開発,ソフトウェアを効率よく実行できるようにするプログラミング言語処理系の開発を行っています. その他にも,オペレーティングシステムやソフトウェア開発などの研究も可能です.

いくつ研究テーマの例を紹介します. 研究室のホームページの研究紹介にも詳しい説明があります.

組込みシステム向けJavaScript実行系

JavaScriptは,最初はウェブページにちょっとした動きを加えるための言語でした.しかし,ちょっとした動きに留まらず,gmailなどに代表されるような,本格的なソフトウェアも記述する能力も供えています.しかも,ウェブページの記述に使うので多くの人が使うことができ,プログラムのことは分からないけどJavaScriptなら書けるという人もたくさんいます.ウェブページ以外のプログラミングにもJavaScriptが使えれば,多くの人が自分のアイデアを形にでき,世の中を便利にしてくれるかもしれません.

JavaScriptを実行するには,JavaScriptの実行系が必要です.組込みシステムをJavaScriptで制御できるよに,組込みシステム向けのJavaScript処理系を開発します.組込みシステムは通常のパソコンと比べて性能が低く,さらに,リアルタイムの動作が必要であったり,消費電力を抑える必要があったりと制限がある場合があります.

しかし,組込みシステムでは,どんなプログラムを実行するかわからないブラウザと比べると,実行するプログラムがあらかじめ分かっているという特徴があります.そこで,オーダメイドのカスタマイズされたJavaScript処理系を,実行するプログラムに合わせて自動的に生成します.これによってコンパクトで高速なJavaScript処理系を実現します.

この研究では,JavaScriptのプログラムを実行するソフトウェア(JavaScript処理系)を生成するソフトウェアを作るのです.

このテーマでの学生の対外発表

このテーマで学生が第一著者の論文:

新しいハードウェアを使うためのプログラミング言語拡張

新しいハードウェアは色々と開発されています.例えば,マルチコアCPUやGPGPUも,かつては「新しいハードウェア」でした.新しいハードウェアが開発されると,それを利用するためのプログラミング言語の整備も必要になります.

本研究室では,「不揮発性メモリ」という新しいハードウェアに注目しています.その名の通り電源を切ってもデータが消えないメモリです.これを使えば,計算機の終了前後にデータをディスクに保存したり読み出したりする必要がありません.計算機を再起動した時に,前回の実行でプログラムで扱っていたデータ構造がそのまま残っています.ただし,話はそう簡単ではありません.不揮発性メモリへの書込みはキャッシュメモリを介して行われ,キャッシュメモリで留まっているデータは電源を切ると消えてしまいます.そのため,ソフトウェアが適切にキャッシュ中のデータを強制的に不揮発性メモリに書き出す命令を実行する必要があります.プログラマがこのようなことを考えてプログラミングすると手間がかかり,プログラムも煩雑になります.この研究では,プログラマがキャッシュメモリの存在を感じずに,自然なプログラミングで不揮発性メモリの恩恵を受けられるようにプログラミング言語を拡張しています.

このテーマでの学生の対外発表:

ガベージコレクション

鵜川の狭い意味での専門はガベージコレクションです.C言語やアセンブリ言語では,実行中に作られるデータを保存しておくためのメモリの領域はプログラマが管理する必要があります.しかしJavaやC#,JavaScriptなどの最近のプログラミング言語では,メモリはプログラミング言語が自動的に管理します.この機能がガベージコレクションです.ガベージコレクションはプログラマには便利ですが,プログラムの実行が遅くなったり,反応が悪くなったり,スマートフォンのアプリではバッテリを消費する原因にもなります.うまくメモリを管理する方法を考えて,それを組み込んだシステムを作り,目論み通りに性能が良くなっているか実験します.

この分野で世界的に有名なイギリス,ケント大学のRichard Jonesのグループと一緒に,最先端のガベージコレクションの手法を研究をしています.

このテーマでの学生の対外発表:

このテーマでの学生の受賞:

バグ発見

プログラムに間違い(バグ)があると,場合によっては誤動作します.その結果,ソフトウェアの脆弱性になったり,経済的な損失につながったり,時として人命が奪われることもあります.バグの厄介なのは,「場合によっては」誤動作するところです.テストではうまく動作していたのに,本番で誤動作してしまったという経験はありませんか?通用は,想定されるあらゆる入力に対する動作をテストすることはできませんので,テストしていない入力で誤動作する可能性は残ります.

プログラムを実行して動作を確認するのではなく,ソースコードを解析してバグを探せば,テストをすり抜けてバグが残るということはありません.ソースコードを解析して,バグのようなパターンを探すためのツールを作ったり,使ったりします.

このテーマでの学生の対外発表:

このテーマで学生が第一著者の論文:

このテーマでの学生の受賞:

ソフトウェアの検証

ソフトウェアの仕様やプログラムの一部を専用の記法(言語)で記述し,計算機を使って自動的にバグを探す,「モデル検査」という方法を研究しています.専用の言語で記述したプログラムは自動的にオートマトンなどの数学的なモデルに変換され,そのモデル上で起こりうることを計算機の力を使って網羅的に探します.探索には膨大な計算が必要になるので他大学のスーパーコンピュータを借りることもあります.(最近,メモリを1TB搭載した計算機が導入されました!)

本研究室ではモデル検査のための言語のライブラリの開発や,それを使ったアルゴリズムの検証をしています.論文で出版されているアルゴリズムを検査しても,意外とバグが見つかるものです.

このテーマで学生の対外発表

このテーマで学生が第一著者の論文:

このテーマでの学生の受賞:

ドメイン特化言語

特定の目的に特化したプログラミング言語をドメイン特化言語と言います.例えば,JavaScriptも(今となっては汎用言語ですが),ウェブページに動きを加えるためのドメイン特化言語でした.他にも,データベースからデータを検索するためのSQL,CGIを用いたウェブページを作るためのPHP,広くはExcelなどの表計算ソフトのセルに記入する式などもドメイン特化言語です.ドメイン特化言語は,目的としている用途に特化しているため,その目的に限っては非常に使いやすくなっており,汎用言語と比べて簡潔な記述ができます.

ドメイン特化言語の開発自体が研究の目的となることもありますが,他の目的のためにドメイン特化言語を手段として使うことが多いです.本研究室では,簡単な記述でAndroidアプリを作れるドメイン特化言語「くだま」や,JavaScriptのインタプリタの仕様を記述するためのドメイン特化言語を開発しています.JavaScriptのインタプリタの仕様を記述するドメイン特化言語は,カスタマイズされたJavaScript処理系を作る研究の中で使っています.

このテーマでの学生の対外発表:

連絡先

鵜川は居室(A417)か研究室(A361)にいることが多いです.
メール:ugawa.tomoharu@kochi-tech.ac.jp