Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
2017/5/10
1
プログラミング言語論(ConceptsonProgrammingLanguages)
趙 建軍情報知能工学部門
1
第3回:Introduction(講義の紹介)
2017.04.27
2
2017/5/10
2
お知らせ
3
5月1日(月曜日)は木曜日の授業を行いますが、海外出張のため、休講致します。
講義内容と目的
講義の目的 プログラミング言語に関するアイデアを一
通り習得すること
講義の内容 プログラミング言語パラダイム プログラミング言語の諸要素 プログラム理論 プログラムの意味論
4
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
2017/5/10
4
初期のプログラミング言語 (まとめ)
最初の言語=機械語、Assembly 複雑な計算を書くのに大変時間がかかる デバッグに多大な時間が取られる
数式を書くように記述して、自動的にプログラムを出す仕組みが欲しい
自動数式変換=FORmula TRANslator FORTRAN (1956)
7
プログラミング言語とは?
コンピュータに対する指示 (instruction)を記述するための人工言語である
この一連の指示をプログラムと呼び、それを記述することをプログラミングと呼ぶ
8
2017/5/10
5
9
プログラミング言語の目的
プログラミングの労力を軽減すること
2017/5/10
10
プログラミング言語の目的
プログラミングの労力を軽減すること
2017/5/10
2017/5/10
6
11
プログラミング言語の必要条件
プログラムを書く記法が定義されていること 文脈自由文法(Context-free Grammar, CFG)
2017/5/10
12
プログラミング言語の必要条件
プログラムを書く記法が定義されていること BNF
2017/5/10
2017/5/10
7
13
プログラミング言語の必要条件
コンパイラ(または言語処理系)が実現できること
2017/5/10
14
プログラミング言語の必要条件
コンパイラ(または言語処理系)が実現できること
2017/5/10
2017/5/10
8
15
プログラミング言語の持つべき望ましい性質
2017/5/10
16
プログラミング言語の持つべき望ましい性質
2017/5/10
2017/5/10
9
17
プログラミング言語の持つべき望ましい性質
簡潔・明晰な表現機構
高い記述能力
プログラムに明確で、曖昧さのない意味を与えられること
プログラムの信頼性、再利用性、テスト容易性を高める機構
高品質のコードを生成するコンパイラ(言語処理系)が実現可能
2017/5/10
So�Many�Languages�!!!
2017/5/10
10
プログラミング言語の分類
19
プログラミング言語の分類 (1)
記述と抽象度のレベル (Abstraction) 機械語 アセンブリ言語 高級言語
20
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#
2017/5/10
12
プログラミング言語の分類 (3)
用途 科学技術計算用言語 ビジネス用 人工知能用言語 ネットワークプログラミング用 特殊用途用(シミュレーション用、データ
ベース管理、…)
23
24
プログラミング言語の分類 (3)
2017/5/10
2017/5/10
13
25
プログラミング言語の分類 (4)
26
プログラミング言語の分類 (4)
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
2017/5/10
15
あなたは新しい分類方法を提案できるのか?
29
30
理論的基礎(Theoretical�Foundations)
例(Examples): Formal‐languagetheory Automatatheory Algorithmics λ‐calculus Semantics Formalverification Typetheory Complexitytheory Logic
2017/5/10
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
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
2017/5/10
18
35
36
2017/5/10
19
37
38
2017/5/10
20
39
y=10; x=y++; // x=?, y=?
40
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
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
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
2017/5/10
24
プログラミング言語パラダイム (2)
命令型言語パラダイム
関数型言語パラダイム
論理型言語パラダイム
オブジェクト指向型言語パラダイム
47
プログラミング言語パラダイム (3)
48
2017/5/10
25
計算モデルの必要性
世の中の情報システム(コンピュータや生物)は非常に複雑
この情報システムがどのような原理に基づくかを知るには数学的基盤を持つ抽象的な枠組みを導入する必要がある
49
計算モデルの必要性
計算機のハードウェア 複雑すぎて扱えない
CやPascalなどで書かれたプログラム 数学的な厳密さを持つとは限らない
プログラムを入力から出力を得るものとする 例:数学的な関数 ただし、実際に入力を与えても、その答え
(出力)が導けるとは限らない50
2017/5/10
26
計算モデルとは
コンピュータによる計算機構を抽象的に捉えた数学的な枠組みであり, これにより計算に関する様々な議論が可能になる 計算するとはどういうことであるかの説明 計算モデルが変わるとプログラミング言語
の設計も変わる
プログラミング言語パラダイムの最重要かつ主要な構成要素
51
計算モデル
情報システムの抽象的な枠組み=計算モデル
52
2017/5/10
27
代表的な計算モデル
(逐次)計算モデル 抽象機械計算モデル 関数型計算モデル 論理型計算モデル 項書き換え型計算モデル
(並列分散)計算モデル プロセス代数(プロセスカルキュラス) イベント機械モデル(ペトリネット)
53
プログラミング言語の諸要素
文法 BNF 制御構造 構造化プログラミング 変数、値、データ型 型代数、オブジェクト指向
抽象データ型 サブルーチンと呼出しクラス、継承、カプセル化 実行 部分計算、ネットワーク対応
検証、アサーション 入出力 イベント駆動
54
2017/5/10
28
プログラム理論
プログラムの正しさ (correctness)正当性と停止性
2つのプログラムが等しいということ 入力と出力の関係が等しいこと プログラムの計算の仕方も含めて等しいこと
プログラムによって計算できること、できないこと 数学的に定義できる関数 プログラミング言語によって表現できる関数 停止が飛翔できるプログラムで表現できる関数
55
プログラムの意味論
プログラミング言語は言語である 言語は何かを表現するためのもの 表現しているものがその文の意味
プログラムは何を表現しているのか プログラムは、計算機に何を要請している
のか プログラムが正しいということは、何を期
待しているのか56
2017/5/10
29
プログラミング言語の意味論
操作的意味論 (OperationalSemantics) プログラムの状態をどのように変化させていく
のか
公理的意味論 (AxiomaticSemantics) プログラムの実行によってどんな性質が満たさ
れるのか
表示的意味論 (DenotationalSemantics) プログラムが意味するものを、具体的に対応付
ける
57
プログラミングの基本的な理解Fundamental�understanding
Tony Hoare (ACM Turing Award)
2017/5/10
30
プログラミングの基本的な理解Fundamental�understanding
What isthisprogramfor? Itsspecificationtellsyouitsfunction
How doesitwork? Annotationatinterfacesexplainshow
Why doesitwork? Thetheoryofprogrammingexplainswhy
Aretheanswersaccurate? Averifyingcompilerprovidesareliablecheck