研究室公開

OPEN LABORATORY

先進マルチメディア情報知能システム
情報工学コース

07

次世代のプログラミング言語

未来の情報社会を支える新しいプログラミング技術

大堀・上野研究室

EXHIBIT

オープンキャンパスでの展示

次世代高信頼プログラミング言語SML#

コンピュータシステムを使いこなすためには、コンピュータにも解釈できる言葉である「プログラミング言語」で私たちの意図を書き表す必要があります。しかし、この作業はとても複雑で簡単にはできません。私たちの意図をもっと簡単に表現できるプログラミング言語があれば、私たちはもっとうまくコンピュータを使いこなせるようになるはずです。この展示では、プログラムと論理学の関係などを基礎として本研究室で開発している新しいプログラミング言語SML#を紹介します。

スマホアプリが研究室をナビゲート

SmartCampusへ

実世界とシームレスに繋がる実用的な型付き関数型言語

今日注目を集めつつある関数型言語は、少ない行数で多くのことを表現できる記述力や、実行前にプログラムを検証できる安全性など、長年のプログラミング言語理論研究に基づく様々な良い性質を持っています。その一方で、関数型言語の実用化技術は十分に成熟しておらず、関数型言語はいまだ産業的ソフトウェア開発で選ばれるプログラミング言語にはなり得ていません。当研究室では、オペレーティングシステムやデータベースとのシームレスな連携など、実用ソフトウェアに必須の機能を関数型言語で実現するための基礎理論やコンパイルアルゴリズムの研究に取り組んでいます。この研究成果によって、SML#は以下のような先進機能を実現しています。

  • Standard MLと上位互換.
  • 多層レコードやランク1多相などの柔軟な型システム.
  • C言語との高度かつシームレスな相互運用性.
  • システム標準のリンカでCライブラリとリンク可能な分割コンパイルシステム.
  • 関係データベース問い合わせ言語SQLのシームレスな統合.
  • オペレーティングシステムが提供するマルチスレッド機能の直接サポート.
  • 高機能プリンタ生成ツールなどの開発支援ツール.
SML#コンパイラは、SML#プロジェクトのWebサイトでオープンソースソフトウェアとして公開されています。

部分動的レコードとしてJSONを使いこなす型付き操作体系

今日のWebアプリケーションは、JSON (JavaScript Object Notation) と呼ばれるデータ表現を用いてデータを文字列化することで、アプリケーション間やサーバー/クライアント間で通信と連携を行っています。このJSON形式のデータをプログラムで取り扱うのは容易ではありません。その理由のひとつは、JSONの解析と構築のために多量の文字列処理が必要となりプログラミングが大変になることです。もうひとつのより深刻な理由は、JSONは本質的に型が付かないデータ構造であり、従ってJSONデータを読み書きするプログラムに型をつけることができず、ソフトウェアの正しさを確認することが難しくなることです。

本研究室では、部分動的レコードの考え方に基づき、JSONを「部分的に型付けられたレコード」として扱うことを提案しました。さらに、JSONを含む型付きの計算系を構築し、関数型言語から型安全にJSONを操作する新しい操作体系としてまとめました。この方式により、異なるフィールドを持つJSONオブジェクトの配列を、それらの共通フィールドからなる部分動的レコード型のリストとして取り扱うことができます。型に現れないフィールドにアクセスするときは、動的型チェックを伴うパターンマッチによって型情報を回復します。これらの機能によって、全ての型情報を失うことなく、JSONを型付きで操作することが可能になりました。

関数型言語による真のマルチコアプログラミングを実現するメモリ管理技術

今日では、単独のプロセッサによる逐次的な計算性能よりも、複数のプロセッサコアが並行して動作する並列的な計算性能が注目されるようになりました。スマートフォンやゲーム機などを含む多くのコンピュータには、「マルチコア」と呼ばれる、複数のプロセッサコアからなるCPUが搭載されています。このマルチコアCPUを如何に使いこなすかが、今後のソフトウェアの性能を握る鍵となります。

このマルチコアCPUと関数型言語を組み合わせるとき、関数型言語には性能上の問題となるいくつかの課題があります。そのうちのひとつが、メモリ管理方式です。関数型言語を用いたプログラミングでは、一般に、メモリの使い方を意識することはありません。メモリの確保と解放は「ガーベジコレクション」と呼ばれるアルゴリズムによって自動的に行われます。一方、メモリは複数のコアで共有される資源です。メモリ管理の方針によっては、複数のコアが並行に動作することを妨げてしまい、マルチコアCPUは本来の性能を発揮できなくなります。

本研究室では、関数型言語でマルチコアCPUを使いこなすための新しいガーベジコレクションアルゴリズムを開発しました。この方式では、メモリを要求するスレッドとメモリを回収するスレッドが非同期に通信しながら、ある時点で回収可能なメモリの集合のスナップショットを確定することで、プログラムの実行を止めることなくメモリ管理を行います。この方式により、関数型言語においても、ユーザープログラムからネイティブスレッドを直接制御しマルチコアCPUで期待される並列性能を実現できることが、世界で初めて確認されました。