プログラミング特論   Advanced Course in Programming

文字サイズ 

担当教員
脇田 建 
使用教室
木1-2(W832)  
単位数
講義:2  演習:0  実験:0
講義コード
75017
シラバス更新日
2015年10月15日
講義資料更新日
2015年10月5日
アクセス指標
学期
後期

講義概要

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

講義の目的

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

講義計画

- 概要
- 関数型プログラミングへの招待:基本的なデータ型,複合的なデータ型,代数的データ型
- 関数型プログラミングへの招待:再帰的なデータ構造,関数閉包,状態の扱い
- 関数型プログラミングへの招待:レコード,例外処理,モジュールシステム,標準ライブラリ,開発環境
- 関数型言語のコンパイラのソフトウェアアーキテクチャ
- プログラムから抽象構文木へ:字句解析と構文解析
- 型解析:型検査と型推論,ユニフィケーション
- 抽象構文木からK正規形へ:K正規形,α変換
- 最適化:β簡約,letの入れ子についての簡約,インライン展開
- 最適化:定数畳み込み,不要定義除去
- 関数閉包の除去:クロージャ変換
- 仮想機械命令生成
- レジスタ割り当て
- 実行可能コードの生成:アセンブリ生成,実行時システム
- まとめ

教科書・参考書等

Class notes(https://github.com/wakita/fp2015)

関連科目・履修の条件等

プログラミングの教育を受けた経験があり,関数型言語を意欲的に学ぶ意思があること.

成績評価

講義の中の小テスト、いくつかの実習課題、発表内容によって判断する。

このページのトップへ