2025年度 (最新) 学院等開講科目 情報理工学院 数理・計算科学系 数理・計算科学コース
プログラミング言語設計論
- 開講元
- 数理・計算科学コース
- 担当教員
- 増原 英彦
- 授業形態
- 講義 (対面型)
- メディア利用科目
- -
- 曜日・時限
(講義室) - 月5-6 (W8E-306(W832)) / 木5-6 (W8E-306(W832))
- クラス
- -
- 科目コード
- MCS.T503
- 単位数
- 200
- 開講時期
- 2025年度
- 開講クォーター
- 4Q
- シラバス更新日
- 2025年12月4日
- 使用言語
- 英語
シラバス
授業の目的(ねらい)、概要
プログラミング言語には様々なものがあり、それらが提供している機能もまた様々である。そういった多様な言語機能には、ソフトウェアのモジュール化、再利用性、安全性などを向上させるという強い動機があり、言語の意味論、モジュール化機構、型システムといった理論的背景によって支えられている。これら諸機能を俯瞰的に把握することで、プログラミング言語の設計を行う際の要点を理解するだけでなく、プログラミング言語を使ってソフトウェア開発を行う際の指針を得ることができる。
到達目標
プログラミング言語に備わる様々な機能が、どのような理論的背景の下で成立し、実際の言語によってどのような特徴や違いがあるかを学ぶことで、プログラミング言語の設計に関する全体像を把握することを目標とする。このようなプログラミング言語に関する深い知識を得ることで、その背後にある情報科学の理論の応用例を知り、特定の言語にとらわれないプログラミングの本質を身に付けることも目標とする。
プログラミング言語機能のうち表面言語、即ち利用者が実際に記述するプログラムのための諸機能をテーマとする。特に近年では極めて一般的になっているオブジェクト指向言語とその発展型に見られる機能を対象とする。
キーワード
Parnasモジュール化原則、情報隠蔽、抽象データ型、Liskov置換原則、オブジェクト指向、クラス、継承、委譲、再利用性、デザインパターン、多重継承、trait、フィーチャ指向、アスペクト指向、横断的関心事、アドバイス、Dependency injection、文脈指向、層活性、型安全性、代数データ型、部分型、型推論、型多層性、The Expression Problem、モジュール型、汎化型、テンプレート、メタプログラミング、マクロ
学生が身につける力
- 専門力
- 教養力
- コミュニケーション力
- 展開力 (探究力又は設定力)
- 展開力 (実践力又は解決力)
授業の進め方
各回で簡単なテストを行い、その回の問題点を理解する準備をする。その上で言語機能が設計された背景、基本的な機能、バリエーションについて講義をする。講義は討論形式を中心に行う。
(偶数年度は日本語開講であるため、非日本語使用者のために講義スライドは英語を使用する。また英語による質問・補足説明も歓迎する。
授業計画・課題
| 授業計画 | 課題 | |
|---|---|---|
| 第1回 | 講義の概要説明 |
特になし |
| 第2回 | モジュール化: Parnasモジュール化原則, 依存性, 情報隠蔽 |
講義で解説された言語機能について、実際のプログラミング言語を用いて確認せよ |
| 第3回 | 抽象データ型: インタフェースと実現, CLU言語, Liskov置換原則, カプセル化 |
講義で解説された言語機能について、実際のプログラミング言語を用いて確認せよ |
| 第4回 | オブジェクト指向1: クラス, 継承, インスタンス, メソッド |
講義で解説された言語機能について、実際のプログラミング言語を用いて確認せよ |
| 第5回 | オブジェクト指向2: 委譲, インスタンスベースオブジェクト指向, 多重継承, マルチメソッド |
講義で解説された言語機能について、実際のプログラミング言語を用いて確認せよ |
| 第6回 | 再利用性: ライブラリとフレームワーク, デザインパターン |
講義で解説された言語機能について、実際のプログラミング言語を用いて確認せよ |
| 第7回 | 再利用性: mixins, traits |
講義で解説された言語機能について、実際のプログラミング言語を用いて確認せよ |
| 第8回 | 仮想機械: 械機語・バイトコード・最適化 |
講義で解説された言語機能について、実際のプログラミング言語を用いて確認せよ |
| 第9回 | 仮想機械: 動的コンパイル・メソッドディスパッチ・最適化 |
講義で解説された言語機能について、実際のプログラミング言語を用いて確認せよ |
| 第10回 | 言語フレームワーク: 超循環インタプリタ・コンパイラコンパイラ・言語フレームワーク・部分計算 |
講義で解説された言語機能について、実際のプログラミング言語を用いて確認せよ |
| 第11回 | メタ言語フレームワーク: 二村射影・RPython・Graal/Truffle |
講義で解説された言語機能について、実際のプログラミング言語を用いて確認せよ |
| 第12回 | 追補1 |
講義で解説された言語機能について、実際のプログラミング言語を用いて確認せよ |
| 第13回 | 追補2 |
講義で解説された言語機能について、実際のプログラミング言語を用いて確認せよ |
| 第14回 | 追補3 |
講義で解説された言語機能について、実際のプログラミング言語を用いて確認せよ |
| 第15回 | . |
. |
準備学修(事前学修・復習)等についての指示
学修効果を上げるため,教科書や配布資料等の該当箇所を参照し,「毎授業」授業内容に関する予習と復習(課題含む)をそれぞれ概ね100分を目安に行うこと。
教科書
特になし
参考書、講義資料等
特になし
成績評価の方法及び基準
レポート課題および口頭試験によって評価する。課題は授業で取りあげた諸概念を、実際のプログラミング言語に即して実験するものとする。これによって授業内容を応用可能なレベルまで理解しているかを判定し、成績評価の基準とする。口頭試験は提出されたレポートに即した試問をする。
関連する科目
- ..
履修の条件・注意事項
特になし