PowerPoint 프레젠테이션

Download Report

Transcript PowerPoint 프레젠테이션

1장. 프로그래밍 언어의 역사
프로그래밍언어론
컴퓨터공학과 권기태
1
개요
언어의 설계와 구현을 이해하는 것
•
syntax – What a program looks like
•
semantics – What a program means
•
Implementation – How a program executed
특정 문제에 대해 가장 적합한 언어가 무엇인가?
•
Pascal, C – procedural, statement oriented
•
C++, Java, C#, Smalltalk – Object oriented
•
Prolog – Rule-based
프로그래밍언어론
컴퓨터공학과 권기태
2
Language Goals
During 1950s-1960s
•
프로그램을 효과적으로 실행하기 위해 컴파일함
언어 요소와 하드웨어 간에 직접적인 대응관계 – integers, reals, goto
statements
•
•
프로그래머는 싸고 기계는 비싸다
But today
•
효과적으로 생성된 프로그램을 컴파일함
•
CPU power와 메모리는 매우 싸다
언어 요소와 설계 개념 간에 직접적인 대응 관계 – encapsulation,
inheritance, assertions
•
프로그래밍언어론
컴퓨터공학과 권기태
3
1.2 고급 언어의 등장
프로그래밍 언어의 계층
프로그래밍언어론
컴퓨터공학과 권기태
4
고급언어와 고급언어가 아닌 것들 ...
고급언어
(HLL)
»자연어에 가장 가까움
»단어, 숫자, 수학 기호로
구성
»하드웨어가 직접 이해할
수 없음
기계어
(lowest level)
»인간의 자연어와는 가장
거리가 멀지만,
하드웨어의 자연어에 가장
가까움
»0과 1로만 구성
»“portable” 소스 코드
(하드웨어와 독립)
»하드웨어가 직접 이해할
수 있음
»Java, C/C++, COBOL,
FORTRAN, BASIC, Lisp,
Ada, 등.
»Portable하지 않음
(하드웨어에 종속)
프로그래밍언어론
컴퓨터공학과 권기태
5
어셈블리어 (middle level)
• 특징
– 기계어를 사람이 어느 정도 읽을 수 있게 만든 버전
– 단어, 약자, 문자, 숫자 등이 0과 1을 대치함
– 사람이 읽을 수 있는 코드에서 기계가 실행 가능한 코드로 쉽게 변환할
수 있음
– 기계어처럼 portable하지 못함 (하드웨어에 종속)
• 문제점
– 프로그램은 문장 형태가 아닌 문자들의 조합이므로 원시 코드에서 에러
를 찾기가 어렵고 시간이 많이 소요
– 프로그램은 활용 가능한 컴퓨터의 특성에 따라 많은 영향을 받음
– 프로그램 작성 방식이 컴퓨터의 성능을 최대로 발휘하도록 편법을 이용
하므로, 프로그램의 정확성 증명은 매우 어려움
– 새로운 컴퓨터가 등장하면 이전의 노력은 무시되고 또 다시 새로운 라
이브러리를 만들기 위한 과정이 시작
프로그래밍언어론
컴퓨터공학과 권기태
6
소스 코드를 기계어 코드로 바꾸는 방식
• “프로그램의 컴파일”
고급 언어로 된 소스 코드를 기계어 코드(object, or executable)로 번역함.
• “컴파일러(Compiler)”
HLL 소스 코드를 기계어(object, or executable) 코드로 번역하는 프로그램.
• “어셈블리(Assembly)”
어셈블리어로 된 소스 코드를 기계어 코드(object, or executable)로 번역함.
• “어셈블러(Assembler)”
어셈블리어 소스 코드를 기계어(object, or executable) 코드로 번역하는 프로
그램.
• 컴파일러는 특정한 타겟(target) 하드웨어를 알아야 함
프로그래밍언어론
컴퓨터공학과 권기태
7
컴파일러 vs. 어셈블러 vs. 인터프리터
• 컴파일러와 어셈블러
–번역(translation)은 사용자가 명령하는 별도의 단계
–번역(translation)은 프로그램의 실행 시간이 아닌 “off-line”에서 수행
• 인터프리터(Interpreters)
– 소스 코드를 목적 코드(object code)로 번역하는 다른 방식
–소스 코드에서 목적 코드로의 해석(interpretation)은 별도의 단계가 아님
–해석(translation)은 실행 시간인 “on-line”에서 수행
프로그래밍언어론
컴퓨터공학과 권기태
8
프로그래밍언어론
컴퓨터공학과 권기태
9
1.3 대표적인 언어들의 역사

FORTRAN
•
•
•
•
최초의 고급 언어
FORmula TRANslation: 일상적인 수식 표현을 사용하려는 의도
조건문: if (condition) true-label, false-label
1954년 John Backus 그룹의 FORTRAN 0의 개발 이후로
FORTARN I, II, III, IV, FORRAN 77, FORTRAN 90 등으로
지속적으로 발전




•
중요 특징
1)
2)
3)
4)
5)
6)
프로그래밍언어론
목적 코드의 효율성
단순성
습득의 용이성
확보된 사용자
고정된 필드: col. 1-5, 6, 7-72, 73-80
타입: A-H, I-N, O-Z
산술 IF 문: if (산술식) n1, n2, n3
DO 문: 인덱스 변수가 상향 증가(upward increment)
FORMAT 문: 입출력 제어
주석문: 첫 번째 열이 C로 시작
컴퓨터공학과 권기태
10

ALGOL 60
•
후대의 언어에 큰 영향을 끼친 언어 중의 하나
•
문법을 정의하기 위해 BNF를 최초로 이용
•
중요한 기여

블록 구조(begin – end): computation의 기본 단위

지역 변수들에 대한 scope 규칙: lexical scope rule

동적 변수

Call-by-value와 call-by-name

Recursive 프로시저

동적인 배열: 실행 시간에 크기 설정 가능

BNF를 이용하여 정의된 최초의 언어

반복문: for, while, repeat

선택 구조: if-then-else 문
•
성공한 측면: 가장 영향력이 큰 언어, 컴퓨터 과학에 큰 기여
•
실패한 측면: 널리 이용되지 못함(IBM 지원 결여), I/O 문이 없음
프로그래밍언어론
컴퓨터공학과 권기태
11

COBOL(COmmon Business Oriented Language)
•


특징

레코드와 같은 계층적인 데이터 구조

파일과 파일 조작 표현

데이터 디비전에 변수의 선언

자연어(영어)와 유사한 명령어 표현 : 가독성 향상 (?)
APL
•
특수한 문자 집합: 수학 기호와 유사
•
대화형 언어
•
전체 데이터 구조를 직접적으로 처리
SNOBOL
•
문자열(스트링) 처리
•
문자열이 기본 데이터형
프로그래밍언어론
컴퓨터공학과 권기태
12




BASIC(Beginner’s All-purpose Symbolic Instruction Code)
•
과학 기술이나 수학적인 배경이 없는 학생들을 위한 언어
•
문법 구조와 어휘가 단순
Simula
•
class 개념을 제안한 시뮬레이션 언어
•
객체 지향 언어에 큰 영향을 끼침
PL/I
•
FORTRAN + COBOL + ALGOL 60 + 예외 처리, 멀티태스킹, …
•
블록 구조, recursive 프로시저, 레코드, 포인터, …
Pascal
•
공통적인 개념을 통합한 교육용 언어
•
간결성과 사용자 정의 자료형을 강조
프로그래밍언어론
컴퓨터공학과 권기태
13




Modula-2
•
추상 데이터형 지원하기 위한 모듈 개념
•
분리 컴파일 가능
•
프로그래머를 위한, 프로그래머에 의한, 프로그래머의 언어
•
가독성이 떨어지고 에러 메시지 불명료
C
LISP
•
리스트 구조와 함수의 recursive 적용: S-expression과 함수형 언어
•
Garbage collection
•
과거 인공지능 분야의 중심 언어
Smalltalk
•
Alan Kay: 컴퓨터는 이해력과 창의력을 위한 교육 도구
•
아이콘, 윈도우, 마우스 제어 시스템
•
성공적인 객체 지향 언어
프로그래밍언어론
컴퓨터공학과 권기태
14

C++
•



C의 superset (객체 지향 개념인 클래스, 예외 처리 등 추가)
ADA
•
임베디드 컴퓨터 시스템의 프로그래밍 용도
•
DoD가 프로그래밍 언어 표준화를 시도
•
Pascal에 기반을 두고 예외 처리, 자료 추상화, 병행성 등등 추가
Prolog
•
선언적(비절차적)인 논리 언어
•
인공 지능 분야에 널리 이용
Java
•
가전 제품에 들어갈 간단하고 버그 없는 소프트웨어 개발 목적
간단하고, 객체 지향적이며, 분산적이고, 강력하며, 보안성이 높고,
하드웨어와 무관하고, 고성능이며, 멀티 스레드 동적 언어로 정의됨
•
프로그래밍언어론
컴퓨터공학과 권기태
15
고급 언어의 발달 과정
1956
1957
1958
1959
1960
1961
1962
FORTRAN-I
FORTRAN-II
ALGOL58
COBOL
APL
FORTRAN-IV
1964
PL/I
1966
1967
1968
BASIC
SIMULA-I
ALGOL-W
BCPL
SIMULA-67
ALGOL-68
1971
1972
1977
ALGOL60
PASCAL
C
FORTRAN-77
1979
1980
ADA
SMALLTALK80
1982
C++
MODULA2
1985
1986
Postscript
1989
1990
Perl
1993
Visual Basic, Visual C, Visual C++
1995
Tcl/Tk
Java
프로그래밍언어론
±×¸² 1.1 컴퓨터공학과
°í±Þ ¾ð¾îÀÇ ¹ß´Þ °úÁ¤권기태
16
1.5 프로그래밍 언어의 분류

계산 모델에 의한 분류
•
명령형 언어(imperative language)
변수와 지정문(assignment statement, 배정문, 치환문, 할당문) 등의
명령으로 기억 장소의 내용을 조작하여 계산 과정 수행

•
•
•
함수형 언어(functional language)

함수의 응용에 의해 기능을 수행

적용형 언어(applicative language)
논리 언어(logic language)

계산을 위해 기호 논리와 집합을 이용

논리 관계의 집합으로 데이터베이스를 구축한 후, 질의가 평가됨
객체 지향 언어(object-oriented language)

프로그래밍언어론
오퍼레이션과 데이터 구조가 함께 객체에 포함
컴퓨터공학과 권기태
17
1.5 프로그래밍 언어의 분류(계속)

용도에 의한 분류
•
범용 언어(general purpose language)

•
비교적 다양한 분야에서 사용되는 언어
특수 목적용 언어(special purpose language)
프로그래밍언어론

병렬 언어(parallel language): 멀티 타스킹 작업 정의

데이터베이스 질의어(database query language): SQL

식자 언어(typesetting language): Tex, LaTex

페이지 기술 언어(page description language): Postscript, HTML

명령어 언어(command language): 프로세스 정의 언어, UNIX shell

스프레드 시트 프로그래밍 언어: Lotus 1-2-3, Excel macro
컴퓨터공학과 권기태
18