30
2017/5/10 1 プログラミング言語論 (Concepts on Programming Languages) 趙 建軍 情報知能工学部門 1 第3回: Introduction (講義の紹介) 2017.04.27 2

(Concepts on Programming Languages)stap.ait.kyushu-u.ac.jp/~zhao/course/2017/2017-L03...2017/5/10 1 プログラミング言語論 (Concepts on Programming Languages) 趙建軍 情報知能工学部門

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: (Concepts on Programming Languages)stap.ait.kyushu-u.ac.jp/~zhao/course/2017/2017-L03...2017/5/10 1 プログラミング言語論 (Concepts on Programming Languages) 趙建軍 情報知能工学部門

2017/5/10

1

プログラミング言語論(ConceptsonProgrammingLanguages)

趙 建軍情報知能工学部門

1

第3回:Introduction(講義の紹介)

2017.04.27

2

Page 2: (Concepts on Programming Languages)stap.ait.kyushu-u.ac.jp/~zhao/course/2017/2017-L03...2017/5/10 1 プログラミング言語論 (Concepts on Programming Languages) 趙建軍 情報知能工学部門

2017/5/10

2

お知らせ

3

5月1日(月曜日)は木曜日の授業を行いますが、海外出張のため、休講致します。

講義内容と目的

講義の目的 プログラミング言語に関するアイデアを一

通り習得すること

講義の内容 プログラミング言語パラダイム プログラミング言語の諸要素 プログラム理論 プログラムの意味論

4

Page 3: (Concepts on Programming Languages)stap.ait.kyushu-u.ac.jp/~zhao/course/2017/2017-L03...2017/5/10 1 プログラミング言語論 (Concepts on Programming Languages) 趙建軍 情報知能工学部門

2017/5/10

3

初期のプログラミング言語:機械語

– 複雑な計算を書くのに大変時間がかかる

– デバッグに多大な時間が取られる

Instruction|register0000,0000,000000001000LOADA,160000,0000,000000000001LOADB,10000,0001,000000001000STOREB,160000,0001,000000000001 STOREB,1

2017/5/10 5

初期のプログラミング言語:Assembly

– プログラムを作成することが時間がかかる– ハードウェアの構造がわかる必要がある(register,memoryなど)

– デバッグに多大な時間が取られる

SHLBX,1IConeMOVDL,’0’JMPtwo

one:MOVDL,’1’two:MOVAH,2

INT21h

2017/5/10 6

Page 4: (Concepts on Programming Languages)stap.ait.kyushu-u.ac.jp/~zhao/course/2017/2017-L03...2017/5/10 1 プログラミング言語論 (Concepts on Programming Languages) 趙建軍 情報知能工学部門

2017/5/10

4

初期のプログラミング言語 (まとめ)

最初の言語=機械語、Assembly 複雑な計算を書くのに大変時間がかかる デバッグに多大な時間が取られる

数式を書くように記述して、自動的にプログラムを出す仕組みが欲しい

自動数式変換=FORmula TRANslator FORTRAN (1956)

7

プログラミング言語とは?

コンピュータに対する指示 (instruction)を記述するための人工言語である

この一連の指示をプログラムと呼び、それを記述することをプログラミングと呼ぶ

8

Page 5: (Concepts on Programming Languages)stap.ait.kyushu-u.ac.jp/~zhao/course/2017/2017-L03...2017/5/10 1 プログラミング言語論 (Concepts on Programming Languages) 趙建軍 情報知能工学部門

2017/5/10

5

9

プログラミング言語の目的

プログラミングの労力を軽減すること

2017/5/10

10

プログラミング言語の目的

プログラミングの労力を軽減すること

2017/5/10

Page 6: (Concepts on Programming Languages)stap.ait.kyushu-u.ac.jp/~zhao/course/2017/2017-L03...2017/5/10 1 プログラミング言語論 (Concepts on Programming Languages) 趙建軍 情報知能工学部門

2017/5/10

6

11

プログラミング言語の必要条件

プログラムを書く記法が定義されていること 文脈自由文法(Context-free Grammar, CFG)

2017/5/10

12

プログラミング言語の必要条件

プログラムを書く記法が定義されていること BNF

2017/5/10

Page 7: (Concepts on Programming Languages)stap.ait.kyushu-u.ac.jp/~zhao/course/2017/2017-L03...2017/5/10 1 プログラミング言語論 (Concepts on Programming Languages) 趙建軍 情報知能工学部門

2017/5/10

7

13

プログラミング言語の必要条件

コンパイラ(または言語処理系)が実現できること

2017/5/10

14

プログラミング言語の必要条件

コンパイラ(または言語処理系)が実現できること

2017/5/10

Page 8: (Concepts on Programming Languages)stap.ait.kyushu-u.ac.jp/~zhao/course/2017/2017-L03...2017/5/10 1 プログラミング言語論 (Concepts on Programming Languages) 趙建軍 情報知能工学部門

2017/5/10

8

15

プログラミング言語の持つべき望ましい性質

2017/5/10

16

プログラミング言語の持つべき望ましい性質

2017/5/10

Page 9: (Concepts on Programming Languages)stap.ait.kyushu-u.ac.jp/~zhao/course/2017/2017-L03...2017/5/10 1 プログラミング言語論 (Concepts on Programming Languages) 趙建軍 情報知能工学部門

2017/5/10

9

17

プログラミング言語の持つべき望ましい性質

簡潔・明晰な表現機構

高い記述能力

プログラムに明確で、曖昧さのない意味を与えられること

プログラムの信頼性、再利用性、テスト容易性を高める機構

高品質のコードを生成するコンパイラ(言語処理系)が実現可能

2017/5/10

So�Many�Languages�!!!

Page 10: (Concepts on Programming Languages)stap.ait.kyushu-u.ac.jp/~zhao/course/2017/2017-L03...2017/5/10 1 プログラミング言語論 (Concepts on Programming Languages) 趙建軍 情報知能工学部門

2017/5/10

10

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

19

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

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

20

Page 11: (Concepts on Programming Languages)stap.ait.kyushu-u.ac.jp/~zhao/course/2017/2017-L03...2017/5/10 1 プログラミング言語論 (Concepts on Programming Languages) 趙建軍 情報知能工学部門

2017/5/10

11

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

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

21

HIR LIR

HL

Opt

s

Ret

arge

t

LL O

pts

Cod

e G

en

HL

Opt

s

LL O

pts

LL O

pts

HL

Opt

s

Phoenix + Tools : 10kft View

NativeImage

VB

C++

C#

Phx Core LibCore structures, Utils; AST, CodeGen Srvcs

I/OSyncTransmgr

MasterProgram DB

+Profiles

Lint

Designer

Visualizer

Modeler

Editor+

Browser

Xlator

Formatter

Re

ad

ers: C

IL, MS

IL, HIR

, x86

CoreProgram

Representation[ AST+]

CustomExtendedPgm Rep[AST++]

Phx APIs

Profiler

Obfuscator

SecurityChecker

Refactor

Phx APIs

EXEJ#

Page 12: (Concepts on Programming Languages)stap.ait.kyushu-u.ac.jp/~zhao/course/2017/2017-L03...2017/5/10 1 プログラミング言語論 (Concepts on Programming Languages) 趙建軍 情報知能工学部門

2017/5/10

12

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

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

ベース管理、…)

23

24

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

2017/5/10

Page 13: (Concepts on Programming Languages)stap.ait.kyushu-u.ac.jp/~zhao/course/2017/2017-L03...2017/5/10 1 プログラミング言語論 (Concepts on Programming Languages) 趙建軍 情報知能工学部門

2017/5/10

13

25

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

26

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

Page 14: (Concepts on Programming Languages)stap.ait.kyushu-u.ac.jp/~zhao/course/2017/2017-L03...2017/5/10 1 プログラミング言語論 (Concepts on Programming Languages) 趙建軍 情報知能工学部門

2017/5/10

14

27

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

2017/5/10

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

手続き型Procedural

C,Ada,Pascal,Algol,FORTRAN,...

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

Scala,C#,Java,Smalltalk,SIMULA,...

スクリプト型Scripting

Perl,Python,PHP,...

28

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

2017/5/10

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

関数型Functional

Haskell,SML,Lisp,Scheme,...

論理型Logic

Prolog,...

Data‐flow Id,Val,...

Constraint‐based spreadsheets

Template‐based XSLT

Page 15: (Concepts on Programming Languages)stap.ait.kyushu-u.ac.jp/~zhao/course/2017/2017-L03...2017/5/10 1 プログラミング言語論 (Concepts on Programming Languages) 趙建軍 情報知能工学部門

2017/5/10

15

あなたは新しい分類方法を提案できるのか?

29

30

理論的基礎(Theoretical�Foundations)

例(Examples): Formal‐languagetheory Automatatheory Algorithmics λ‐calculus Semantics Formalverification Typetheory Complexitytheory Logic

2017/5/10

Page 16: (Concepts on Programming Languages)stap.ait.kyushu-u.ac.jp/~zhao/course/2017/2017-L03...2017/5/10 1 プログラミング言語論 (Concepts on Programming Languages) 趙建軍 情報知能工学部門

2017/5/10

16

31

標準(Standardization)

ANSI (AmericanNationalStandardsInstitute)

IEEE (InstituteofElectricalandElectronicsEngineers)

BSI (BritishStandardInstitute) ISO (InternationalStandardsOrganization)

2017/5/10

32

歴史(History)

1951–55:Experimentaluseofexpressioncompilers

1956–60:FORTRAN,COBOL,LISP,Algol60 1961–65:APLnotation,Algol60(revised),

SNOBOL,CPL 1966–70:APL,SNOBOL4,FORTRAN66,BASIC,

SIMULA,Algol68,Algol‐W,BCPL 1971–75:Pascal,PL/1(Standard),C,Scheme,

Prolog 1976–80:Smalltalk,Ada,FORTRAN77,ML2017/5/10

Page 17: (Concepts on Programming Languages)stap.ait.kyushu-u.ac.jp/~zhao/course/2017/2017-L03...2017/5/10 1 プログラミング言語論 (Concepts on Programming Languages) 趙建軍 情報知能工学部門

2017/5/10

17

33

歴史(History)

1981–85:Smalltalk‐80,Prolog,Ada83 1986–90:C++,SML,Haskell 1991–95:Ada95,TCL,Perl 1996–2000:Java 2000–05:C#,Python,Ruby,Scala 2005–17: Go,R,......

2017/5/10

34

Page 18: (Concepts on Programming Languages)stap.ait.kyushu-u.ac.jp/~zhao/course/2017/2017-L03...2017/5/10 1 プログラミング言語論 (Concepts on Programming Languages) 趙建軍 情報知能工学部門

2017/5/10

18

35

36

Page 19: (Concepts on Programming Languages)stap.ait.kyushu-u.ac.jp/~zhao/course/2017/2017-L03...2017/5/10 1 プログラミング言語論 (Concepts on Programming Languages) 趙建軍 情報知能工学部門

2017/5/10

19

37

38

Page 20: (Concepts on Programming Languages)stap.ait.kyushu-u.ac.jp/~zhao/course/2017/2017-L03...2017/5/10 1 プログラミング言語論 (Concepts on Programming Languages) 趙建軍 情報知能工学部門

2017/5/10

20

39

y=10; x=y++; //  x=?, y=?

40

Page 21: (Concepts on Programming Languages)stap.ait.kyushu-u.ac.jp/~zhao/course/2017/2017-L03...2017/5/10 1 プログラミング言語論 (Concepts on Programming Languages) 趙建軍 情報知能工学部門

2017/5/10

21

Y=10; x=y++; //  x=10, y=11

int a[4]={1,2,3}, a[a[a[0]]]=?

41

Y=10; x=y++; //  x=10, y=11

int a[4]={1,2,3}, a[a[a[0]]]=3

42

Page 22: (Concepts on Programming Languages)stap.ait.kyushu-u.ac.jp/~zhao/course/2017/2017-L03...2017/5/10 1 プログラミング言語論 (Concepts on Programming Languages) 趙建軍 情報知能工学部門

2017/5/10

22

パラダイム(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.

43

パラダイム(paradigm)

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

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

トーマス・クーン:科学革命の構造(The structure of scientific revolutions) (パラダイム転換)

44

Page 23: (Concepts on Programming Languages)stap.ait.kyushu-u.ac.jp/~zhao/course/2017/2017-L03...2017/5/10 1 プログラミング言語論 (Concepts on Programming Languages) 趙建軍 情報知能工学部門

2017/5/10

23

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

45

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

プログラミングパラダイムは、プログラマにプログラムの見方を与えるものと言える。たとえば、 オブジェクト指向プログラミングにおいて、プ

ログラムとはオブジェクトをつくりそれを管理するものである。

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

46

Page 24: (Concepts on Programming Languages)stap.ait.kyushu-u.ac.jp/~zhao/course/2017/2017-L03...2017/5/10 1 プログラミング言語論 (Concepts on Programming Languages) 趙建軍 情報知能工学部門

2017/5/10

24

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

命令型言語パラダイム

関数型言語パラダイム

論理型言語パラダイム

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

47

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

48

Page 25: (Concepts on Programming Languages)stap.ait.kyushu-u.ac.jp/~zhao/course/2017/2017-L03...2017/5/10 1 プログラミング言語論 (Concepts on Programming Languages) 趙建軍 情報知能工学部門

2017/5/10

25

計算モデルの必要性

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

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

49

計算モデルの必要性

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

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

プログラムを入力から出力を得るものとする 例:数学的な関数 ただし、実際に入力を与えても、その答え

(出力)が導けるとは限らない50

Page 26: (Concepts on Programming Languages)stap.ait.kyushu-u.ac.jp/~zhao/course/2017/2017-L03...2017/5/10 1 プログラミング言語論 (Concepts on Programming Languages) 趙建軍 情報知能工学部門

2017/5/10

26

計算モデルとは

コンピュータによる計算機構を抽象的に捉えた数学的な枠組みであり, これにより計算に関する様々な議論が可能になる 計算するとはどういうことであるかの説明 計算モデルが変わるとプログラミング言語

の設計も変わる

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

51

計算モデル

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

52

Page 27: (Concepts on Programming Languages)stap.ait.kyushu-u.ac.jp/~zhao/course/2017/2017-L03...2017/5/10 1 プログラミング言語論 (Concepts on Programming Languages) 趙建軍 情報知能工学部門

2017/5/10

27

代表的な計算モデル

(逐次)計算モデル 抽象機械計算モデル 関数型計算モデル 論理型計算モデル 項書き換え型計算モデル

(並列分散)計算モデル プロセス代数(プロセスカルキュラス) イベント機械モデル(ペトリネット)

53

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

文法 BNF 制御構造 構造化プログラミング 変数、値、データ型 型代数、オブジェクト指向

抽象データ型 サブルーチンと呼出しクラス、継承、カプセル化 実行 部分計算、ネットワーク対応

検証、アサーション 入出力 イベント駆動

54

Page 28: (Concepts on Programming Languages)stap.ait.kyushu-u.ac.jp/~zhao/course/2017/2017-L03...2017/5/10 1 プログラミング言語論 (Concepts on Programming Languages) 趙建軍 情報知能工学部門

2017/5/10

28

プログラム理論

プログラムの正しさ (correctness)正当性と停止性

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

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

55

プログラムの意味論

プログラミング言語は言語である 言語は何かを表現するためのもの 表現しているものがその文の意味

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

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

待しているのか56

Page 29: (Concepts on Programming Languages)stap.ait.kyushu-u.ac.jp/~zhao/course/2017/2017-L03...2017/5/10 1 プログラミング言語論 (Concepts on Programming Languages) 趙建軍 情報知能工学部門

2017/5/10

29

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

操作的意味論 (OperationalSemantics) プログラムの状態をどのように変化させていく

のか

公理的意味論 (AxiomaticSemantics) プログラムの実行によってどんな性質が満たさ

れるのか

表示的意味論 (DenotationalSemantics) プログラムが意味するものを、具体的に対応付

ける

57

プログラミングの基本的な理解Fundamental�understanding

Tony Hoare (ACM Turing Award)

Page 30: (Concepts on Programming Languages)stap.ait.kyushu-u.ac.jp/~zhao/course/2017/2017-L03...2017/5/10 1 プログラミング言語論 (Concepts on Programming Languages) 趙建軍 情報知能工学部門

2017/5/10

30

プログラミングの基本的な理解Fundamental�understanding

What isthisprogramfor? Itsspecificationtellsyouitsfunction

How doesitwork? Annotationatinterfacesexplainshow

Why doesitwork? Thetheoryofprogrammingexplainswhy

Aretheanswersaccurate? Averifyingcompilerprovidesareliablecheck