17
컴컴컴컴컴컴 컴컴컴 컴컴컴컴컴컴컴컴 1 1 컴 . 컴컴컴컴컴 컴컴컴 컴컴

1 장 . 프로그래밍 언어의 역사

Embed Size (px)

DESCRIPTION

1 장 . 프로그래밍 언어의 역사. 개요 언어 : 음성 또는 문자를 수단으로 하여 사람의 감정 , 사상을 표현하여 전달하는 활동 혹은 방법 프로그래밍 언어 : 사람과 컴퓨터 사이의 대화를 가능하게 해 주는 것으로서 계산 과정 ( 자료구조 , 알고리즘 ) 을 서술하기 위한 임의의 기호 , 좋은 프로그램을 작성하는데 도움이 되어야 한다 . 좋은 프로그램 이 가져야 할 조건 : 프로그램을 읽고 이해하기 쉬어야 하고 프로그램이 효율적으로 번역되어야 하고 프로그램이 효율적으로 실행되어야 하고 - PowerPoint PPT Presentation

Citation preview

Page 1: 1 장 .  프로그래밍 언어의 역사

컴퓨터공학과 권기태프로그래밍언어론 1

1 장 . 프로그래밍 언어의 역사1 장 . 프로그래밍 언어의 역사

Page 2: 1 장 .  프로그래밍 언어의 역사

컴퓨터공학과 권기태프로그래밍언어론 2

개요 언어 : 음성 또는 문자를 수단으로 하여 사람의 감정 , 사상을 표현하여 전달하는 활동 혹은 방법 프로그래밍 언어 : 사람과 컴퓨터 사이의 대화를 가능하게 해 주는 것으로서 계산 과정 ( 자료구조 , 알고리즘 ) 을 서술하기 위한 임의의 기호 , 좋은 프로그램을 작성하는데 도움이 되어야 한다 .

좋은 프로그램 이 가져야 할 조건 :

(1)프로그램을 읽고 이해하기 쉬어야 하고

(2)프로그램이 효율적으로 번역되어야 하고

(3)프로그램이 효율적으로 실행되어야 하고

(4)프로그램의 수정이 쉬어야 한다 .

문법 구조 (syntax): 언어의 기호가 어떻게 결합될 수 있는가를 기술하는 규칙들의 집합 의미 구조 (semantics): 문법적으로 옳은 각 문장이 어떻게 해석되어야 하는가를 정의하는 것

Page 3: 1 장 .  프로그래밍 언어의 역사

컴퓨터공학과 권기태프로그래밍언어론 3

1.2 고급 언어의 등장

프로그래밍 언어의 계층

Page 4: 1 장 .  프로그래밍 언어의 역사

컴퓨터공학과 권기태프로그래밍언어론 4

고급언어와 고급언어가 아닌 것들 ...

고급언어 (HLL)

»자연어에 가장 가까움

»단어 , 숫자 , 수학 기호로 구성

»하드웨어가 직접 이해할 수 없음

»“portable” 소스 코드 (하드웨어와 독립 )

»Java, C/C++, COBOL, FORTRAN, BASIC, Lisp, Ada, 등 .

기계어(lowest level)

»인간의 자연어와는 가장 거리가 멀지만 , 하드웨어의 자연어에 가장 가까움»0 과 1 로만 구성»하드웨어가 직접 이해할 수 있음»Portable 하지 않음 (하드웨어에 종속 )

Page 5: 1 장 .  프로그래밍 언어의 역사

컴퓨터공학과 권기태프로그래밍언어론 5

어셈블리어 (middle level)• 특징

– 기계어를 사람이 어느 정도 읽을 수 있게 만든 버전– 단어 , 약자 , 문자 , 숫자 등이 0 과 1 을 대치함– 사람이 읽을 수 있는 코드에서 기계가 실행 가능한 코드로 쉽게 변환할 수 있음– 기계어처럼 portable 하지 못함 ( 하드웨어에 종속 )

• 문제점– 프로그램은 문장 형태가 아닌 문자들의 조합이므로 원시 코드에서 에러를 찾기가 어렵고 시간이 많이 소요– 프로그램은 활용 가능한 컴퓨터의 특성에 따라 많은 영향을 받음– 프로그램 작성 방식이 컴퓨터의 성능을 최대로 발휘하도록 편법을 이용하므로 , 프로그램의 정확성 증명은 매우 어려움– 새 로 운 컴 퓨 터 가 등 장 하 면 이 전 의 노 력 은 무 시 되 고 또 다 시 새 로 운 라이브러리를 만들기 위한 과정이 시작

Page 6: 1 장 .  프로그래밍 언어의 역사

컴퓨터공학과 권기태프로그래밍언어론 6

소스 코드를 기계어 코드로 바꾸는 방식

• “ 프로그램의 컴파일”고급 언어로 된 소스 코드를 기계어 코드 (object, or executable) 로 번역함 .

• “ 컴파일러 (Compiler)”HLL 소스 코드를 기계어 (object, or executable) 코드로 번역하는 프로그램 .

• “ 어셈블리 (Assembly)”어셈블리어로 된 소스 코드를 기계어 코드 (object, or executable) 로 번역함 .

• “ 어셈블러 (Assembler)”어셈블리어 소스 코드를 기계어 (object, or executable) 코드로 번역하는 프로그램 .

• 컴파일러는 특정한 타겟 (target) 하드웨어를 알아야 함

Page 7: 1 장 .  프로그래밍 언어의 역사

컴퓨터공학과 권기태프로그래밍언어론 7

컴파일러 vs. 어셈블러 vs. 인터프리터

• 컴파일러와 어셈블러–번역 (translation) 은 사용자가 명령하는 별도의 단계–번역 (translation) 은 프로그램의 실행 시간이 아닌 “ off-line” 에서 수행

• 인터프리터 (Interpreters) – 소스 코드를 목적 코드 (object code) 로 번역하는 다른 방식–소스 코드에서 목적 코드로의 해석 (interpretation) 은 별도의 단계가 아님–해석 (translation) 은 실행 시간인 “ on-line” 에서 수행

Page 8: 1 장 .  프로그래밍 언어의 역사

컴퓨터공학과 권기태프로그래밍언어론 8

Page 9: 1 장 .  프로그래밍 언어의 역사

컴퓨터공학과 권기태프로그래밍언어론 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) 고정된 필드 : col. 1-5, 6, 7-72, 73-802) 타입 : A-H, I-N, O-Z3) 산술 IF 문 : if ( 산술식 ) n1, n2, n34) DO 문 : 인덱스 변수가 상향 증가 (upward increment)5) FORMAT 문 : 입출력 제어6) 주석문 : 첫 번째 열이 C 로 시작

Page 10: 1 장 .  프로그래밍 언어의 역사

컴퓨터공학과 권기태프로그래밍언어론 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 문이 없음

Page 11: 1 장 .  프로그래밍 언어의 역사

컴퓨터공학과 권기태프로그래밍언어론 11

COBOL(COmmon Business Oriented Language)

• 특징 레코드와 같은 계층적인 데이터 구조 파일과 파일 조작 표현 데이터 디비전에 변수의 선언 자연어 ( 영어 ) 와 유사한 명령어 표현 : 가독성 향상 (?)

APL

• 특수한 문자 집합 : 수학 기호와 유사

• 대화형 언어

• 전체 데이터 구조를 직접적으로 처리

SNOBOL

• 문자열 ( 스트링 ) 처리

• 문자열이 기본 데이터형

Page 12: 1 장 .  프로그래밍 언어의 역사

컴퓨터공학과 권기태프로그래밍언어론 12

BASIC(Beginner’s All-purpose Symbolic Instruction Code)

• 과학 기술이나 수학적인 배경이 없는 학생들을 위한 언어

• 문법 구조와 어휘가 단순

Simula

• class 개념을 제안한 시뮬레이션 언어

• 객체 지향 언어에 큰 영향을 끼침

PL/I

• FORTRAN + COBOL + ALGOL 60 + 예외 처리 , 멀티태스킹 , …

• 블록 구조 , recursive 프로시저 , 레코드 , 포인터 , …

Pascal

• 공통적인 개념을 통합한 교육용 언어

• 간결성과 사용자 정의 자료형을 강조

Page 13: 1 장 .  프로그래밍 언어의 역사

컴퓨터공학과 권기태프로그래밍언어론 13

Modula-2

• 추상 데이터형 지원하기 위한 모듈 개념

• 분리 컴파일 가능 C

• 프로그래머를 위한 , 프로그래머에 의한 , 프로그래머의 언어

• 가독성이 떨어지고 에러 메시지 불명료 LISP

• 리스트 구조와 함수의 recursive 적용 : S-expression 과 함수형 언어

• Garbage collection

• 과거 인공지능 분야의 중심 언어 Smalltalk

• Alan Kay: 컴퓨터는 이해력과 창의력을 위한 교육 도구

• 아이콘 , 윈도우 , 마우스 제어 시스템

• 성공적인 객체 지향 언어

Page 14: 1 장 .  프로그래밍 언어의 역사

컴퓨터공학과 권기태프로그래밍언어론 14

C++

• C 의 superset (객체 지향 개념인 클래스 , 예외 처리 등 추가 )

ADA

• 임베디드 컴퓨터 시스템의 프로그래밍 용도

• DoD 가 프로그래밍 언어 표준화를 시도

• Pascal 에 기반을 두고 예외 처리 , 자료 추상화 , 병행성 등등 추가

Prolog

• 선언적 ( 비절차적 ) 인 논리 언어

• 인공 지능 분야에 널리 이용

Java

• 가전 제품에 들어갈 간단하고 버그 없는 소프트웨어 개발 목적

• 간단하고 , 객체 지향적이며 , 분산적이고 , 강력하며 , 보안성이 높고 , 하드웨어와 무관하고 , 고성능이며 , 멀티 스레드 동적 언어로 정의됨

Page 15: 1 장 .  프로그래밍 언어의 역사

컴퓨터공학과 권기태프로그래밍언어론 15

고급 언어의 발달 과정 19561957 FORTRAN-I1958 FORTRAN-II ALGOL581959 COBOL1960 APL ALGOL6019611962 FORTRAN-IV 1964 PL/I BASIC SIMULA-I

1966 ALGOL-W1967 BCPL SIMULA-671968 ALGOL-68

1971 PASCAL1972 C

1977 FORTRAN-77

1979 ADA1980 SMALLTALK80

1982 C++ MODULA2

19851986 Postscript

19891990 Perl

1993 Visual Basic, Visual C, Visual C++

1995 Tcl/Tk Java

±×¸² 1.1 °í±Þ ¾ð¾îÀÇ ¹ß´Þ °úÁ¤

Page 16: 1 장 .  프로그래밍 언어의 역사

컴퓨터공학과 권기태프로그래밍언어론 16

1.5 프로그래밍 언어의 분류 계산 모델에 의한 분류

• 명령형 언어 (imperative language) 변수와 지정문 (assignment statement, 배정문 , 치환문 , 할당문 ) 등의 명령으로 기억 장소의 내용을 조작하여 계산 과정 수행

• 함수형 언어 (functional language) 함수의 응용에 의해 기능을 수행

적용형 언어 (applicative language)

• 논리 언어 (logic language) 계산을 위해 기호 논리와 집합을 이용

논리 관계의 집합으로 데이터베이스를 구축한 후 , 질의가 평가됨

• 객체 지향 언어 (object-oriented language) 오퍼레이션과 데이터 구조가 함께 객체에 포함

Page 17: 1 장 .  프로그래밍 언어의 역사

컴퓨터공학과 권기태프로그래밍언어론 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