Programming Languages
Download
Report
Transcript Programming Languages
제2장
언어의 변천
디지털 컴퓨터 이전의 언어
BC1500~3000년대 : Mesopotamia 지역에서 찰흙판의 알고리즘 발견
60진법 사용, 부동 소수점 표기 사용(곱셈, 나눗셈, 크기 평가 가능)
수학적 표를 이용한 대수학 방적식 해결 프로그래밍 언어 표기의 첫 출현
“if x<0 then branch”와 같은 조건문 不在 음수와 0의 개념 不在
BC300년경 : Euclid(그리스, GCD 계산을 위한 알고리즘 기술)
1820~50년 : C. Babbage(EUK, difference & analytical engine 설계)
1930~40년 : Zuse(Plan Calculus), Turing(Turing Machine),
Church(Lambda Calculus), Aiken(Mark I),
Von Neumann(Flow Diagrams)
불행히도, 대부분의 연구가 현 Digital Computer의 초기 개발
자들에게 알려지지 못함.
언어의 변천
1950년대 : 최초의 프로그래밍 언어
Stored programming 방식 출현(1948, Nuemann)
Assembly 언어 탄생 (저급언어로서 Symbol로 표현)
최초의 고급언어 : J. Backus(IBM, FORTRAN, 1954~57)
FORTRAN II FORTRAN IV FORTRAN 66 FORTRAN 77 FORTRAN
90 : 컴파일러가 다른 언어에 비해 효율적인 기계어 코드를 생성
COBOL(59~60년) : Zgrace Hopper(미국방성 해군)의 팀이 개발
목적 : 일반 사용자들의 判讀性과 理解性의 容易를 위해 設計
단점 : 일반 서술형 문장 記述로 인한 간결함 不在와 문법의 複雜性
특징 : 프로그래밍 언어 디자인에 새로운 특징 추가에 기여
Record 구조 도입
자료구조와 실행 부분의 분리
PICTURE 구에 의한 출력 양식의 可變性 附加
언어의 변천
ALGOL60(58~60년) : 알고리즘 기술을 위한 언어로 개발(연구 및 응용)
영향 : Pascal, C, Modula-2, Ada 등 Algol 파생어에 영향
특징 : 양식의 자유화(free-format), 구조적 명령문, 블록 개념 도입,
자료형 선언, Recursion, call-by-value 기법
스택기반의 실행 환경, 구문정의를 위한 Backus-Naur Forms의 사용
LISP(50년대 후반) : J. McCarthy(MIT大)가 고안, Neumann방식 탈피
영향 : MacLisp, UTLisp, Franz Lisp, Common Lisp, Scheme
특징 : 리스트 구조와 함수의 응용을 기본, 인공지능 분야에서 사용,
획일적인 자료구조, S-expression, 함수 응용이 기본 표기법
run-time 기억장소 할당 제공을 위한 Heap/garbage collection 사용
APL(50년대 후반~60년대 초) : K. Iverson(Harvard大)이 고안
특징 : 행렬을 포함하는 수학적 연산의 편리 제공,
스타일이 기능적, 반복구조 자동 제공 연산자 채택
단점 : 제어구조 不在, Greek 문자 사용, 프로그램 이해에 어려움
언어의 변천
1960년대 : 프로그래밍 언어의 폭증
수많은 언어의 생성 시기, 대부분 소멸, 일부 언어는 P.L 발전에 큰 공헌
PL/I(63~64년) : IBM Project(IBM 360 시리즈에 사용 계획)
목적 : 일반적이고 보편적인 언어의 설계에 목표를 둠
특징 : FORTRAN, COBOL, Algol60의 장점들을 수합하여 설계
Concurrency, Exception Handling 구조 도입
실패 : PL/I 번역기 작성의 어려움과 번역 속도의 느림, 시대에 앞서감
Algol68(63~68년)
목적 : 직교(orthogonal) 언어(임의의 제한이 없는 수식 위주 언어)로 변경
Snobol(StriNg Oriented symBOlic Language) : R. Griswold가 개발
특징 : 문자열 처리, 복잡 다단하고 강력한 패턴 매칭 기능 제공
Simula67 (Object-Oriented Language) Nygaard & Dhal(Norway) 개발
Basic (1964년) J. Kemeny & T. Kurtz(Dartmouth大)
언어의 변천
프로그래밍 언어의 바벨탑
언어의 변천
1970년대 : 간결성, 추상화, 연구 사항
간결성과 일관성 추구 및 새로운 방향 감각으로 언어 개발 복귀
Pascal(1971년) : N. Wirth(IBM 360 시리즈에 사용 계획)
목적 : 작고 간결하고 효율적 언어로 개발
특징 : 분리 컴파일, 문자열 조작, 확장된 입출력 기능 제외
C(1972년) : Dennis Ritchie(Bell Lab.)
목적 : Algol의 한계성 극복
특징 : 간결성 시도, 수식 위주로 국한하고 하드웨어 접근 가능
CLU(1974~77년) : Barbara Liskov(MIT大)
특징 : 추상화 메커니즘을 위한 일관성 있는 접근 방식 제공
Euclid (1976~77년) CLU Committee(Tronto大) 개발
특징 : aliasing 개선, 자료 추상화, 프로그램의 증명 보조(형식적 검증에 목적)
Mesa (1976~79년) Palo Alto Lab.(Xerox社) O.S/S.P에 사용
언어의 변천
1980년대 : 통합과 새로운 방향
80년대에 설계된 유일한 언어인 Ada의 등장
Ada : J. Ichbiah Team(미 국방성의 공모작 수정)
특징 : 자료 추상화, Type System(package)과 병행처리(task) 도입,
예외 처리 기능 추가, 방대한 규모와 복잡 다단
Modula-2(1982,85,88년) : N. Wirth
특징 : Pascal 결점 보완, 추상화와 부분적 동시 처리 개념 도입
함수형/논리형 언어와 또 다른 언어의 전형에 관심을 갖은 시기
함수형 언어 : Scheme(Sussman, MIT大), ML(Meta-Language; Milner,
Edinburgh大), Miranda(Turner, Manchester大)
논리형 언어 : Prolog(Colmerauer, Marseille)
집합론 적용을 위한 언어 : SETL(Schwartz, NY大)
객체지향 언어 : Smalltalk(Kay & Ingalls, Xerox社), C++(Stroustrup),
Eiffel(Meyer)
언어의 변천
프로그래밍 언어의 세대론과 미래
1세대 언어 : 어셈블리 언어
2세대 언어 : 비구조적 고급 언어
3세대 언어 : Procedure 위주의 고급 언어(Pascal, C 등 대다수의 언어)
4세대 언어 : “Software Crisis”의 해결책으로 제시된 언어
특징 : 강력한 명령들로 구성, 개발 도구들과 함께 디자인 환경에 포함
예 : SQL, Lotus, Delphi 등
장점 : 초보자도 빠른 적응 가능, 데이터베이스 처리의 용이
5세대 언어 : 초고급 언어(Prolog, SETL 등의 다른 형태의 고급 언어)
Software Crisis의 해결
언어적 기술의 해결이 아닌 조직적 방법으로 해결
코드의 재사용 증대, 이식성 증대, 문법 위주의 editor를 이용한 생산성 증대
미래 : 예측 불가능, H.W와 컴퓨터 구조의 변화에 의한 기대
새로운 언어의 설계보다는 기존 언어의 발전 형태를 취할 것으로 예상
Programming Languages
- The end of Chapter 2 -
To Be Continue ...
Copyright, 1999 © H. Y. Kwak, Cheju National University.