1 / 51

프로그래밍 언어의 발전사

프로그래밍 언어의 발전사. Plankalk Ü l. 독일의 과학자 Kornard Zuse 가 1945 년 개발 — 1972 년 출판 실제 구현되지는 않음 언어의 개요 비트 최소의 타입 정수 및 부동소수점 타입의 기초 배열 및 레코드 예 ) 배열을 이용한 계산 A(5)  A(4) + 1 에 대한 표현 | A + 1 => A V | 4 5 레이블 V 는 첨자행임을 표시

garima
Download Presentation

프로그래밍 언어의 발전사

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. 프로그래밍 언어의 발전사

  2. PlankalkÜl • 독일의 과학자 Kornard Zuse가 1945년 개발—1972년 출판 • 실제 구현되지는 않음 • 언어의 개요 • 비트 • 최소의 타입 • 정수 및 부동소수점 타입의 기초 • 배열 및 레코드 예) 배열을 이용한 계산 • A(5)  A(4) + 1에 대한 표현 | A + 1 => A V | 4 5 레이블 V는 첨자행임을 표시 S |1.n 1.n 레이블 S는 데이터 타입행임을 표시, 1.n은 n비트의 정수를 표시 • Pascal for 문과 유사한 반복문 • Else 절이 없는 선택문

  3. Short Code • 1949년 BINAC 컴퓨터를 위해 개발 • 기계어와 어셈블리어의 중간 형태---해석방식으로 수행 • 연산자 및 피연산자를 바이트의 조합으로 표현 • 1 바이트를 6비트, 1 워드를 12바이트로 표현하여 하나의 명령문을 표현 예) X0 = SQRT(ABS(Y0)) 00 X0 03 20 06 Y0 • 첫 00: 한 워드를 채우기 위해 사용 • 03: = • 20: SQRT • 06: ABS

  4. Speedcoding • 1954년 IBM 701 컴퓨터를 위해 개발 • 기계어와 어셈블리어의 중간 형태---해석방식으로 수행 • 기계언어를 확장한 가상시스템 • 부동소수점에 대한 의사명령어(pseudoinstruction) 및 수학함수 등을 해석 방식으로 수행 • 기계어로 프로그래밍 했을 때보다 수 십 배의 프로그래머 생산성 향상

  5. FORTRAN • 세계 최초로 광범위하게 채택된 고급 언어 • 1954년 11월에 제안된 FORTARN 0 ~ FORTRAN 90까지 발전 • FORTRAN 0 • IBM 704 컴퓨터를 위한 언어로 제안 • 보고서: “The IBM Mathematical FORmula TRANslating System: FORTRAN” • 개발 환경 • 느리고 상대적으로 신뢰성이 없었음 • 과학 계산 분야에 주로 사용 • 프로그래밍에 대한 효율적 방법이 없었음 • 컴퓨터 비용이 프로그래머의 비용보다 컸으므로 효율적인 목적 코드가 중요

  6. FORTRAN I • FORTRAN 0의 수정 구현; 1957년 4월 완성 • 변수명 6자로 제한 • 데이터 타입문이 없다 • I,J,K,L,M,N으로 시작되는 변수정수형 • 그외  부동소수점형 • 개별적으로 컴파일할 수 없는 사용자정의 서브루틴 • IF 선택문: IF (산술식) N1, N2, N3 • 산술식 < 0  GOTO N1 • 산술식 = 0  GOTO N2 • 산술식 > 0  GOTO N3 • DO 루프: DO N1 변수 = 최초값, 최종값 • N1: 루프의 마지막 문장에 대한 레이블

  7. FORTRAN II • 1958년 봄에 발표 • FORTRAN I 에 포함된 에러 수정 • FORTRAN I 에 기능 추가서브루틴의 독립 컴파일 기능

  8. FORTRAN IV, 77 • FORTRAN IV • 1962년 발표~1978년 까지 FORTRAN표준 • 변수의 명시적 선언 허용 • 논리 IF문 • 부프로그램을 매개변수로 사용 가능 • FORTRAN 77 • FORTRAN IV의 기능 + 문자 스트링 처리, 논리 루프 제어문, ELSE IF문

  9. FORTRAN 90 • 배열 연산을 위한 다양한 내장 함수 제공 • 동적 배열 생성 • 레코드 및 포인터 • 새로운 제어문의 추가 • CASE • EXIT: 루프로부터 탈출 • CYCLE: 루프 내부의 마지막 문장으로 GOTO • 재귀적 부프로그램 가능 • 모듈 • 데이터 선언 및 부프로그램을 포함 • PUBLIC 및 PRIVATE 선언 가능

  10. FORTRAN 언어의 특징 • 변수의 타입과 기억 장소가 컴파일 시 결정(FORTRAN I, 90 제외) • 단순성 및 효율성을 위함 • 재귀적 부프로그램 불가능 • 동적으로 형태를 키우거나 변경 가능한 데이터 구조의 구현을 어렵게 함 • 수치 분야 응용, 단순한 프로그램 위주

  11. 함수 프로그래밍: LISP • 1950년대 중반 인공지능에 관한 관심 태동 • 언어학자: 자연언어처리 • 심리학자: 인간의 정보처리능력의 형상화 • 수학자: 정리의 증명 기호적인 데이터를 연결 리스트로 처리할 수 있는 능력의 언어 필요성 대두 • MIT의 John McCarthy의 연구 • 대수식의 기호적 미분 연구로부터 언어 요구 사항을 알고자 했음 리커젼(recursion), 조건식---수학함수의 제어 흐름 동적으로 할당되는 연결 리스트, 폐기된 리스트의 묵시적 회수

  12. LISP의 데이터 구조 • 원자(atom) • 식별자 형태의 기호 • 수치 리터럴 • 리스트 • 괄호로 원소들을 구분 예)  (A B C D) : 원소가 원자들로만 구성 (A (B C) D (E (F G))): 4개의 원소 • 첫 원소: 원자 A • 둘째 원소: 부분 리스트 (B C) • 셋째 원소: 원자 D • 넷째 원소: 부분 리스트 (E (F G)) • 교 P 60 그림 2.2 참조

  13. LISP의 처리 • 함수를 인자에 적용하여 처리 • 배정문, 변수가 필요 없다 • 반복  함수의 재귀 호출 • 데이터 및 프로그램이 같은 형태 예) (A B C D) • 데이터: 4개의 원소를 갖는 리스트 • 프로그램: 매개변수 B, C, D를 함수 A에 적용

  14. LISP의 후손 언어 • Scheme • 1970년 중반에 MIT에서 개발 • 비교적 적은 규모의 lisp 구현 • 교육분야에 적합 • COMMON LISP • 1980년대 중반에 개발 • 여러 변형의 lisp을 통합

  15. 정교화를 향한 첫 단계: ALGOL 60 • 후속 프로그래밍 언어들에 지대한 영향 • 50년대 후반의 언어 급증에 대한 반발 • IBM의 독점 소유인 FORTRAN 이상의 범용 언어를 개발하고자 유럽을 중심으로 위원회 결성 • GAMM(German acronym for Society for Applied Mathematics and Mechanics), ACM(Association for Computing Machinery)과 함께 설계 작업

  16. ALGOL의 설계 목적 • 언어의 구문은 가능하면 표준수학기호에 가까워야 하고, 이 언어로 작성한 프로그램은 다른 설명이 필요 없을 정도로 판독성을 지녀야 한다  과학 계산 용 • 출판물에서 계산 과정의 서술에 이 언어를 사용하는 것이 가능하여야 한다 • 새로운 언어로 작성된 프로그램은 기계적으로 기계 언어로 번역될 수 있어야 한다

  17. ALGOL 60의 개요 • 블록 구조 개념의 도입; 전역 및 지역 • 매개변수 전달 • 참조-전달 • 값-전달 • 재귀적 프로시저 • 스택-동적 배열(stack-dynamic array)의 허용 • 첨자 범위로 변수를 사용 가능 • 형식(formatted) 입출력문의 생략 • 기계 종속적이므로

  18. ALGOL 60의 평가 • 긍정적인 면 • 알고리즘을 기술하는 공식 언어 역할 • 60년대 이후 개발된 언어들에 많은 영향 • PL/I, SIMILA 67, ALGOL 68, Pascal, Ada, C++, Java 등 • BNF의 사용 시작을 계기로 형식언어, 파싱이론, 컴파일러 설계 등의 연구 토대가 됨 • 실지로 프로그래밍에는 많이 사용되지 않음 • 실지 구현의 어려움 • 입출력문의 결여 • FORTRAN의 확고한 위치 및 IBM의 지원 결여

  19. 사무작업의 전산화: COBOL • 1960년 COBOL 60 이후 74, 85년에 ANSI에 의해 표준화 • 미 국방성이 사용을 공식적으로 지정 • 회계 분야의 전산화 이룸 • 언어 설계의 기준 • 영어를 가능하면 많이 사용 • 사용의 수월성 • 구현 측면과 비교적 독립적

  20. COBOL (계속) • 특징 • 데이터 기술 부분과 실행 연산 부분으로 따로 프로그래밍 • 수치형 변수는 십진소수점 포함 가능 • 예) BAL-UNIT-PRICE PICTURE IS 9999V99. • 최초의 계층적 데이터 구조 구현 • 30자까지의 긴 이름 허용 • 초기에는 비효율적이었으나 • 컴파일러 설계 기술 개선 • 고속의 CPU • 메모리 용량의 발달로 사용이 확산됨

  21. 시분할의 발단: BASIC • 1964년 Dartmouth 대학교의 J. Kemeny와 T. Kurtz가 교양과정 학생들을 위해 개발 • 언어 설계의 목적 • 비 과학 전공 학생들이 배우고 사용하기가 쉬워야 한다 • 사용자에게 즐거움을 주고 친숙해야 한다 • 숙제를 원활히 할 수 있도록 빠른 작업 처리 시간을 제공해야 한다 • 자유롭고 개인적인 접근을 허용해야 한다 • 사용자 시간을 컴퓨터 시간보다 더욱 중요하게 생각해야 한다

  22. BASIC (계속) • 초기의 BASIC • 14개 문장 종류 • 수치 데이터 타입: Numbers • 정수 및 부동소수점을 구분하지 않음 • BASIC의 발전 • Minimal BASIC • ANSI, 1978 • 언어의 최소 특징만을 포함하여 초기의 BASIC과 유사

  23. BASIC (계속) • BASIC의 발전(계속) • BASIC-PLUS: 70년대 • BASIC의 정교한 버젼 • PDP-11 운영체제의 일부 코드 작성 • Quick BASIC: PC용, 80년대 후반 • Visual BASIC: PC용, 90년대 초반~

  24. 모든 사람을 위한 모든 것: PL/I • 역사적 배경 • 1963년 초반 새로운 컴퓨팅 요구의 태동 • 과학계산분야: 대형 데이터 파일 처리의 필요성 대두 • 사무 응용분야: 회귀분석의 사용 시작---부동소수점 및 배열의 필요성 • ===> 단일 범용 컴퓨터의 요구: IBM System/360 계열의 탄생 • ===> 과학 및 사무응용분야 프로그래밍 언어 요구 (+ 시스템 프로그래밍 및 리스트 처리 요구)

  25. PL/I (계속) • 특징 • ALGOL 60 (리커젼과 블럭 구조) + FORTRAN IV (전역 데이터에 의한 통신 기능을 가진 개별 컴파일 기능) + COBOL 60 (데이터 구조, 입력/출력, 보고서 생성 기능) • 동시에 실행하는 태스크의 생성 허용 • 예외 처리 기능- 실행 시간 오류 탐지 및 처리 • 재귀적 프로시저 (효율적 코드 생성을 위해 불허용도 가능) • 포인터 데이터 타입 • 배열의 일부분에 대한 참조 • 예) 배열의 세 번째 행을 벡터로 간주 가능

  26. PL/I (계속) • 평가 • 많은 구조들의 성공적 결합 실패 ==> 언어 설계에 대한 경험 부족이 원인 • E. Dijkstra의 비판 • “프로그래밍 언어--우리의 기본 도구--가 단순한 현란함 때문에 우리의 지적 제어 능력을 벗어날 때, 우리는 커지고 있는 프로그램을 계속해서 우리의 지적 범위 안에 유지할 수 있는 방법을 전혀 알지 못한다” • 사용의 관점에서는 부분적으로 성공 • 70년대에 사무 및 과학분야에 많이 사용 • 부분 집합이 교육용으로 사용됨: PL/C, PL/CS

  27. 초기 동적 언어: APL과 SNOBOL • 공통 특성 • 동적 타입 및 동적 기억 장소 할당 • 동적 타입 • 변수는 타입을 반드시 표시하지 않아도 되며 값이 배정될 때 타입을 갖게 됨 • 동적 기억 장소 할당 • 변수의 기억 장소는 값이 배정될 때만 할당됨

  28. APL • “A Programming Language” • 1960년 IBM의 K.E. Iverson에 의해 설계 • 컴퓨터 구조를 기술하는 수단으로 • 특징 • 강력한 많은 연산자==> 표현력은 높으나 판독성 떨어뜨림 • IBM 프린팅 터미널 사용해야 • 배열을 스칼라 변수처럼 다룰 수 있게 허용 • 신속한 프로그램 작성 <==> 유지보수의 어려움: 1회용 프로그램 작성

  29. SNOBOL • 60년대 초반 벨 연구소의 Farber, Griswold, Polensky에 의하여 설계 • 텍스트 처리용 • 스트링 패턴 매칭을 위한 강력한 연산자들 보유

  30. 데이터 추상화의 발단: SIMULA 67 • SIMULA I • 1964년 노르웨이 컴퓨팅 센터의 Nygaard와 Dahl이 개발 • 모의 실험을 위해 개발 • SIMULA 67 • 범용적인 응용분야에 사용될 수 있도록 확장한 것

  31. SIMULA 67 (계속) • 특징 • 코루틴(coroutine) 기능 • 실행이 중단되었던 부분부터 다시 시작할 수 있는 부 프로그램 • 시뮬레이션 응용의 특징---호출자와 피호출자가 대등한 관계를 가짐 • 클래스 구조 • 데이터 구조 • 데이터 구조를 조작하는 루틴들 • 사례(instance) • 지역 데이터 포함 가능 • 사례의 데이터 구조를 초기화하여 사용

  32. 직교적 설계: ALGOL 68 • 특징 • 사용자-정의 데이터 타입 • 기본적 타입과 구조체로 다양한 결합 허용 • 중요성: 특정 문제에 적합한 데이터 추상화 • 동적 배열 데이터 타입의 최초 허용 • 첨자 범위를 명시하지 않는 배열 • 기억장소 할당: 값이 배정될 때

  33. ALGOL 68 (계속) • 평가 • 많은 직교성의 허용을 통한 작성력 <==>PL/I (많은 고정된 구조로 작성력 높임) • 과학 응용분야 용 • van Wijngaarden 메타 언어를 사용하여 기술===> 사람들에게 거부감 • IBM의 PL/I에 대한 장려 + ALGOL68을 이해하고 구현하는데 어려움 ===> PL/I의 보다 광범위한 사용

  34. 설계의 단순성: Pascal • 1971년 Wirth (“Virt”로 발음)가 개발 • ALGOL 60에 기반을 둔 단순성 및 표현력이 뛰어난 언어 • 프로그래밍 교육 목적으로 설계 응용 분야에는 필수적인 사항이 일부 빠짐 예) 가변 길이 배열을 매개변수로 못 가짐 부 프로그램별 개별 컴파일 기능이 없음

  35. 이식성이 있는 시스템 언어: C • 1972년 벨 연구소의 Ritchie가 개발 • BCPL 및 B, ALGOL 68의 영향 • BCPL 및 B의 특징 • 타입이 없음: 모든 데이터가 기계 워드 복잡성/비안정성 초래 • 1989년 ANSI C로 표준화 • UNIX 운영체제의 일부로서 80년대에 인기

  36. Delphi • Pascal에 기반을 둔 객체지향 언어 • C에 기반을 둔 C++보다는 간단하고 안전성 높음 • GUI 기능 제공

  37. 논리 기반 프로그래밍: Prolog • 술어해석학(predicate calculus)에 기반을 둠 • 술어해석학: predicates, subjects, quantifiers에 각각 심볼을 사용하여 규칙이나 사실을 나타내고 추론하는 방식 예) X.(mother(mary,X)  male(X)) • mother, male: predicates • ( ) 안에 든 것: subjects • : quantifier • mary는 X의 어머니이고 X는 남자인 X가 존재한다mary에게 아들이 있다

  38. Prolog(계속) • 1972년 Marseille 대학에서 첫 prolog 인터프리터 개발 • 특징 • 지능형 데이터베이스의 역할 • 사실(fact)과 규칙(rule)으로 구성 예) 사실: mother(joanne, jake). joanne은 jake의 어머니 father(vern, joanne). vern은 joanne의 아버지 규칙: grandparent(X, Z) :- parent(X, Y), parent(Y, Z). X가 Y의 부모이고, Y가 Z의 부모이면 X는 Z의 조부모이다. • 질의를 통해 문제 해결 예) father(bob, darcie). bob이 darcie의 아버지인가?  prolog 인터프리터가 해를 도출

  39. Prolog(계속) • 평가 • 비효율성 • 제한된 응용 분야 • 데이터베이스 관리 시스템 • 자연어 처리 • 전문가 시스템

  40. 역사상 최대 설계 노력: Ada • 배경 • 1974년 DoD (Department of Defense) • 컴퓨터 응용분야의 절반이 내장시스템(embedded system) 450여가지 프로그래밍 언어 사용 • 유지보수 측면에 문제 야기 • 설계 • 1975년 국방성을 중심으로 공개 경쟁 형식으로 설계를 시작 • 1980년 MIL-STD로 정함 (MIL-STD 1815) • 1983년 ANSI에서 Ada를 표준화 • 1985년 컴파일러 개발 (높은 복잡도 )

  41. Ada (계속) • 특징 • 패키지 • 데이터 객체, 데이터 타입 명세, 프로시저 등을 캡슐화 보여줄 부분과 보여주지 않을 부분을 명시 예) 교 p 492 아래 부분 • 예외처리 • 포괄적 프로시저(generic procedure) • 같은 방식으로 처리하나 데이터 타입만 다른 경우를 처리하기 위함 • 특정 데이터 타입으로 처리할 때는 해당 타입으로 실체화(instantiation) 시킴 • 코드의 재사용성을 높임 예) 교 p 426, 425

  42. Ada (계속) • 특징 • 랑데부(rendezvous) • 태스크 간의 통신 및 동기화 기법 • 태스크---Ada 동기화 프로그램 작성 단위 예) 교 p 595 아래부분~596 윗부분

  43. Ada 95 • Ada 83에 대한 개선 • GUI • 객체 지향 프로그래밍 • 더 유연한 라이브러리 • 공유 데이터에 대한 보다 나은 메카니즘

  44. 객체지향 프로그래밍: Smalltalk • 객체 지향 프로그래밍의 본질 • 문제에 속한 실세계 객체를 식별 • 객체에 필요한 프로세스를 식별 • 객체들간에 필요한 통신에 대한 모의 실험을 생성 • Smalltalk의 기원: Dynabook • 1960년대 후반 Utah 대학의 Alan Kay의 박사 학위 논문 • 강력한 데스크 탑 컴퓨터 사용 • 초당 백만 이상의 명령어 수행 • 수 메가 바이트의 기억 장소 • 강력한 인간 인터페이스: 비 프로그래머에 의한 사용 • Inerim Dynabook: Xerox Alto HW + Smalltalk-72 • Smalltalk-80

  45. Smalltalk • 언어 개요 • 소프트웨어 개발 환경 • 객체 • 프로그램의 단위 • 지역 데이터를 가질 수 있음 • 연산(메소드)의 모임 • 메소드 • 계산의 수단 • 메시지를 받을 때 자신이 속한 객체의 반응을 명세 • 클래스 • 객체에 대한 추상화 • 객체: 생성된 사례 • 계층구조를 가질 수 있음

  46. Smalltalk (계속) • 평가 • Window의 원조 • 객체 지향 소프트웨어 설계 방법론/언어의 원조

  47. 명령형 특징과 객체지향 특징의 결합: C++ • 설계과정 • 클래스를 가진 C(“C with classes”) • 1980년 Bell 연구소의 Stroustrup이 설계 • C에 클래스를 추가 • C++ • 1985~1990 • 가상함수, 함수 이름, 연산자 중복, 참조 타입, 다중 상속, 추상화 클래스, 템플리트, 예외 처리 등을 추가

  48. C++ • 평가 • 장점 • 성능 좋고 가격 저렴한 컴파일러 존재 • 하향 호환성 • 대중성 • 단점 • 규모가 크고 복잡 • C의 안전하지 못한 부분 보유 • 관련 언어 • Eiffel • 규모가 작고 단순하나 C++과 유사한 작성력 및 표현력 • 보급 실패 이유 • C와 호환 불가능 • 상대적으로 비싼 컴파일러

  49. World Wide Web 프로그래밍: Java • C++보다 • 규모가 더욱 작고 • 더욱 단순하고 • 더욱 신뢰성을 갖춘 언어 • 1990년 Sun 마이크로시스템 사의 J. Gosling이 이끈 팀이 설계 • J. Gosling: emacs, NeWS 윈도우 시스템 등을 개발

  50. Java • 언어 개요 • 포인터 대신 참조를 사용 • 포인터: 기억장소 주소를 가리킴 • 참조 • 객체를 가리킴 • 참조의 산술 연산은 의미가 없음---오류 소지를 줄임 • 독립적 부 프로그램이 없음 • 모든 부프로그램은 클래스에 속함 • 다중 상속의 결여 • 동시성 프로세스(thread)의 쉬운 생성

More Related