2018年度 関数型プログラミング   Functional Programming

文字サイズ 

アップデートお知らせメールへ登録 お気に入り講義リストに追加
開講元
数理・計算科学コース
担当教員名
脇田 建  増原 英彦 
授業形態
講義
曜日・時限(講義室)
月5-6(W831)  木5-6(W831)  
クラス
-
科目コード
MCS.T502
単位数
2
開講年度
2018年度
開講クォーター
3Q
シラバス更新日
2018年3月20日
講義資料更新日
2018年10月2日
使用言語
英語
アクセスランキング

講義の概要とねらい

関数型プログラミングの研究・開発において培われてきたゴミ集め,型駆動の最適化,関数閉包などの要素技術は,関数型プログラミングパラダイムの壁を越え,多くのプログラミング言語に取り込まれています.関数型言語のコンパイラを読み解くことによって,高い抽象性を誇りつつも,非効率にも見える関数型のプログラムが,さまざまな技術を経て高効率な機械実行可能なコードに変換される様子を学べます.授業で扱うコンパイラは抽象構文木,K正規形,クロージャ変換,仮想機械命令などの抽象化層を経て段階的に機械命令を生成します.このように設計されたコンパクトで美しいコンパイラの構成より,さらに複雑なソフトウェアを記述するための系統的な方法についても学ぶことができるでしょう.

到達目標

【到達目標】 本授業の目標は (1) 関数型プログラミング言語の習得,(2) 関数型プログラミングの実践的方法論の理解,(3) 関数型プログラミング言語のコンパイラの理解の三点です.関数型プログラミングができるようになること,そして関数型プログラミング言語のコンパイラのソストウェアアーキテクチャを理解することを到達目標とします.
【テーマ】 関数型プログラミング言語で記述された関数型言語のコンパイラを読み解く経験を通して,大規模なソフトウェアの構成方法,抽象化レベルの高いソフトウェアを段階的に具現化する技術,記述の抽象度と実行時の効率性を両立するための方法論など,一般の情報システム構築における要点を実践的に学びます.

キーワード

Compiler organization, Optimization, System programming, Functional programming, OCaml

学生が身につける力

国際的教養力 コミュニケーション力 専門力 課題設定力 実践力または解決力
- - - -

授業の進め方

The course is taught mainly by lectures.

授業計画・課題

  授業計画 課題
第1回 概要 Guidance
第2回 OCamlによる関数型プログラミングへの招待 基本的なデータ型,複合的なデータ型,代数的データ型について学ぶ
第3回 OCamlによる関数型プログラミングへの招待 再帰的なデータ構造,再帰的な関数,関数閉包,状態の扱い
第4回 OCamlによる関数型プログラミングへの招待 レコード,例外処理,モジュールシステム,標準ライブラリ,開発環境
第5回 関数型言語のコンパイラ MinCaml のソフトウェアアーキテクチャ 関数型言語OCamlで記述された関数型言語MinCamlのソフトウェアアーキテクチャの概要を理解する.
第6回 プログラムから抽象構文木へ 字句解析と構文解析について学ぶ
第7回 型解析 型検査と型推論,ユニフィケーション
第8回 抽象構文木からK正規形へ K正規形,α変換
第9回 最適化(1) β簡約,letの入れ子についての簡約,インライン展開
第10回 最適化(2) 定数畳み込み,不要定義除去
第11回 関数閉包の除去 クロージャ変換
第12回 仮想機械命令生成 仮想機械命令生成
第13回 レジスタ割り当て レジスタ割り当て
第14回 実行可能コードの生成 アセンブリ生成,実行時システム
第15回 まとめ まとめ

教科書

特になし

参考書、講義資料等

参考資料はGitHubにホスティングする.GitHubにアクセスする情報はOCW-iから提供する.
http://esumii.github.io/min-caml/

成績評価の基準及び方法

授業時間内の発表およびレポート課題で成績を評価する。最終試験はない。

関連する科目

  • MCS.T213 : アルゴリズムとデータ構造
  • MCS.T224 : プログラミング第一
  • MCS.T303 : プログラミング第二
  • MCS.T334 : プログラミング言語処理系
  • CSC.T372 : コンパイラ構成

履修の条件(知識・技能・履修済科目等)

形式言語理論(オートマトン,文脈自由文法など),アルゴリズムとデータ構造(リスト,木,グラフ)について理解していること.少なくとも一つのプログラミング言語を巧みに使えること.

その他

骨のある授業です.

このページのトップへ