渡部研究室 - 東京工業大学 · 関数リアクティブプログラミング functional...

11
渡部研究室 Programming Systems Group psg.c.titech.ac.jp 主な研究テーマ プログラミング言語 形式手法 組込みシステムとCPS 教員 渡部卓雄(教授) プログラミング言語の設計と実装,メタプログラミングとリフレクション, アクターモデルと並行オブジェクト,関数プログラミング 森口草介(助教) ソフトウェアおよび各種システムの形式的記述と検証,定理証明支援系, プログラミング言語の意味論,抽象議論フレームワーク 最近の研究 組込みシステムとCPSのための 関数リアクティブプログラミング言語 形式手法関連

Upload: others

Post on 30-Sep-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 渡部研究室 - 東京工業大学 · 関数リアクティブプログラミング Functional Reactive Programming (FRP) •関数プログラミングの考え方にもとづいて,リアクティブシステムの記述を支

渡部研究室Programming Systems Group

psg.c.titech.ac.jp

主な研究テーマ • プログラミング言語 • 形式手法 • 組込みシステムとCPS

教員 渡部卓雄(教授) プログラミング言語の設計と実装,メタプログラミングとリフレクション,アクターモデルと並行オブジェクト,関数プログラミング

森口草介(助教) ソフトウェアおよび各種システムの形式的記述と検証,定理証明支援系, プログラミング言語の意味論,抽象議論フレームワーク

最近の研究 • 組込みシステムとCPSのための 関数リアクティブプログラミング言語 • 形式手法関連

Page 2: 渡部研究室 - 東京工業大学 · 関数リアクティブプログラミング Functional Reactive Programming (FRP) •関数プログラミングの考え方にもとづいて,リアクティブシステムの記述を支

プログラミング言語の研究• 言語や言語機構のもつ性質の理解(意味論,型システム,etc.) • プログラムの検証,プログラムの解析 • 言語設計,実装技術 • 新しい言語や言語機構の提案 • プログラムの開発効率の向上(評価は難しい) • プログラムがある特定の性質をもつことを保証(例:メモリ安全性) • 実装技術の向上 • 速度の向上,省メモリ化 • 低消費電力化

Page 3: 渡部研究室 - 東京工業大学 · 関数リアクティブプログラミング Functional Reactive Programming (FRP) •関数プログラミングの考え方にもとづいて,リアクティブシステムの記述を支

関数リアクティブプログラミングFunctional Reactive Programming (FRP)

• 関数プログラミングの考え方にもとづいて,リアクティブシステムの記述を支援するプログラミングパラダイム • リアクティブシステム:外界から連続的・非連続的に与えられる入力に反応し続けるシステムのこと.入力のタイミングや順番は予測できない.

• 例:GUI,組込みシステム,サイバーフィジカルシステム(CPS) • 対義語:変換的(transformational)システム.有限な入力に対して答を出力して停止する(古典的な計算モデルにもとづく)システム.

• FRP言語の例:Fran [Elliot '97], Yampa [Hudak '03], Elm [Czaplicki, '12], etc.

• ポイント:時間とともに変化する値を時変値(Time-Varying Value)として表現し,その上の計算としてリアクティブな動作を記述する.

Page 4: 渡部研究室 - 東京工業大学 · 関数リアクティブプログラミング Functional Reactive Programming (FRP) •関数プログラミングの考え方にもとづいて,リアクティブシステムの記述を支

従来の言語を使った リアクティブシステムの記述例

Sensor tmp(TEMP_SENSOR); Sensor hmd(HUMID_SENSOR); GPIO fan(FAN_SWITCH);

while (true) { float t = tmp.read(); float h = hmd.read(); float di = 0.81 * t + 0.01 * h * (0.99 * t - 14.3) + 46.3; fan.write(di >= 75.0); }

ポーリング

入力→計算→出力の繰返し.反応速度は遅い入力に依存する.複雑な動作の記述には向かない.

例題:温度・湿度センサの値から不快指数を求め,その値が75以上の時にファンを回す.

コールバックSensor tmp(TEMP_SENSOR); Sensor hmd(HUMID_SENSOR); GPIO fan(FAN_SWITCH); float t, h; bool fan_state = false;

tmp.onChanged(lambda(float v) { t = v; changeState(); });

hmd.onChanged(lambda(float v) { h = v; changeState(); });

synchronized void changeState() { float di = 0.81 * t + 0.01 * h * (0.99 * t - 14.3) + 46.3; bool s = di >= 75.0; if (fan_state != s) fan.write(s); fan_state = s; }

入力が変化したときに呼ばれる関数を記述する.動作が複雑になるとプログラムがかなり複雑になる(callback hell).

Page 5: 渡部研究室 - 東京工業大学 · 関数リアクティブプログラミング Functional Reactive Programming (FRP) •関数プログラミングの考え方にもとづいて,リアクティブシステムの記述を支

FRP言語による記述

module FanController in tmp : Float # 温度センサ hmd : Float # 湿度センサ out fan : Bool # ファンのスイッチ use Std

node di = 0.81 * tmp + 0.01 * hmd * (0.99 * tmp - 14.3) + 46.3;

node init[False] fan = di >= th

node th = 75.0 + if fan@last then -1.0 else 1.0

本研究室で開発した組込みシステム向けFRP言語Emfrpによる記述.

Emfrpのプログラムは,時変値を節点,それらの依存関係を有向辺とする有向グラフとして図式化できる.fanからthへの辺は,thの定義におけるfanの直前値の参照(プログラム中のfan@last)を表している.この仕組みにより,Emfrpは副作用を持たない関数型言語にもかかわらず状態を持つ動作を記述できる.

プログラム中のtmp, hmd, di, fan, th は時変値であり,時間と共に変化する.このプログラムでは,ファンのモータを保護するためのヒステリシス制御も行っている.

Emfrp処理系: github.com/psg-titech/emfrp

Page 6: 渡部研究室 - 東京工業大学 · 関数リアクティブプログラミング Functional Reactive Programming (FRP) •関数プログラミングの考え方にもとづいて,リアクティブシステムの記述を支

module Balancer in gyroY : Int, # gyroscope (y-axis) accX : Int, # accelerometer (x-axis) encL : Int, # left motor encoder encR : Int # right motor encoder out motorL : Int, # left motor motorR : Int # right motor use Std ... # definitions of constants

node init[0] angle = (angle@last + gyroY * update_time_ms) * 99 / 100

node speedL = encL - encL@last node speedR = encR - encR@last node init[0] distL = distL@last + speedL node init[0] distR = distR@last + speedR

node risingAngleOff = gyroY * angle_rate_ratio + angle node init[0] motor = motorSpeed(motor@last + (angle_resp * risingAngleOff + dist_resp * (distL + distR ) + speed_resp * (speedL + speedR)) / 100 / gear_ratio)

node diffSpeed = (distL - distR) * dist_diff_resp / 100 node motorL = if accX > 0 then motor + diffSpeed else 0 node motorR = if accX > 0 then motor - diffSpeed else 0

倒立振子ロボットの記述例

Pololu Balboa 32U4(ATmega 32U4, 32KB

Flash, 2.5KB RAM)github.com/psg-titech/emfrp_samples

Page 7: 渡部研究室 - 東京工業大学 · 関数リアクティブプログラミング Functional Reactive Programming (FRP) •関数プログラミングの考え方にもとづいて,リアクティブシステムの記述を支

組込みシステム・CPS向けのFRP言語• 目的:CPSの開発効率・安全性の向上 • チャレンジ: • 言語設計:表現力と静的特性のバランス,モジュール性,非同期処理 • 実装:低速・低機能CPU,少メモリ,省電力化,分散化,高信頼化 • 現在のプロジェクト • XFRP:組込み・CPS向けFRP言語 • 純粋関数型言語,Glitch-free • 静的特性:実行時メモリサイズは静的に決定

• 今後の課題 • 非同期実行・低消費電力化 • 型システム,形式検証

in1 λ

λin2

λ

λ

λ

λ

out

Host1

Host2

Host3

Host4

Page 8: 渡部研究室 - 東京工業大学 · 関数リアクティブプログラミング Functional Reactive Programming (FRP) •関数プログラミングの考え方にもとづいて,リアクティブシステムの記述を支

プログラミング言語から形式手法へ• 形式手法(formal method) • 数学(主に数理論理学)を基盤として信頼性・頑健性の高いソフトウェアを構築するための各種手法 • 形式仕様記述,検証,解析など

• 研究の方向 • プログラミング言語設計やソフトウェア工学分野で発展してきた抽象化・モジュール化手法を積極的に取り入れることで,形式手法をより身近で実用的なものにしたい.

• 渡部研における関連プロジェクト • Actario: アクターモデルのCoqによる形式化(2015-) • 故障挿入機構を備えたモデリング言語Sandal(2014-) • 検証済みプログラムの進化と発展(2012-) • 実時間システム用プログラムの自動合成(2010-2011) • アスペクト指向によるスケーラブルな仕様記述(2005-2007)

Page 9: 渡部研究室 - 東京工業大学 · 関数リアクティブプログラミング Functional Reactive Programming (FRP) •関数プログラミングの考え方にもとづいて,リアクティブシステムの記述を支

検証済みソフトウェアの進化と発展• ソフトウェアは進化・発展する • 機能追加・変更,修正,再利用等 • 検証済ソフトウェアの変更は高コスト • 検証済みソフトウェア=コード+仕様+証明 • これらの一貫性を保ちつつ進化・発展するには?

• ECoq:対話的修正機構を備えた定理証明支援系 • プログラム中の帰納型に対する変更から,対応する修正箇所の候補を自動的に発見し,検証済プログラムの変更を手助けする. • 特に検証済コンパイラの発展などに適した手法である.

Moriguchi, S. & T. Watanabe, An Interactive Extension Mechanism for Reusing Verified Programs, ACM SAC 2013. 森口草介・渡部卓雄, 定理証明支援系Coqへの対話的修正機構の導入, 情報処理学会論文誌(PRO), 5(4), 2012.

Page 10: 渡部研究室 - 東京工業大学 · 関数リアクティブプログラミング Functional Reactive Programming (FRP) •関数プログラミングの考え方にもとづいて,リアクティブシステムの記述を支

言語設計と形式手法の新しい応用領域の開拓• プログラミング言語研究や形式手法の考え方は,ソフトウェア以外にも複雑で信頼性が要求されるシステムの構築や分析に使える • 扱いやすい形で対象が表されていることが重要 • 抽象度 vs. 精密さ,大きさ・複雑さ

• 関連プロジェクト:人的誤りに対する障害耐性の分析 • 人間が実行する仕事の手順書には,人的誤りを含む各種障害に対する対策が盛り込まれている.その障害耐性が十分なものであるか否かを形式手法の考え方を用いて検証する. • 手法:ソフトウェア故障挿入(SFI)+モデル検査 • プロセス代数によってモデル化した手順に人的誤りに相当する障害を自動挿入し,モデル検査による網羅的検査によって障害耐性を分析する手法を提案 • 事例:病院における検査,航空レーダー管制システム

Nagatou, N. and T. Watanabe, A Model-Checking Based Approach to Robustness Analysis of Procedures under Human-Made Faults, Intl. J. of Industrial Engineering, Vol. 22, No. 4, 2015.

Page 11: 渡部研究室 - 東京工業大学 · 関数リアクティブプログラミング Functional Reactive Programming (FRP) •関数プログラミングの考え方にもとづいて,リアクティブシステムの記述を支

最近の主な研究発表• 松村・渡部, 組込みシステム向けFRP言語における状態依存動作のための抽象化機構, 情報処理学会論文誌(プログラミング), 2020 (掲載予定). • 横山・森口・渡部,小規模組込みシステム向けFRP言語に対する再帰的データ型の導入, PPL 2020. • Sakurai & Watanabe, Towards a Statically Scheduled Parallel Execution of an FRP Language for Embedded Systems, REBLS '19, ACM, 2019. • Wang & Watanabe, Functional Reactive EDSL with Asynchronous Execution for Resource-Constrained Embedded Systems, SNPD '19, Studies in Computational Intelligence, Vol. 850, Springer, 2019. • Shibanai & Watanabe, Distributed Functional Reactive Programming on Actor-Based Runtime, AGERE '18, ACM, 2018. • Watanabe, A Simple Context-Oriented Programming Extension to an FRP Language for Small-Scale Embedded Systems, COP '18, ACM, 2018. • 高桑・渡部,多言語に対応した衛生的マクロ機構導入方式,コンピュータソフトウェア,35(2), 2018. • Shibanai & Watanabe, Actoverse: A Reversible Debugger for Actors, AGERE '17, ACM, 2017. • Lavery & Watanabe, An Actor-Based Runtime Monitoring System for Web and Desktop Applications, SNPD '17, IEEE, 2017. • Watanabe, Towards Reflection in an FRP Language for Small-Scale Embedded Systems, LASSY '17, ACM, 2017. • Sawada & Watanabe, Emfrp: A Functional Reactive Programming Language for Small-Scale Embedded Systems, CROW '16, ACM, 2016. • 竹野・渡部,アクターモデルに基づく並行文脈指向プログラミング機構の実装と評価,コンピュータソフトウェア, 33(1), 2016.