1 / 17

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

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

Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 1장. 프로그래밍 언어의 역사 컴퓨터공학과 권기태

  2. 개요 • 언어: 음성 또는 문자를 수단으로 하여 사람의 감정, 사상을 표현하여 전달하는 활동 혹은 방법 • 프로그래밍 언어: 사람과 컴퓨터 사이의 대화를 가능하게 해 주는 것으로서 계산 과정(자료구조, 알고리즘)을 서술하기 위한 임의의 기호, 좋은 프로그램을 작성하는데 도움이 되어야 한다. • 좋은 프로그램 이 가져야 할 조건: • 프로그램을 읽고 이해하기 쉬어야 하고 • 프로그램이 효율적으로 번역되어야 하고 • 프로그램이 효율적으로 실행되어야 하고 • 프로그램의 수정이 쉬어야 한다. • 문법 구조(syntax): 언어의 기호가 어떻게 결합될 수 있는가를 기술하는 규칙들의 집합 • 의미 구조(semantics): 문법적으로 옳은 각 문장이 어떻게 해석되어야 하는가를 정의하는 것 컴퓨터공학과 권기태

  3. 1.2 고급 언어의 등장 프로그래밍 언어의 계층 컴퓨터공학과 권기태

  4. 고급언어와 고급언어가 아닌 것들... • 기계어(lowest level) • 인간의 자연어와는 가장 거리가 멀지만, 하드웨어의 자연어에 가장 가까움 • 0과1로만 구성 • 하드웨어가 직접 이해할 수 있음 • Portable하지 않음 (하드웨어에 종속) • 고급언어(HLL) • 자연어에 가장 가까움 • 단어, 숫자, 수학 기호로 구성 • 하드웨어가 직접 이해할 수 없음 • “portable” 소스 코드(하드웨어와 독립) • Java, C/C++, COBOL, FORTRAN, BASIC, Lisp, Ada, 등. 컴퓨터공학과 권기태

  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 등으로 지속적으로 발전 • 목적 코드의 효율성 • 단순성 • 습득의 용이성 • 확보된 사용자 • 중요 특징 • 고정된 필드: 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. 고급 언어의 발달 과정 컴퓨터공학과 권기태

  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 컴퓨터공학과 권기태

More Related