東京大学 プログラミング言語 研究室 (千葉滋 研究室)
       - 千葉滋研究室の紹介
      

English

# 千葉滋研究室の紹介

当研究室は基盤的なコンピュータ・ソフトウェアの研究室です。
プログラミングにかかわる様々な研究を展開しています。
一般的な分類でいえば、当研究室はプログラミング言語の研究室、あるいはソフトウェア工学の研究室、ということになります。
プログラミング全般に通じた専門家・研究者を育てて社会に送り出すことがミッションです。

### プログラミングの研究とは？

保守性や拡張性に優れたプログラムを書くためのプログラミング言語、ツール、そしてライブラリやフレームワーク、に興味をもつ方のための研究室が当研究室です。

少しでも長いプログラムを書いたことがあれば、そういったことの大切さ、面白さはわかってもらえるかと思います。
何をしているか見通しのよいプログラム、冗長でないプログラム、構造化されていて改造しやすいプログラムを書く技術を研究したい方をお待ちしています。

修士課程学生の研究テーマの例はこちらの論文のページを見てください。
最近では多くの学生がプログラミングを支援する様々な開発ツールの研究を選んでいます。
博士課程の研究テーマの例については査読付き論文のページを見てください。

### 作品としてのソフトウェア

当研究室の研究は、プログラミングの役に立つ様々なソフトウェアを生み出すことです。
したがって、ほとんどの所属学生は、何かしらのソフトウェアを作品として作っています。
新しいアイデアに基づいてソフトウェアを作り、それについて論文を書くのが研究室の活動です。
具体的には主に次のようなテーマでソフトウェアを作ります。

### プログラミング言語

我々はプログラミング作業を助ける様々な開発ツール（ソフトウェア）の研究開発をしています。
例えば、手で書くには複雑すぎるプログラムや、量が多く人手で書くには現実的でないプログラムを機械的に自動合成する手法の研究をしてきました。
これによってプログラミングを部分的に自動化し、全体の作業の軽減をはかる開発ツールを生み出してきました。
またプログラムの誤りを発見を支援するデバッグ・ツールの研究も、そのような開発ツールの研究の一例です。

プログラミング言語研究らしい研究テーマといえるのは、様々なプログラミング言語に共通して使われる新しい言語機構を考案することです。
言語機構とは、プログラミング言語を構成する様々な機能や概念のことです。
if 文のような制御構文、クラスやオブジェクト、継承機構、例外、ラムダ式、マクロ、モナドの do 記法、型推論など、何でも言語機構です。
研究では新しい言語機構を組み込んだ新言語（あるいは既存言語の拡張版）を開発することになります。

また言語処理系の開発も研究テーマのひとつです。
コンパイラや仮想マシン（インタプリタ）の高速化や機能拡張をおこなってきました。
ガベージコレクタや並列化のためのスレッド管理機構なども研究テーマです。

なお研究対象となるプログラミング言語は研究テーマごとに選びます。
学生が自分の好きな言語を研究のために選ぶこともしばしばです。

### IoT デバイス（マイコン）

身の回りの小さな電子機器やロボットを動かしているのはマイコンです。
このようなマイコンは、ごく小さなコンピュータでメモリも少なく小さな消費電力で動くため、プログラミングは必ずしも容易ではありません。
そのようなマイコンでも高度なプログラミングができるような開発環境の研究もおこなっています。

### 機械学習によるソフトウェア工学

機械学習技術はここ数年大きく進歩しました。
当研究室では、機械学習を応用してプログラミングを支援する技術の研究も進めています。
機械学習分野の中でも自然言語処理に用いられる手法を活用して、プログラムを分析し、開発者に有用な情報を引き出そうとしています。
例えば、異なる言語で書かれたプログラムを見比べて、同じようなことをしているコードを抜き出してリファクタリングの役に立てる研究をしています。
また機械学習によって、既存のプログラムを分析してコーデイングスタイルを抽出する研究、コード補完の精度を改善する研究などもしています。

### ライブラリやフレームワーク

昨今のソフトウェアは様々なライブラリやフレームワークを利用して開発されます。
プログラミングを支援する、そのようなソフトウェアの研究開発もしています。
機械学習や科学技術計算、セキュリティ、ロボット制御といった特定のアプリケーション分野に向けて研究開発することもありますが、並列処理や分散処理一般を支援するライブラリやフレームワークの研究開発もしています。
並列処理なら SIMD や GPU、分散処理ならクラウドやスーパーコンピュータの利用を支援します。
そういったライブラリやフレームワーク自体の開発を助ける、メタなフレームワークやライブラリの研究開発もおこなっています。

ある種のライブラリやフレームワークは、カーネルモードや独立したプロセスとして動きます。
そのようなものはオペレーティングシステム (OS)
あるいはミドルウェアとも呼ばれます。
我々はそのような OS やミドルウェアの研究もしていました。

例えば機械学習のプログラムを書くときは、PyTorch のような機械学習用のフレームワークやライブラリを使って書くのが普通です。
そのようなフレームワークやライブラリはプログラムを書く労力を大きく削減します。
より高機能なフレームワークやライブラリを開発して、プログラムを書き易くするのが、このような研究の目的です。

### 言語、それともライブラリ？

プログラミング言語の研究とライブラリやフレームワークの研究の境界は実はあいまいです。
機械学習のために様々なフレームワークが Python 用に作られていますが、それは機械学習専用の新しいプログラミング言語を作るより、フレームワークを作る方がずっと簡単だからです。
その一方でフレームワークは、不自然なプログラムの書き方（作法、プロトコル）を利用者のプログラマに強いがちです。

しかしプログラミング言語の最新の言語機構を用いると、まるで専用言語のような自然な使い勝手を実現するフレームワークやライブラリが作れるようになってきました。
そのようなフレームワークやライブラリを埋め込み領域特化言語
(embedded domain-specific language, embedded DSL, EDSL) といいます。
Python のようなホスト言語にライブラリとして「埋め込まれて」いるので、この名があります。
我々はこの、言語風のプログラミング・インタフェースをもつライブラリといえる EDSL は、次世代の中心となるライブラリであると考え、様々な研究をおこなっています。
EDSL を作成するための開発支援ツールや、EDSL を作りやすい機能を備えた汎用プログラミング言語の研究をおこなっています。

### 大学院受験予定の方へ

上記のような研究に関心のある方を当研究室は歓迎します。
プログラミングの技術は高いにこしたことはありませんが、そうでなくともプログラミングが好きな人であれば、現状、問題なくやっていけています。
具体的な研究テーマは実際に所属してから学生さんの興味を聞きながら決めるようにしています。
研究室に所属したら研究室で進行中のプロジェクトに半ば強制的に加えられる、ということはありません。

より具体的な研究内容について知りたい方は、論文のページを見たり、創造情報学専攻の説明会に参加ください。
また研究室見学・相談は随時受け付けていますので、メールでご連絡下さい。
なお、受験に関する情報や資料については、当専攻の Web ページをご覧下さい。
入試問題についての質問や勉強方法などについてはお答えしかねます。