49
プログラミング言語論 A (Concepts on Programming Languages) 趙 建軍 (チョウ) (Jianjun Zhao) http://stap.ait.kyushu-u.ac.jp/~zhao/course/2020/Concepts of Programming Languages.html 1

プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

プログラミング言語論 A

(Concepts on Programming Languages)

趙 建軍 (チョウ)

(Jianjun Zhao)

http://stap.ait.kyushu-u.ac.jp/~zhao/course/2020/Concepts of Programming Languages.html1

Page 2: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

第2回

講義の紹介 (Introduction)

2020.05.14

2

Page 3: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

講義内容と目的

目的

◼ プログラミング言語に関するアイデアを一通り習得すること

内容

◼ プログラミング言語パラダイム

◼ プログラミング言語の諸要素

◼ プログラム理論

◼ プログラムの意味論

3

Page 4: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

プログラミング言語の分類 (1)

記述と抽象度のレベル (Abstraction)◼ 機械語◼ アセンブリ言語◼ 高級言語

4

Page 5: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

プログラミング言語の分類

5

Page 6: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

プログラミング言語の分類 (2)

実行の形式◼ コンパイラ言語◼ インタプリタ言語◼ スクリプト言語

6

Page 7: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

HIR LIR

HL O

pts

Reta

rget

LL O

pts

Code G

en

HL O

pts

LL O

pts

LL O

pts

HL O

pts

Phoenix + Tools : 10kft View

Native

Image

VB

C++

C#

Phx Core LibCore structures, Utils; AST, CodeGen Srvcs

I/O

Sync

Trans

mgr

Master

Program DB

+

Profiles

Lint

Designer

Visualizer

Modeler

Editor+

Browser

Xlator

Formatter

Rea

de

rs: C

IL, M

SIL

, HIR

, x86

Core

Program

Representation

[ AST+]

Custom

Extended

Pgm Rep

[AST++]

Phx APIs

Profiler

Obfuscator

Security

Checker

Refactor

Phx APIs

EXEJ#

7

Page 8: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

プログラミング言語の分類 (3)

用途◼ 科学技術計算用言語◼ ビジネス用◼ 人工知能用言語◼ ネットワークプログラミング用◼ 特殊用途用(シミュレーション用、データ

ベース管理、…)

8

Page 9: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

9

プログラミング言語の分類 (3)

Page 10: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

10

プログラミング言語の分類 (4)

Page 11: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

11

プログラミング言語の分類 (4)

Page 12: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

12

プログラミング言語の分類 (5)

命令型プログラミング言語(Imperative)

手続き型Procedural

C, Ada, Pascal, Algol,

FORTRAN, . . .

オブジェクト指向型Object-oriented

Scala, C#, Java, Smalltalk,

SIMULA, . . .

スクリプト型Scripting

Perl, Python, PHP, . . .

Page 13: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

13

プログラミング言語の分類 (5)

命令型プログラミング言語(Imperative)

手続き型Procedural

C, Ada, Pascal, Algol,

FORTRAN, . . .

オブジェクト指向型Object-oriented

Scala, C#, Java, Smalltalk,

SIMULA, . . .

スクリプト型Scripting

Perl, Python, PHP, . . .

Page 14: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

14

プログラミング言語の分類 (5)

命令型プログラミング言語(Imperative)

手続き型Procedural

C, Ada, Pascal, Algol,

FORTRAN, . . .

オブジェクト指向型Object-oriented

Scala, C#, Java, Smalltalk,

SIMULA, . . .

スクリプト型Scripting

Perl, Python, PHP, . . .

Page 15: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

15

プログラミング言語の分類 (5)

宣言型プログラミング言語(Declarative)

関数型Functional

Haskell, SML, Lisp, Scheme, . . .

論理型Logic

Prolog, KL1, . . .

データ流れData-flow

Id, Val, . . .

Page 16: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

16

プログラミング言語の分類 (5)

宣言型プログラミング言語(Declarative)

関数型Functional

Haskell, SML, Lisp, Scheme, . . .

論理型Logic

Prolog, KL1, . . .

データ流れData-flow

Id, Val, . . .

Page 17: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

17

プログラミング言語の分類 (5)

宣言型プログラミング言語(Declarative)

関数型Functional

Haskell, SML, Lisp, Scheme, . . .

論理型Logic

Prolog, KL1, . . .

データ流れData-flow

Id, Val, . . .

Page 18: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

18

歴史(History)

時期 プログラミング言語

1951–55 Experimental use of expression compilers

1956–60 FORTRAN, COBOL, LISP, Algol 60

1961-65 APL notation, Algol 60 (revised), SNOBOL, CPL

1966-70 APL, SNOBOL 4, FORTRAN 66, BASIC, SIMULA,

Algol 68, Algol-W, BCPL

1971–75 Pascal, PL/1 (Standard), C, Scheme, Prolog

1976–80 Smalltalk, Ada, FORTRAN 77, ML

Page 19: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

19

歴史(History)

時期 プログラミング言語

1981–85 Smalltalk-80, Prolog, Ada 83

1986–90 C++, SML, Haskell

1991-95 Ada 95, TCL, Perl

1996-2000 Java

2001–05 C#, Python, Ruby, Scala

2006–17 Go, R, ......

Page 20: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

20

Page 21: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

21

Page 22: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

22

Page 23: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

23

Page 24: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

24

Page 25: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

Quiz Time!

25

Page 26: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

von Neumann (1903-1957)

Home Country: (1) Russia

(2) Hungary

(3) Germany

von Neumann is (1) Mathematician

(2) Computer Scientist

(3) Economist

26

Page 27: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

von Neumann (1903-1957)

Home Country: (1) Russia

(2) Hungary

(3) Germany

von Neumann is (1) Mathematician

(2) Computer Scientist

(3) Economist

27

Page 28: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

アンケート

使用したプログラミング言語:

名前だけ聞いたプログラミング言語:

28

Page 29: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

パラダイム (paradigm)

In science and philosophy, a paradigm is a distinct set

of concepts or thought patterns, including theories,

research methods, postulates, and standards for what

constitutes legitimate contributions to a field.

29

Page 30: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

パラダイム (paradigm)

パラダイム (paradigm) とは、科学史家・科学哲学者のトーマス・クーンによって提唱された、科学史及び科学哲学上の概念。

一般には「模範」「範」を意味する語である

トーマス・クーン:科学革命の構造(The structure

of scientific revolutions) (パラダイム転換)

30

Page 31: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

Programming Paradigm

Programming paradigms are a way to

classify programming languages based on

the features of various programming

languages.

Languages can be classified into multiple

paradigm

31

Page 32: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

プログラミング言語パラダイム (1)

プログラマにプログラムの見方を与えるものと言える。例えば:

◼ オブジェクト指向プログラミングにおいて、プログラムとはオブジェクトをつくりそれを管理するものである。

◼ 関数型プログラミングにおいては、状態を持たない関数の評価の連続である。

32

Page 33: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

プログラミング言語パラダイム (2)

命令型言語パラダイム

関数型言語パラダイム

論理型言語パラダイム

オブジェクト指向型言語パラダイム

33

Page 34: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

プログラミング言語パラダイム (3)

34

Page 35: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

プログラミング言語パラダイム (3)

35

Page 36: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

計算モデルの必要性

世の中の情報システム(コンピュータや生物)は非常に複雑

この情報システムがどのような原理に基づくかを知るには数学的基盤を持つ抽象的な枠組みを導入する必要がある

36

Page 37: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

計算モデルの必要性

計算機のハードウェア◼ 複雑すぎて扱えない

CやPascalなどで書かれたプログラム◼ 数学的な厳密さを持つとは限らない

プログラムを入力から出力を得るものとする◼ 例:数学的な関数

◼ ただし、実際に入力を与えても、その答え(出力)が導けるとは限らない

37

Page 38: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

計算モデルとは

コンピュータによる計算機構を抽象的に捉(とら)えた数学的な枠組みであり, これにより計算に関する様々な議論が可能になる◼ 計算するとはどういうことであるかの説明

◼ 計算モデルが変わるとプログラミング言語の設計も変わる

プログラミング言語パラダイムの最重要かつ主要な構成要素

38

Page 39: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

計算モデル

情報システムの抽象的な枠組み=計算モデル

39

Page 40: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

代表的な計算モデル

(逐次)計算モデル◼ 抽象機械計算モデル

◼ 関数型計算モデル

◼ 論理型計算モデル

◼ 項書き換え型計算モデル

(並列分散)計算モデル◼ プロセス代数(プロセスカルキュラス)

◼ イベント機械モデル(ペトリネット)

40

Page 41: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

プログラミング言語の諸要素

文法 BNF

制御構造 構造化プログラミング

変数、値、データ型 型代数、オブジェクト指向

抽象データ型

サブルーチンと呼出し クラス、継承、カプセル化

実行 部分計算、ネットワーク対応

検証、アサーション

入出力 イベント駆動

41

Page 42: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

プログラム理論

プログラムの正しさ (correctness)

正当性と停止性 (Termination)

2つのプログラムが等しいということ◼ 入力と出力の関係が等しいこと◼ プログラムの計算の仕方も含めて等しいこと

プログラムによって計算できること、できないこと◼ 数学的に定義できる関数◼ プログラミング言語によって表現できる関数

42

Page 43: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

プログラムの意味論

プログラミング言語は言語である

言語は何かを表現するためのもの

表現しているものがその文の意味

プログラムは何を表現しているのか

プログラムは、計算機に何を要請しているのか

プログラムが正しいということは、何を期待しているのか

43

Page 44: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

プログラミング言語の意味論

操作的意味論 (Operational Semantics)

◼ プログラムの状態をどのように変化させていくのか

公理的意味論 (Axiomatic Semantics)

◼ プログラムの実行によってどんな性質が満たされるのか

表示的意味論 (Denotational Semantics)

◼ プログラムが意味するものを、具体的に対応付ける

44

Page 45: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

プログラミングの基本的な理解Fundamental Understanding of Programming

Tony Hoare (ACM Turing Award)

Page 46: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

プログラミングの基本的な理解 (1)

Q1: What is this program for? (このプログラムは何ですか?)

A: Its specification tells you its function

(その仕様はあなたにその機能を伝える)

Q2: How does it work?

(このプログラムはどのように機能するか?)

A: Annotation at interfaces explains how

(インタフェースでのアノテーションは説明できる)

Page 47: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

プログラミングの基本的な理解 (2)

Q3: Why does it work?

(なぜこのプログラムは機能するか?)

A: The theory of programming explains why

(プログラミングの理論から説明できる)

Q4: Are the answers accurate?

(答えは正確ですか?)

A: A verifying compiler provides a reliable check

(検証コンパイラは信頼できるチェックを提供する)

Page 48: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

Quiz

int 型の変数n1, n2, n3, n4の値が、それぞれ15, 15, 20, 30であるとする。このとき、以下の各式を評価した値を示せ。

◼ 1 && 0 ( ? )

◼ n1 != n4 ( ? )

◼ n2 <= n3 ( ? )

◼ n1 / 5 != 3 ( ? )

◼ 1 || 0 ( ? )

◼ (n1 == n2) || 0 ( ? )48

Page 49: プログラミング言語論stap.ait.kyushu-u.ac.jp/~zhao/course/2020/2020-L02... · 2020-05-18 · Quiz Time! 25. von Neumann (1903-1957) Home Country: (1) Russia (2) Hungary (3)

Quiz-questions

int 型の変数n1, n2, n3, n4の値が、それぞれ15, 15, 20, 30であるとする。このとき、以下の各式を評価した値を示せ。

◼ 1 && 0 ( 0 )

◼ n1 != n4 ( 1 )

◼ n2 <= n3 ( 1 )

◼ n1 / 5 != 3 ( 0 )

◼ 1 || 0 ( 1 )

◼ (n1 == n2) || 0 ( 1 )49