고급 언어로 된 소스 코드를 기계어 코드(object, or executable)로 번역
Download
Report
Transcript 고급 언어로 된 소스 코드를 기계어 코드(object, or executable)로 번역
1장. 프로그래밍 언어의 역사
프로그래밍언어론
컴퓨터공학과 권기태
1
개요
언어: 음성 또는 문자를 수단으로 하여 사람의 감정, 사상을 표현하여
전달하는 활동 혹은 방법
프로그래밍 언어: 사람과 컴퓨터 사이의 대화를 가능하게 해 주는 것으로서
계산 과정(자료구조, 알고리즘)을 서술하기 위한 임의의 기호, 좋은 프로그램을
작성하는데 도움이 되어야 한다.
좋은 프로그램 이 가져야 할 조건:
(1)프로그램을 읽고 이해하기 쉬어야 하고
(2)프로그램이 효율적으로 번역되어야 하고
(3)프로그램이 효율적으로 실행되어야 하고
(4)프로그램의 수정이 쉬어야 한다.
문법 구조(syntax): 언어의 기호가 어떻게 결합될 수 있는가를 기술하는
규칙들의 집합
의미 구조(semantics): 문법적으로 옳은 각 문장이 어떻게 해석되어야
하는가를 정의하는 것
프로그래밍언어론
컴퓨터공학과 권기태
2
1.2 고급 언어의 등장
프로그래밍 언어의 계층
프로그래밍언어론
컴퓨터공학과 권기태
3
고급언어와 고급언어가 아닌 것들 ...
고급언어
(HLL)
»자연어에 가장 가까움
»단어, 숫자, 수학 기호로
구성
»하드웨어가 직접 이해할
수 없음
기계어
(lowest level)
»인간의 자연어와는 가장
거리가 멀지만,
하드웨어의 자연어에 가장
가까움
»0과 1로만 구성
»“portable” 소스 코드
(하드웨어와 독립)
»하드웨어가 직접 이해할
수 있음
»Java, C/C++, COBOL,
FORTRAN, BASIC, Lisp,
Ada, 등.
»Portable하지 않음
(하드웨어에 종속)
프로그래밍언어론
컴퓨터공학과 권기태
4
어셈블리어 (middle level)
• 특징
– 기계어를 사람이 어느 정도 읽을 수 있게 만든 버전
– 단어, 약자, 문자, 숫자 등이 0과 1을 대치함
– 사람이 읽을 수 있는 코드에서 기계가 실행 가능한 코드로 쉽게 변환할
수 있음
– 기계어처럼 portable하지 못함 (하드웨어에 종속)
• 문제점
– 프로그램은 문장 형태가 아닌 문자들의 조합이므로 원시 코드에서 에러
를 찾기가 어렵고 시간이 많이 소요
– 프로그램은 활용 가능한 컴퓨터의 특성에 따라 많은 영향을 받음
– 프로그램 작성 방식이 컴퓨터의 성능을 최대로 발휘하도록 편법을 이용
하므로, 프로그램의 정확성 증명은 매우 어려움
– 새로운 컴퓨터가 등장하면 이전의 노력은 무시되고 또 다시 새로운 라
이브러리를 만들기 위한 과정이 시작
프로그래밍언어론
컴퓨터공학과 권기태
5
소스 코드를 기계어 코드로 바꾸는 방식
• “프로그램의 컴파일”
고급 언어로 된 소스 코드를 기계어 코드(object, or executable)로 번역함.
• “컴파일러(Compiler)”
HLL 소스 코드를 기계어(object, or executable) 코드로 번역하는 프로그램.
• “어셈블리(Assembly)”
어셈블리어로 된 소스 코드를 기계어 코드(object, or executable)로 번역함.
• “어셈블러(Assembler)”
어셈블리어 소스 코드를 기계어(object, or executable) 코드로 번역하는 프로
그램.
• 컴파일러는 특정한 타겟(target) 하드웨어를 알아야 함
프로그래밍언어론
컴퓨터공학과 권기태
6
컴파일러 vs. 어셈블러 vs. 인터프리터
• 컴파일러와 어셈블러
–번역(translation)은 사용자가 명령하는 별도의 단계
–번역(translation)은 프로그램의 실행 시간이 아닌 “off-line”에서 수행
• 인터프리터(Interpreters)
– 소스 코드를 목적 코드(object code)로 번역하는 다른 방식
–소스 코드에서 목적 코드로의 해석(interpretation)은 별도의 단계가 아님
–해석(translation)은 실행 시간인 “on-line”에서 수행
프로그래밍언어론
컴퓨터공학과 권기태
7
프로그래밍언어론
컴퓨터공학과 권기태
8
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로 시작
컴퓨터공학과 권기태
9
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 문이 없음
프로그래밍언어론
컴퓨터공학과 권기태
10
COBOL(COmmon Business Oriented Language)
•
특징
레코드와 같은 계층적인 데이터 구조
파일과 파일 조작 표현
데이터 디비전에 변수의 선언
자연어(영어)와 유사한 명령어 표현 : 가독성 향상 (?)
APL
•
특수한 문자 집합: 수학 기호와 유사
•
대화형 언어
•
전체 데이터 구조를 직접적으로 처리
SNOBOL
•
문자열(스트링) 처리
•
문자열이 기본 데이터형
프로그래밍언어론
컴퓨터공학과 권기태
11
BASIC(Beginner’s All-purpose Symbolic Instruction Code)
•
과학 기술이나 수학적인 배경이 없는 학생들을 위한 언어
•
문법 구조와 어휘가 단순
Simula
•
class 개념을 제안한 시뮬레이션 언어
•
객체 지향 언어에 큰 영향을 끼침
PL/I
•
FORTRAN + COBOL + ALGOL 60 + 예외 처리, 멀티태스킹, …
•
블록 구조, recursive 프로시저, 레코드, 포인터, …
Pascal
•
공통적인 개념을 통합한 교육용 언어
•
간결성과 사용자 정의 자료형을 강조
프로그래밍언어론
컴퓨터공학과 권기태
12
Modula-2
•
추상 데이터형 지원하기 위한 모듈 개념
•
분리 컴파일 가능
•
프로그래머를 위한, 프로그래머에 의한, 프로그래머의 언어
•
가독성이 떨어지고 에러 메시지 불명료
C
LISP
•
리스트 구조와 함수의 recursive 적용: S-expression과 함수형 언어
•
Garbage collection
•
과거 인공지능 분야의 중심 언어
Smalltalk
•
Alan Kay: 컴퓨터는 이해력과 창의력을 위한 교육 도구
•
아이콘, 윈도우, 마우스 제어 시스템
•
성공적인 객체 지향 언어
프로그래밍언어론
컴퓨터공학과 권기태
13
C++
•
C의 superset (객체 지향 개념인 클래스, 예외 처리 등 추가)
ADA
•
임베디드 컴퓨터 시스템의 프로그래밍 용도
•
DoD가 프로그래밍 언어 표준화를 시도
•
Pascal에 기반을 두고 예외 처리, 자료 추상화, 병행성 등등 추가
Prolog
•
선언적(비절차적)인 논리 언어
•
인공 지능 분야에 널리 이용
Java
•
가전 제품에 들어갈 간단하고 버그 없는 소프트웨어 개발 목적
간단하고, 객체 지향적이며, 분산적이고, 강력하며, 보안성이 높고,
하드웨어와 무관하고, 고성능이며, 멀티 스레드 동적 언어로 정의됨
•
프로그래밍언어론
컴퓨터공학과 권기태
14
고급 언어의 발달 과정
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 컴퓨터공학과
°í±Þ ¾ð¾îÀÇ ¹ß´Þ °úÁ¤
15
1.5 프로그래밍 언어의 분류
계산 모델에 의한 분류
•
명령형 언어(imperative language)
변수와 지정문(assignment statement, 배정문, 치환문, 할당문) 등의
명령으로 기억 장소의 내용을 조작하여 계산 과정 수행
•
•
•
함수형 언어(functional language)
함수의 응용에 의해 기능을 수행
적용형 언어(applicative language)
논리 언어(logic language)
계산을 위해 기호 논리와 집합을 이용
논리 관계의 집합으로 데이터베이스를 구축한 후, 질의가 평가됨
객체 지향 언어(object-oriented language)
프로그래밍언어론
오퍼레이션과 데이터 구조가 함께 객체에 포함
컴퓨터공학과 권기태
16
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
컴퓨터공학과 권기태
17