C2101
プログラミング言語論
PROGRAMMING LANGUAGES
先端開拓科目-環境情報-情報とメディア
Frontier Courses (Advanced) - Environmental Information - Information and Media
2 単位
実施形態 完全オンライン
開催日程 秋学期 金曜日3時限
担当教員 服部 隆志(ハツトリ タカシ)
関連科目 前提科目(推奨): B4005,B4004,B4003
前提科目(関連): C2074
開講場所 SFC
授業形態 講義
履修者制限
履修条件

2つ以上のプログラミング言語についての知識があること

You need to have knowledge about at least two programming languages.

使用言語 日本語
連絡先 hattori@sfc.keio.ac.jp
授業ホームページ http://web.sfc.keio.ac.jp/~hattori/prog-theory/
同一科目

学生が利用する予定機材/ソフト等

設置学部・研究科 総合政策・環境情報学部
大学院プロジェクト名

大学院プロジェクトサブメンバー

ゲストスピーカーの人数 0
履修選抜・課題タイプ=テキスト登録可 false
履修選抜・選抜課題タイプ=ファイル登録可 false
GIGAサティフィケート対象
最終更新日 2020/07/20 17:33:41

科目概要

世の中には様々なプログラミング言語が存在し、それぞれが様々な特徴を持っている。この授業では、そのようなプログラミング言語の背後にある共通の概念についてとりあげる。具体的には、形式文法、データ型、プログラミング・パラダイム、 並列プログラミング、プログラムの検証、意味論などの概略を紹介し、コンピュータ・サイエンスの専門的な研究を行うための広範囲の基礎知識を得ることを目的とする。あくまで理論的な理解を主眼としており、具体的なプログラミングの演習ではないことに注意。

We have so many programming languages in the world. In this course, we investigate common concepts behind various programming languages. Our main goal is to gain the fundamental knowledge of computer science such as formal grammar, data types, programming paradigms, etc. through the concepts found in programming languages. Note that we focus on theoretical understanding, not practical skills of programming.

授業シラバス

主題と目標/授業の手法など

世の中には様々なプログラミング言語が存在し、それぞれが様々な特徴を持っている。この授業では、そのようなプログラミング言語の背後にある共通の概念についてとりあげる。具体的には、形式文法、データ型、プログラミング・パラダイム、 並列プログラミング、プログラムの検証、意味論などの概略を紹介し、コンピュータ・サイエンスの専門的な研究を行うための広範囲の基礎知識を得ることを目的とする。あくまで理論的な理解を主眼としており、具体的なプログラミングの演習ではないことに注意。

We have so many programming languages in the world, each of which has unique features. In this course, we investigate common concepts behind various programming languages. Our main goal is to gain the fundamental knowledge of computer science such as formal grammar, data types, programming paradigms, concurrency, through the concepts found in programming languages. Note that we focus on theoretical understanding, not practical skills of programming.

教材・参考文献

John C. Mitchell, Concepts in Programming Languages, Cambridge University Press, 2003
Robert W. Sebesta, Concepts of Programming Languages, Addison Wesley, 2002
五十嵐淳, プログラミング言語の基礎概念, サイエンス社, 2011, ISBN978-4-7819-1285-1

提出課題・試験・成績評価の方法など

中間レポートを提出し、授業時間中にひとりずつ発表を行う。

We have a mid-term paper. You need to give a presentation about your mid-term paper in the class.

履修上の注意

授業計画

第1回 プログラミング言語とは
[Introduction]

プログラミング言語の発展の歴史とさまざまなパラダイムを簡単に紹介する。

- History of programming languages.
- Programming paradigms.


第2回 構文と意味
[Syntax and Semantics]

プログラミング言語における文法と意味とは何か。
形式言語理論の初歩と、プログラムの意味を定義する方法について。

- Definition of syntax and semantics in programming languages.
- Basics of the formal language theory.
- Brief introduction to the semantic theory.


第3回 名前と束縛と変数
[Names, Variables, and Bindings]

プログラミング言語において名前が果たす役割。
変数の束縛と有効範囲の概念。

- How names are used in programming languages.
- Bindings of names and variables.


第4回 型
[Type]

代表的なデータ型の紹介。
型検査はなぜ必要か。
強い型付けとは何か

- Typical data types.
- Strong typing.
- Why do we need type inference?


第5回 式と文
[Expressions and Statements]

式の評価と、代表的な演算子。
演算子と型の関係。
制御文について。

- Evaluation of expressions.
- Control structures.


第6回 副プログラム
[Subprogram]

副プログラムを呼び出す時の引数の受け渡し。
副プログラムと型の関係。

- How arguments are passed to subprograms.
- Relation between types and subprograms.


第7回 抽象データ型
[Abstract Data Type]

データと手続きのカプセル化について。

- Encapsulation of procedures and data.


第8回 オブジェクト指向
[Object Oriented Programming Language]

オブジェクト指向プログラミングとは何か。
いろいろなオブジェクト指向プログラミング言語の比較。

- Definition of object oriented programming.
- Comparison among various object oriented programming languages.


第9回 スクリプト言語
[Script Language]

Perl, Python, Ruby などスクリプト言語の特徴と比較。

- Comparison among various script languages.


第10回 並行プログラミング(1)
[Concurrent Programming (1)]

並行プログラミングの問題点。
セマフォ、モニタ、スレッドについて。

- Problems about concurrency.
- Basic concepts of synchronization.


第11回 並行プログラミング(2)
[Concurrent Programming (2)]

実際の並行プログラミング言語の例。

- Examples of concurrent programming languages.


第12回 例外処理
[Exception]

例外処理とは何か。
各種プログラミング言語における例外処理機構の比較。

- Basic concepts of exception handling.
- Comparison among exception handling mechanisms in various programming languages.


第13回 関数型言語
[Functional Programming Languages]

関数型プログラミングとは何か。
ラムダ計算の紹介。

- Definition of functional programming.
- Brief introduction to the lambda calculus.


第14回 論理型言語
[Logic Programming Language]

論理型プログラミングとは何か。
論理型プログラムの構造と実行。

- Definition of logic programming.
- Unification and resolution.


第15回 中間レポート
[mid-term paper]

ある一つの言語を選んで、他の言語との比較を行う。

- Comparison between a language of your choice and other languages.


15回目に相当するその他の授業計画

中間レポートの発表。

Presentation of mid-term papers.