Transcript CS242. Lisp
프로그래밍 언어론
창병모
숙명여대 컴퓨터과학부
숙대 창병모
1
교재 및 참고자료
교재
Kenneth C. Louden, Programming languages : Principles
and Practice, 2nd Edition, Thomson
[번역판] 김도형,창병모,하상호, 프로그래밍 언어: 원리와 실제,
제2판, 희중당
참고문헌
John C. Mitchell, Concepts in Programming languages,
Cambridge University Press, 2003
창병모, Playing with Java, 2011, 교보문고
© 숙대 창병모
2
강의 목표
프로그래밍 언어의 이론 및 실제
프로그래밍 언어 이론 및 실제가 필요하다.
프로그래밍 언어 및 컴파일러 이론
언어 구현 기술
객체-지향 프로그래밍 언어
© 숙대 창병모
3
1장 서론
프로그래밍 언어란 ?
프로그래밍 언어의 역할
프로그래밍 모델
프로그래밍 언어 정의
Reading Chap1, Chap2
© 숙대 창병모
4
1.1 프로그래밍 언어란?
숙대 창병모
5
프로그래밍 언어란 ?
여러 관점에서 생각해 볼 수 있다.
...
사람 요구로부터 그 사이의
언어들
시작한 언어
기계로부터
시작한 언어
기계를 돌리기 위한 것이 프로그래밍 언어다.
사람이 작성한 프로그램을 돌리기 위한 것이 기계이다.
© 숙대 창병모
6
프로그래밍 언어란 ?
기계를 돌리기 위한 것이
프로그래밍 언어다
© 숙대 창병모
사람이 작성한 프로그램을
돌리기 위한 것이 기계다
7
프로그래밍 언어 종류
범용 언어
C, C++, Java
Visual Basic
Object Pascal: Delphi, Kylix, …
Lisp, Scheme, ML
스크립트 언어
Perl, PHP
TCL, Shell
특수 언어
SQL
Prolog
© 숙대 창병모
8
프로그래밍 언어 사용 현황
© 숙대 창병모
9
프로그래밍 언어의 중요성
주요 프로그래밍 도구
소프트웨어의 발전은 프로그래밍 언어를 매개로 하여 발전해
왔다.
예
객체-지향
객체-지향
객체-지향
객체-지향
© 숙대 창병모
프로그래밍 언어
프로그래밍
데이터베이스 시스템
소프트웨어 공학
10
프로그래밍 언어의 중요성
언어의 구조가 사고의 범위를 지배한다 ?
언어에 따라 사고방식이 달라진다.
절차형(명령형) 언어(procedural language)
함수형 언어(functional language)
논리 언어(logic language)
객체-지향 언어(object-oriented language)
© 숙대 창병모
11
왜 프로그래밍 언어를 배울까?
응용에 적절한 언어의 선택
모든 응용에 적합한 언어는 없다.
프로그래밍 언어에 대한 깊이 있는 이해
새로운 언어를 쉽게 배울 수 있다.
C++를 알고 있으면 Java는 쉽게 배울 수 있다.
새로운 언어 설계 능력 배양
대부분의 소프트웨어 시스템은 언어를 통해서
사용자와 상호작용한다.
컴퓨팅에 대한 전체적인 시각을 갖게 한다.
객체-지향 컴퓨팅, 인터넷 컴퓨팅
© 숙대 창병모
12
그러면 무엇을 공부할까?
주요 언어 원리 및 패러다임
기본 이론
명령형, 객체-지향 언어
프로그래밍 언어가 제공하는 주요 기능들
동기, 원리
사용법
프로그래밍 언어의 구현
주요 구현 기술
성능 향상
주요 연구 주제
새로운 언어와 도구를 위한 연구
© 숙대 창병모
13
프로그래밍 언어란 무엇인가 ?
다시 한번 생각해 봅시다. 프로그래밍 언어는 무엇일까요
A programming language is
a notational system for
describing computation
in machine-readable and
human-readable form.
© 숙대 창병모
14
프로그래밍 언어란 무엇인가 ?
계산(Computation)
데이터 조작
텍스트 처리
정보 저장 및 검색
기계 읽기(Machine readability)
효율적인 번역 혹은 실행
사람 읽기(Human readability)
프로그래밍 편의성
컴퓨터 연산들의 이해하기 쉬운 추상화 혹은 요약
© 숙대 창병모
15
1.2 프로그래밍 언어의 발전과정
숙대 창병모
16
프로그래밍 언어 발전 과정
역사적 발전 과정
최초의 컴퓨터(ENIAC)가 만들어지면서
프로그래밍 언어가 개발되기 시작했을 것이다.
두 가지 질문?
그때 컴퓨터는 어떤 컴퓨터였을까요?
어떤 프로그래밍 언어가 개발되었을까요?
컴퓨터
Von Neuman model computer
폰 노이만 모델 컴퓨터
초창기 프로그램
컴퓨터에 명령하는 기계어 명령어들의 집합
© 숙대 창병모
17
© 숙대 창병모
18
Von Neuman 모델 컴퓨터
주메모리
프로그램
적재
프로그램
(명령어 + 데이터)
명령어 실행 결과
CPU
© 숙대 창병모
명령어, 데이터 인출
PC
19
Von Neuman 모델 컴퓨터
프로그램 내장 방식 컴퓨터
stored program computer
메모리에 프로그램(명령어와 데이터) 저장
메모리에 저장된 명령어 순차 실행
a single CPU sequentially execute instructions in memory
PC
다음 실행할 명령어를 가리킨다.
명령어
메모리에 저장된 값을 조작 혹은 연산
instructions operate on values stored in memory
© 숙대 창병모
20
Von Neuman 컴퓨터 프로그램 실행
CPU의 인출-해석-실행(fetch-decode-execute) 주기 반복
CPU는 주 메모리 내에 저장되어 있는 프로그램의 명령어를 한
번에 하나씩 읽어 들여 해석하고 실행한다.
주 메모리로부터 명령어 인출
인출
실행
명령어를 실행
© 숙대 창병모
해석
명령어 의미 해석
21
컴퓨터 예: 3 digit computer
메모리
주소 0 ~ 999
한 주소에 3자리 숫자까지 저장
PC
다음 실행할 명령어가 저장된 주소를 갖는다.
레지스터 10개
R0, R1, R2, …, R9
한 레지스터에 3자리 숫자까지 저장
모든 레지스터는 000으로 초기화되어 있다.
명령어 10개
한 명령어 3자리 숫자로 구성
© 숙대 창병모
22
명령어 예(Instructions)
멈추어라
100 : halt
레지스터와 상수 연산
2dn : set register d to n
3dn : add n to register d
4dn : multiply register d by n
299
399
492
레지스터와 레지스터 연산
5ds : set register d to the value of register s
521
6ds : add the value of register s to register d
621
7ds : multiply register d by the value of register s
721
© 숙대 창병모
23
명령어(Instructions)
적재(load)
메모리 값을 레지스터에 적재(load)
8da :
set register d to the value in RAM
whose address is in register a
d는 데이터 레지스터 a는 주소 레지스터 표시
892
저장(store)
레지스터 값을 메모리에 저장(store)
9sa :
set the value in RAM whose address is in register a
to that of register s
992
Goto
0ds : goto the location in register d unless register s contains 0
082
© 숙대 창병모
24
프로그램
프로그램
일련의 연속된 명령어들
메모리의 0번지부터 적재되어 실행된다.
명시되지 않는 부분의 메모리는 000으로 초기화
© 숙대 창병모
25
예제 프로그램
0:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
299
492
495
399
492
495
399
283
279
689
078
100
000
000
© 숙대 창병모
26
1.3 추상화(Abstraction)
숙대 창병모
27
명령형 언어(Imperative language)
명령형 언어의 발전
Imperative programming languages began by
imitating and abstracting the operations of
von Neuman model computer
예
Fortran, Basic, C
특징: 폰 노이만 모델 컴퓨터의 특징을 많이 갖고 있겠지요.
순차적 명령어 실행
메모리 위치를 나타내는 변수 사용
배정문을 사용한 변수 값 변경
그러나, 사람의 필요보다는 컴퓨터 모델을 기반으로 한 언어
© 숙대 창병모
28
Abstraction
Abstraction 무슨 말일까요?
요약/추상화
Abstraction is a process by which higher concepts
are derived from the usage and classification of
real or concrete concepts.
© 숙대 창병모
29
추상화
명령형 언어는 컴퓨터의 무엇을 요약했을까요?
컴퓨터의 데이터, 연산, 명령어 등을 추상화/요약
데이터 추상화
제어 추상화
© 숙대 창병모
30
데이터 추상화(Data Abstraction)
기본 추상화
기본 데이터 관련 요약
변수(variable)
데이터 값을 저장하는 메모리 위치
메모리 120 번지 => 변수 x
데이터 타입(data type)
값들의 종류에 대한 이름
예: int, float, double, …
© 숙대 창병모
31
데이터 추상화
구조적 추상화
관련된 여러 값/변수들의 모음을 요약
예
배열
같은 타입의 연속된 변수들의 모음
레코드(구조체)
© 숙대 창병모
다른 타입의 연속된 변수들의 모음
32
제어(Control)
QnA #1
제어(control) 무엇을 제어한다는 말인가요?
Control flow ?
QnA #2
제어와 관련된 문장들은 어떤 것들이 있을까요?
© 숙대 창병모
33
제어 추상화(Control Abstraction)
기본 추상화
몇 개의 기계어 명령어들을 하나의 문장으로 요약
배정문
// 가정: R2가 X의 주소 저장
abstraction
X = X+3
892
393
992
// LOAD R9, X
// ADD R9, 3
// STORE R9, X
goto 문
jump 명령어의 요약
0ds
© 숙대 창병모
34
제어 추상화
구조적 제어 추상화
테스트 내의 중첩된 기계어 명령어들을 하나의 문장으로 요약
예
if-문
switch-문 C
for, while, …
© 숙대 창병모
35
제어 추상화
예
while (condition) {
statements
}
abstraction
L1: if (~condition) GOTO L2
code for statements
GOTO L1
L2 : ...
장점
기계에 대한 추상화(요약된) 관점
다른 제어 문장들과 중첩되어 사용될 수 있다.
© 숙대 창병모
36
제어 추상화
프로시저(함수, 메쏘드)
선언
일련의 계산 과정을 하나의 이름으로 요약해서 정의
호출
이름과 실 매개변수를 이용하여 호출
A:
…
GOTO B
C:
B:
…
GOTO C
© 숙대 창병모
37
통합 추상화(Unit Abstraction)
추상 데이터 타입
(데이터 + 연산)
데이터와 관련된 연산들을 통합하여 요약
예
Modula-2의 모듈
Ada의 패키지
C++, Java 등의 클래스
© 숙대 창병모
38
1.4 다른 프로그래밍 모델
숙대 창병모
39
다른 프로그래밍 모델
다른 프로그래밍 모델은 없을까 ?
사람의 요구로부터 시작된 언어들도 있겠지요
함수형 언어(functional language)
논리 언어(logic language)
객체-지향 언어(object-oriented language)
© 숙대 창병모
40
함수형 언어(Functional language)
기본 모델
수학 함수를 기반으로 하는 언어
프로그램: 입력을 받아 처리한 후에 출력을 하는 함수
함수를 값에 적용(application)
매개변수 전달(parameter passing)
반환 값(return value)
특징
변수 및 배정문이 없음
자기호출(recursion)에 의한 반복
루프 같은 반복문은 없음
© 숙대 창병모
41
함수형 언어(Functional language)
예제
(define (gcd u v)
( if (= v 0) u
(gcd v (remainder u v))
)
)
장점
기계 모델과 무관
수학을 기반으로 프로그램의 의미를 명확하게 정의할 수 있다.
예
ML, Scheme, Haskell
© 숙대 창병모
42
논리 언어 (Logic language)
기본 모델
기호 논리를 기반으로 함
선언적으로 프로그램을 작성하는 언어
프로그램
문제를 해결하는 방법보다 문제가 무엇인지를 기술하는 논리 문장
들의 집합
예제
gcd(U,V,U) :- V = 0.
gcd(U,V,X) :- V > 0, gcd(V, U mod V,X).
© 숙대 창병모
43
논리 언어 (Logic language)
특징
루프나 선택문 등가 같은 제어 추상화가 없다.
제어는 하부 시스템(해석기)에 의해 제공된다.
변수는 메모리 위치가 아니라 부분 결과 값에 대한 이름이다.
장점
기계-독립적이고 정확한 의미구조를 가지고 있다.
선언적 프로그래밍이 가능하다.
Prolog
대표적인 논리언어
© 숙대 창병모
44
객체지향 언어(Object-oriented language)
객체(object)
데이터와 관련 연산들의 모음
계산과정(computation)
객체들 사이의 상호작용
클래스(class)
객체에 대한 타입 정의
객체는 클래스의 한 실체(instance)이다.
© 숙대 창병모
45