고급 언어로 된 소스 코드를 기계어 코드(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