現状、プログラミングは専門的な修練を積んだ人による技能となっています。言うなれば、全てが職人による一品物です。これほど情報技術・機器が一般的になった世界で、これで良いのでしょうか? マニュアル通りにやれば誰でもできるような、そういう生産技術があってこそ、プログラミングは本物の「産業」たりえるとは思いませんか?
本研究室では、
誰でもできるプログラミングを目指して、プログラミングの基礎理論、およびその応用について研究しています。
本研究室のアプローチ
本研究室では、プログラミング教育や統合開発環境(IDE)などの改善を目指しません。そのような発想は、服飾産業で言えば針や糸を改善するようなものです。産業化に真に必要なのは「産業機械」、例えばミシンです。スイッチひとつで自動的にほつれ止めも飾り縫いもしてくれて、マニュアルを読めば誰でも操作できる。そういう「産業機械」がプログラミングには圧倒的に不足しています。
プログラミングのための産業機械のために、本研究室では以下の3点を中心に研究を行っています。
-
機械的に作成できるプログラム部品の特定:
ミシンは衣類を完全自動で作ってくれるわけではありません。衣類をデザインし、どこをどう縫うかは人間が決めなければなりません。ミシンが自動化してくれるのは、労力がかかり技術も必要な部分ではありますが、全てではないのです。プログラミングにおいて、このように自動化できる部分はどこかを突き止めなくてはなりません。
-
プログラム部品を機械的に作成する手法の開発:
プログラマが期待するようなプログラム部品が現時点で知られた技術で自動的に作成できるとは限りません。本研究室では特にプログラム変換と呼ばれる技法に注目し、プログラマの期待を実現する新技術の開発に取り組みます。
-
プログラム部品が機械的に作成できることを前提としたプログラミング手法の探求:
ミシンの有無によって衣類作成の方法論は根本的に変わり得ます。ミシンを普及させ役立たせるためには、それをうまく活用する方法もまた必要です。プログラミングの文脈で言えば、これは新しいプログラミング言語や新しいプログラミングのイディオムを作り出すことに対応します。
参考:
森畑による講演動画(2022年)
森畑による講演動画2(2013年)
本研究室所属学生の研究成果
対外発表
- J. Lin, A. Morihata:Automatically fixing data races in CUDA programs by building memory copies. PPL 2023 ポスター発表.
- 松田, 森畑: 配列集約ループの実行時情報を用いた漸増化による効率化. 情報処理学会 第134回プログラミング研究発表会にて発表. 情報処理学会論文誌プログラミング 14(5) に採録. 2021.
修士論文
- 林俊宇:Automatically fix data races in CUDA by building memory copies(2022年度)
- 陶立強:Priority-based Inlining Analysis Order in LLVM(2021年度)
- 原雅典:ビュー更新問題に対するプログラム自動合成の利用:入出力例プログラミングに基づく更新の制御(2021年度)
- 黒田航希:Pythonインタプリタからコンパイラへのステージングによる変換(2020年度)
- 松田知樹:配列集約処理における実行時情報を用いた自動漸増化(2020年度)
卒業論文
- 澁谷彰比呂:再帰的ニューラルエンコーディングによるコードベクター化を用いた初学者プログラミング課題提出物の分類(2022年度)
- 中道晃平:区分関数を効率的に扱うプログラミング言語の開発(2022年度)
- 奥山裕也:単調性判定による貪欲法・動的計画法の自動導出(2016年度、一高賞受賞)
本研究室に向いている人・あまり向いていない人
本研究室には、
現状のプログラミング・プログラミング言語に疑問・不満のある人が向いています。逆に、現状のプログラミングに不満のない人、自由にプログラミングができている人はあまり向いていないかもしれません。
プログラミングの研究をする以上、現状を知るという意味で、プログラミング言語等について一定の知識が必要です。しかし、高いプログラミングスキルや個々のプログラミング言語についての詳しい知識などは、あればそれに越したことはありませんが、必須ではありません。
プログラミングに関する技術をソリッドに組み立てるためには、最終的には数学が必要になります。どの程度の数学が必要かは研究テーマやアプローチによりますが、数学アレルギーの人にはあまりお勧めできません。逆に、数学は好きだが純粋数学よりも数学の応用を探求したい、という人は楽しめる可能性があります。
研究テーマ例とそれに関連する文献
以下に典型的な研究テーマ例を挙げますが、これらに限らず、プログラミング・プログラミング言語にまつわる研究テーマであれば広く扱っています。
プログラムの自動並列化
マルチコア・マルチCPUのコンピュータを活用するためには並列プログラムが不可欠ですが、性能の良い並列プログラムの作成は素人には困難です。本研究室では、並列性を意識せず記述したプログラムを並列プログラムへ変換する「並列化」による解決を試みています。並列化が容易なプログラムや並列化技法を特徴付ける理論の研究から、実際に自動手並列化を行うシステムの開発まで、理論と実践の両面から取り組んでいます。
プログラム変換
プログラム自動合成
プログラム変換では、変換前のプログラムには含まれないプログラムを自動合成することをしばしば求められます。逆に、プログラム合成技術によってプログラム変換の能力が決まると言っても過言ではありません。プログラム変換のさらなる活用のため、本研究ではプログラム合成技術の開発にも取り組んでいます。
宣言的プログラミング
プログラムの変換や自動合成には、処理手順ではなく
目的や意図を記述したプログラム、すすなわち宣言的なプログラムが適します。本研究室では宣言的プログラミングの技法(例えば高階関数や型システム)のプログラム変換・合成への活用や、プログラム変換・合成に適した宣言的言語の設計などを研究しています。
プログラム運算
プログラムの変換や断片的なプログラムの自動生成ができるなら、それに適したプログラミング技法があるはずです。プログラム運算は、方程式を式変型を繰り返してで解くように、プログラムの変換・合成を繰り返してプログラムを構成するプログラミング技法です。ここでは、プログラム変換が方程式における式変型の方針(例えばどの変数を消去するとか、因数分解をするとか)、プログラム生成が変型後の係数等の計算に対応します。これを用いることで、プログラム運算はプログラミングの汎用的な方法(方程式で言えば「ガウスの消去法(掃き出し法)」のような)を与えます。
本研究室は、プログラム運算に関して世界を牽引する研究を行っており、上に挙げた成果も全てプログラム運算の方法論を背景としています。
本研究室で扱うテーマの範囲
本研究室のテーマは原則として「プログラミング」であり「ソフトウェア開発」ではありません。つまり、(往々にして巨大な)ソフトウェアの開発というプロジェクト全体ではなく、ソフトウェアを構成する(往々にしてそれほど大きくない)各部品の開発を扱います。
本研究室は、標準的な(ないしはそれに満たない)技量のプログラマが書くようなプログラムを対象とします。高度な技術をもつ職人が作成するような、本物の「一品もの」の開発は扱いません。例としては、気象予報やスペースシャトル制御のように非常に高い性能と信頼性が必要なもの、富嶽コンピュータのような特別なアーキテクチャに特化したものなどです。
研究室に参加したい方へ
関連研究室
Akimasa Morihata. Aug., 2022