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