私たちは、あらゆるところにある情報機器と、それを支える情報技術の恩恵を受けて暮らしています。しかし、それを駆動するためのプログラムの作成は、専門的な修練を積んだ人による手作業に頼っています。プログラミングが本物の「産業」として成り立つためには、マニュアル通りにやれば誰でもできるような生産技術が必要です。
本研究室では、
誰でもできるプログラミングを目指して、プログラミングの基礎理論、およびその応用について研究しています。
本研究室のアプローチ
産業革命を支えたのは、紡績機の発明・改善でした。機械化によって生産性が飛躍的に向上し、熟練の職人でなくても作業できるようになりました。プログラミングにも、このような産業機械、またそれの基盤となる機構が必要です。これを目指し、本研究室では以下の3点を中心に研究を行っています。
-
機械的に作成できるプログラム部品の特定:
紡績機は衣類を完全自動で作ってくれるわけではありません。衣類をデザインし、どこをどう縫うかは人間が決めなければなりません。紡績機が自動化してくれるのは、人手では労力がかかる部分ではありますが、全てではないのです。プログラミングにおいて、このように自動化できる部分はどこかを突き止めなくてはなりません。
-
プログラム部品を機械的に作成する手法の開発:
プログラマが期待するようなプログラム部品が現時点で知られた技術で自動的に作成できるとは限りません。本研究室では特にプログラム変換と呼ばれる技法に注目し、プログラマの期待を実現する新技術の開発に取り組みます。
-
プログラム部品が機械的に作成できることを前提としたプログラミング手法の探求:
紡績機の発明によって、関連する産業全体が連鎖的に変わってゆきました。産業機械を普及させ役立たせるためには、それをうまく活用する方法もまた必要になるのです。プログラミングの文脈で言えば、これは新しいプログラミング言語や新しいプログラミングのイディオムを作り出すことに対応します。
本研究室の目標は
あなたのプログラミング技術を高めることではないことに注意してください。むしろ、
プログラミング技術が低くてもプログラムを作れるようになる・プログラミングのメリットを享受できるようになるような状況を目指しています。
参考:
森畑による講演動画(2022年)
森畑による古い講演動画(2013年)
よくある質問
統合開発環境(IDE)やフレームワーク(例えばNoCode)の研究ですか?
少し違います。本研究室の主なターゲットはコーディング(プログラムを文字で書き下すこと)ではなくプログラミング(所望の機能を実現するプログラムの構造を特定すること)です。コーディングの改善は、現状行われている作業の効率化・自動化することです。しかし、多くの場合、産業機械は手作業の延長線上にはありません。シャトルや糸車の改善ではなく、新しい紡績機構から産業機械は生まれます。しかも、産業機械を前提にすると、人間の行う作業は根本的に変わってしまいます。
プログラミングでも同様のことがあるはずです。プログラミングの変化はコーディングの改善の延長線上にはなく、しかもプログラミングが変わればコーディングも変わるでしょう。この発想に基づき、本研究室は、今目の前にあるプログラミング・コーディングの課題を解決するよりも、将来的に大きなインパクトをもたらしうる成果を目指しています。
大規模言語モデルによる自動プログラミングについてはどう考えますか?
動向を注視しています。が。現時点では、プログラミング研究の専門家の目から見ると不十分に見えます。まず、それっぽいプログラムの作成は得意ですが、論理的な正確さはまだ怪しいところがあります。その結果、「一見正しそうだが、よくよく見ると想像もしないようなところが間違っている」という、困ったプログラムがしばしば得られます。また、データの学習に基づくため、よく使われている言語の定型的なプログラムには強いのですが、比較的マイナーな言語や、ちょっと変わったプログラムは苦手です。これは「目的ごとに特化したプログラミング言語を使うことで、簡潔でわかりやすいプログラムにしよう」という現代の流れには逆行しています。端的に言えば、大規模言語モデルはコーディングの労力を軽減する手法としては非常に優れていますが、本研究で目指すようなプログラミングの根本的な改善にはまだ遠いという印象です。このような欠点を補完するような方法を模索しています。
ソフトウェア開発の研究もしていますか?
本研究室の中心的なテーマは「プログラミング」です。つまり、(往々にして巨大な)ソフトウェアの開発というプロジェクト全体についての研究よりは、ソフトウェアを構成する(往々にしてそれほど大きくない)各部品の開発を主に扱っています。連携して研究を行っている
中丸智貴助教の研究テーマも参考にしてください。
所属学生の研究成果
対外発表
- J. Lin, A. Morihata:Synthesizing accumulative functions via program transformation. TFP 2025, 2025年1月.
- 中道, 中丸, 森畑:Fluent API におけるプログラム断片のより柔軟な結合, 日本ソフトウェア科学会第41回大会, 2024年9月.
- J. Lin, A. Morihata:Synthesizing accumulative functions via program transformation. PPL 2024.
- 中道, 中丸, 森畑:演算子オーバーロードを利用したfluent APIとその型付け. PPL 2024 ポスター発表, 2024年3月.
- 岩田, 森畑, 中丸:プログラマーがコード補完を中断する理由の調査 . PPL 2024 ポスター発表, 2024年3月.
- J. Lin, A. Morihata:Automatically fixing data races in CUDA programs by building thread-local cache. 情報処理学会 第145回プログラミング研究会. 2023年8月.
- J. Lin, A. Morihata:Automatically fixing data races in CUDA programs by building memory copies. PPL 2023 ポスター発表, 2023年3月.
- 松田, 森畑: 配列集約ループの実行時情報を用いた漸増化による効率化. 情報処理学会 第134回プログラミング研究発表会にて発表. 情報処理学会論文誌プログラミング 14(5) に採録. 2021年.
修士論文
- 庄偉毅:Automatically Generate Patches to Repair Ownership Type Errors in Rust Programs(2023年度, 広域科学専攻奨励賞受賞)
- 林俊宇:Automatically fix data races in CUDA by building memory copies(2022年度)
- 陶立強:Priority-based Inlining Analysis Order in LLVM(2021年度)
- 原雅典:ビュー更新問題に対するプログラム自動合成の利用:入出力例プログラミングに基づく更新の制御(2021年度)
- 黒田航希:Pythonインタプリタからコンパイラへのステージングによる変換(2020年度)
- 松田知樹:配列集約処理における実行時情報を用いた自動漸増化(2020年度)
卒業論文
- 岩田 風多:プログラマーがコード補完を中断する理由の調査(2023年度)
- 長谷川 慧:意味的スケジューラを用いた関係的検証ツールの性能調査(2023年度)
- 澁谷彰比呂:再帰的ニューラルエンコーディングによるコードベクター化を用いた初学者プログラミング課題提出物の分類(2022年度)
- 中道晃平:区分関数を効率的に扱うプログラミング言語の開発(2022年度)
- 奥山裕也:単調性判定による貪欲法・動的計画法の自動導出(2016年度, 一高賞受賞)
本研究室に向いている人・あまり向いていない人
本研究室には、
現状のプログラミング・プログラミング言語に疑問・不満のある人が向いています。逆に、現状のプログラミングに不満のない人、自由にプログラミングができている人はあまり向いていないかもしれません。
プログラミングの研究をする以上、現状を知るという意味で、プログラミング言語等について一定の知識が必要です。しかし、高いプログラミングスキルや個々のプログラミング言語についての詳しい知識などは、あればそれに越したことはありませんが、必須ではありません。
プログラミングに関する技術をソリッドに組み立てるためには、最終的には数学が必要になります。どの程度の数学が必要かは研究テーマやアプローチによりますが、数学アレルギーの人にはあまりお勧めできません。逆に、数学は好きだが純粋数学よりも数学の応用を探求したい、という人は楽しめる可能性があります。
研究テーマ例とそれに関連する文献
以下に典型的な研究テーマ例を挙げますが、これらに限らず、プログラミング・プログラミング言語にまつわる研究テーマであれば広く扱っています。
プログラムの自動並列化
マルチコア・マルチCPUのコンピュータを活用するためには並列プログラムが不可欠ですが、性能の良い並列プログラムの作成は素人には困難です。本研究室では、並列性を意識せず記述したプログラムを並列プログラムへ変換する「並列化」による解決を試みています。並列化が容易なプログラムや並列化技法を特徴付ける理論の研究から、実際に自動手並列化を行うシステムの開発まで、理論と実践の両面から取り組んでいます。
プログラム変換
プログラム自動合成
プログラム変換では、変換前のプログラムには含まれないプログラムを作成することをしばしば求められます。プログラム自動合成技術によってプログラム変換の能力が決まるとすら言えます。プログラム変換のさらなる活用のため、本研究室ではプログラム自動合成技術の開発にも取り組んでいます。
宣言的プログラミング
プログラムの変換や自動合成には、処理手順ではなく
目的や意図を記述したプログラム、すすなわち宣言的なプログラムが適します。本研究室では宣言的プログラミングの技法(例えば高階関数や型システム)のプログラム変換・合成への活用や、プログラム変換・合成に適した宣言的言語の設計などを研究しています。
プログラム運算
プログラムの変換や自動合成ができるなら、それに適したプログラミング技法があるはずです。プログラム運算は、方程式を式変型を繰り返して解くように、プログラムの変換・合成を繰り返してプログラムを構成する技法です。ここでは、プログラム変換が方程式における式変型の方針(例えばどの変数を消去するとか、因数分解をするとか)、プログラム合成が変型後の係数等の計算に対応します。これを用いることで、プログラム運算はプログラミングの汎用的な方法(方程式で言えば「ガウスの消去法(掃き出し法)」のようなもの)を与えます。
本研究室は、プログラム運算に関して世界を牽引する研究を行っており、上に挙げた成果も全てプログラム運算の方法論を背景としています。
研究室に参加したい方へ
関連研究室・研究者
Akimasa Morihata, 2024