1. 導入

1.1. この授業について

  • 先端科目(3〜4年生向け)

  • プログラミング言語についての理論的な理解を目指す

  • 2つ以上のプログラミング言語を知っていることが前提

1.2. 成績評価

  • 毎週の課題 20点

  • 中間レポート 40点

  • 期末試験 40点

1.2.1. 過去の実績

  • 2020年度: S 49名、A 28名、B 27名、C 16名、D 55名

  • 2022年度: S 13名、A 16名、B 5名、C 3名、D 13名

1.3. 根本的な疑問

どうしてこんなにたくさんプログラミング言語があるのか?

1.4. プログラミング言語を定義する方法

新しい言語をデザインする時、曖昧さがなく、簡潔で、理解しやすい形で定義することはきわめて重要である。

  • Scheme には数学的に厳密な 定義 があるが、残念ながら理解するのが難しい。

  • BASIC や C は、最初は厳密な定義がなかったので、微妙に異なるいくつかの処理系ができてしまった。PHPも最近まできちんとした定義がなかった(cf. Announcing a specification for PHP )。

言語を定義するには、次の二つのことを決める必要がある。

  • 構文(syntax) --- どのように書くか、ということ

  • 意味(semantics) --- 実行すると何が起きるか、ということ

1.5. 構文的な違い

1.5.1. 文字

1.5.2. 文法

Esoteric progarmming language というものがある。

1.6. 意味的な違い

プログラミング言語におけるパラダイムとは、哲学的に言えば「計算とは、何か」ということ。

命令型(手続き型)

計算とは、状態を変化させることである。

関数型

計算とは、式を簡約することである。

論理型

計算とは、命題を証明することである。

1.7. 良いプログラミング言語

  • 「読みやすさ」と「書きやすさ」は一般に両立しない。

  • 「効率が良い」とは?

    • 実行速度が速い

    • コンパイルが速い

    • プログラムを書くのが速い

  • 信頼性を高くするには?

    • 強い型付けや例外処理の強制 → 嫌いな人もいる

  • エコシステム

    • 言語の学習が大変だとあまり使われない

    • 言語処理系の開発が大変だとあまり使われない

    • ライブラリが揃っていないとあまり使われない

1.8. プログラミング言語の理論を勉強する理由

  • 発想の幅が広がる --- 言語は概念を表現する道具に過ぎないのだが、使う言語によって発想が制約されるのも事実。「ハンマーしか持っていなければ、すべての問題は釘に見える」ということわざがある。

  • 新しい言語を容易に学べるようになる --- 技術の進歩についていくには常に勉強しなければならない。

  • ソフトウェア技術の重要な基礎である --- 基礎をおろそかにしては高度な研究はできない。