講義の概要#
info
講義0.2回分
講義の目的#
本講義の目的はプログラミング言語の本質の理解にある.特定のプログラミング言語を用いたプログラミングスキルの習得が目的ではない.実践ではなく理論の講義であることを認識しておくこと.
例えば次のC言語のソースプログラムが与えられたときに,
以下のような問いに答えられるようになることが目的である.
- なぜC言語はこのような記法なのか?
プログラミング言語の構文はどのように定義されているのか? - なぜこのプログラムでコンピュータが動作するのか?
プログラムはコンピュータにどのような指示を与えているのか? - これと同機能で別の実現方法はあるのか?
他のプログラミング言語は存在するのか?何が違うのか?
Note
プログラミング言語と計算機言語は完全に同じ意味である.
プログラミング言語を理解するとは,プログラミング言語が採用する計算モデル(model of computation)を理解することである(1).本講義では計算モデルの理解を通じて,各種プログラミング言語の持つ規範や哲学の理解を試みる.
- 仮想的な計算機のこと. 詳細は特徴と分類で説明する.
講義では,まずプログラミング言語の基本的な性質について説明し,計算モデルを含むプログラミング言語の特徴と分類を考える.さらに各種言語の構文の構成方法を説明する.
さらに,C言語やJavaなどの命令型言語とオブジェクト指向言語を中心に,その言語の規範となるパラダイムを説明する.関数型言語と 論理型言語についてもその特性を説明する.
講義の後半ではC言語とJava言語を取り上げ,その操作的意味論を考える.
Note
プログラミングと本講義の関係は,球技と筋トレの関係に近い.
- ボールを触る時間は楽しいが,より高いレベルを目指すには筋トレも必要である
- プログラミングは楽しいが,より高いレベルを目指すには基礎理論の理解も必要である
理論的な側面のみでは理解が難しいことも多々ある.可能な限り具体的なソースコードを併記するので,ブラウザで動作するオンラインコンパイラ等を使って実際に動かしてみることを強く推奨する.理論の授業ではあるが実践も大切にすること.
オンラインコンパイラの一例を示す.
言語 | オンラインコンパイラ |
---|---|
C | Programiz,OnlineGDB |
Java | Programiz,OnlineGDB |
Lisp(Scheme) | JDoodle,Tutorials Point |
Prolog | One Compiler,Tutorials Point |
可能な限り分かりやすい説明を試みるが,理論の講義であるため抽象的で捉えにくい部分もある.自発的な学習が必須である点を認識しておくこと.
講義の進め方#
教科書の内容を噛み砕いた本Webサイトに従って講義を進める.
- 教科書:
- 「プログラミング言語論」,コロナ社,ISBN978-4-339-02704-4
教科書表紙
講義全体の流れは教科書に準拠するが,各回の流れや用語,例題などに大幅な変更を加えている.厳密な定義よりも分かりやすさを,トピックの網羅よりも理解の深化を優先するためである.教科書を使って勉強する際はその点に注意すること.
なお教科書の購入は必須ではない.より深く理解したい場合は教科書を活用すること.
宿題#
毎回30~60分程度の宿題を課す.回答締切は次回講義の前日(火曜日)23:59とする.回答フォームとしてはGoogle Formを利用する.提出ミスに気をつけること.必ず回答を手元にコピーしておくこと.
講義1回目の宿題(参考)
試験#
中間試験と期末試験をペーパー試験の形式で実施する.試験範囲は教科書ではなく本Webサイトである.試験時間は中間・期末共に60分とし,残り30分で答えの解説をする.解説の出席は任意とする.試験会場はG516である.
成績評価#
宿題を含む講義への参加姿勢,および中間試験と期末試験の合計点により成績を決める.
備考#
本Webサイトは2024年に作成したものであり,タイポやエラーなどの間違いが含まれている可能性が高い.間違いや改善点を発見した際は宿題のフォームを使って連絡せよ.講義への参加姿勢として加点の対象とする.