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