본문 바로가기
CS(Computer Science)/프로그래밍언어

2. 언어의 변천

by 동욷 2023. 4. 7.

디지털 컴퓨터 이전의 언어

최초의 알고리즘
찰흙판, BC 1500 – 3000, 바빌론 근처 메소포타미아
60진법 사용 (현재 시, , 초 개념에 사용), 부동 소수점, 가감승제 가능
대수학 방정식 해결 ( “이것이 프로시저다” 표현 사용)
if x < 0 then branch 개념 없음 (음수, 0 개념 없음)
알고리즘 반복 작성, 우수한 표기법이었음
 

 

Euclid
B. C. 300, 최대공약수 알고리즘 (모국어 사용)
수에서 0 개념 없음, 1이 제수로 인식되지 않았음
특수 경우 반복 시킴
바빌로니아 사람들 보다 별로 진보되지 못함
 
Charles Babbage (1792 – 1871)
Difference Engine
계산 처리를 위한 기계
유한 차 (finite difference)의 원리를 기본으로 함
Analytical Engine : 현 디지털 컴퓨터의 원리 포함
현재 컴퓨터와 유사한 구조
프로그램과 자료를 주기억장치에 저장시키는 저장 개념 없음 (연산카드, 변수카드 사용)
 
Ada Augusta(C Babbage 조수)
최초의 컴퓨터 프로그래머
Ada의 ‘알고리즘 분석’에 대한 견해
 
 
•1930년대 – 1940년대
 
프로그래밍 표기에서 창조적인 것들이 급격히 증가
ZusePlan Calculus
TuringTuring Machine
ChurchLambda Calculus
AikenMark I
von NeumannFlow Diagrams
디지털 컴퓨터의 초기 개발자에게 알려지지 않음

 

 

1950년대 초반
기계어 사용 (프로그램 저장 방식) -> 기호화
 
1950년대 중반
Fortran (Formula TRANslation)
1954 – 57, John Backus에 의해 고안된 최초의 고급 언어
Fortran II, Fortran IV, Fortran 66, Fortran 77, Fortran 90
Fortran 컴파일러는 효율적인 기계어 코드를 생성 -> 언어의 긴 생명을 제공
배열, 반복 구조, 분기문, 부프로그램 등의 특징은 이후 언어에 큰 영향

 

 

1950년대 후반에 등장한 언어
 
COBOL (Common Business-Oriented Language)
상업자료처리용
1959 - 60, 미국방성의 Grace Hopper에 의해 고안
설계 목적
사용자들이 프로그램을 읽기 쉽고, 이해하기 쉽게 함
언어의 특징
레코드 구조 도입
자료구조와 실행 부분을 분리
PICTURE”를 써서 원하는 출력 양식의 가변성 부가
 
ALGOL 60 (ALGOrithmic Language 60)
알고리즘 기술, 범용
1958 - 60, 알고리즘 서술을 위한 일반적인 표현 언어
언어의 특징
양식의 자유화(free format), 구조적 명령문, begin-end 블록,

   변수 타입선언, 되부름, call-by-value 매개 변수 등의 개념 소개

스택 기반 실행 환경 도입
Backus-Naur Forms(BNF)을 최초로 사용
 
Lisp (LISt Processor)
기호연산, 리스트 처리용
1950 년대 후반, MITJohn McCarthy에 의해 고안
일반적인 리스트 구조와 함수의 적용을 기본으로 함
인공지능 분야 응용
언어의 특징
통일된 자료구조, S-expression
기본적인 계산  표기법에 함수 적용
garbage collection 개념 소개
되부름의 원조
 
APL (A Programming Language)
배열처리용
1950 년대 후반에서 60년대 초반
하버드대의 K. Iverson에 의해 고안
언어의 장점
배열과 행렬에 대한 연산이 쉽고, 강력한 프로그래밍
언어의 단점
제어구조가 없음
특정 터미널에만 있는 그리스 기호 사용
프로그램 이해 난이
 
1960년대 : 프로그래밍 언어의 폭증
 
1960년대 시대적 특징
 
초기 언어 성공 -> 언어 개발 몰두 -> 수백의 언어 탄생
 
특별한 관심 분야나 목적
: 그래픽, 통신, 보고서 작성 분야 등
 
대부분의 언어는 소멸, 소수 언어는 지대한 공헌
 
 
1960년대 등장한 언어
 
PL/I (Programming Language One)
Algol 68
Simula 67
Basic (Beginners All-purpose Symbolic Instruction Code)
 
 
PL/I
Fortran, Cobol, Algol 60의 장점 모두 수용
새로운 개념 추가 (병행성, 기억 장소 할당, 예외처리)
IBM의 막강한 지원
언어의 문제점 (방대)
번역기가 크고 작성이 어려움
실행 효율 저하
배우기 어려움, 오류 발생 유도
언어 특성들의 상호 작용으로 인한 신뢰성 저하
 
 
 
Algol 68
Algol60 + 타 언어의 여러 기능 + 표현력 있고 일관된 구조  
새로운 특성 독자 개발
이론적으로 일관성 갖는 구조
일반적인 형 시스템, 직교성 강조 (수식 위주)
언어 기술 -> 새로운 용어 과다 사용
디자인 일관성, 파일 시스템, 실행 환경 -> 우수
범용 컴퓨터 사용 불가능 (비판 -> 소수 구현)
 
 
 
특기 할 기타 언어
 
Snobol (StriNg Oriented symBOlic Language)
최초의 문자열 처리 언어, 패턴 매칭 기능 다양
 
Simula 67
객체 지향 언어(클래스 개념 최초 도입)
 
Simula I  + Algol 60
시뮬레이션 목적
 
Basic (Beginners All-purpose Symbolic Instruction Code)
시분할용의 간결한 언어
마이크로 컴퓨터 이식 (교육용, 사무처리용, 가정용)
언어군 (ANSI 표준 : 1978 ‘minimal Basic’, 1988 ‘Standard Basic’)
 
후에  나온 Basic : 제어 구조, 변수 선언, 프로시저 추가
 
 

 

1970년대 초반 언어의 특징
 
60년대의 혼돈 후 -> 간결성과  일관성 추구
Niklaus Wirth : Algol 68 디자인에 반발 (방대성)
Wirth  +  Hoare  : Algol W 제안
 
 
1970년대 초반에 등장한 언어
 
Pascal (1971, Wirth)
작고, 간결하고, 효율적이고, 구조적이며, 프로그래밍 교육용
분리 컴파일, 유용한 문자열 조작, 입출력 기능 -> 삭제 또는 축소 (성공적)
 
C 언어 (1972, Dennis Ritchie)
Pascal 과는 다른 각도의 간결성
수식 위주로  형 시스템과  실행환경 축소,  하드웨어 접근 용이
중급 언어로 분류 : 기계 접근성 강화 (고급 언어와 상반 개념)
운영체제 프로그래밍용 (Bliss(1971), Forth(1971))
C 언어로 작성된 UNIX 성공 -> C 언어 대중화
C, Pascal -> 간결성,  디자인 일관성 (소그룹의 고안)  : 성공 요인
 
 
1970년대 중, 후반 언어 특징
자료 추상화, 병행성, 증명 등의 메커니즘을 집중적으로 시도
 
1970년대 중, 후반에 등장한 언어
 
CLU (1974-77, MITBabara Liskov)
추상화 기법을 위한 일관성 있는 접근 방식

  자료 추상화, 제어 추상화, 예외처리

자료 추상화 : cluster (Simulaclass와 유사)
제어 구조 :  iterator - 일반성
예외처리 : Ada와 비슷한 구조 제안
 
Euclid (1976-77, 토론토(Toronto) 대학)
Pascal을 개선한 언어
Pascal의 단점인 이명(aliasing) 개선, 자료형의 추상화, 프로그램 증명 보조 추가
프로그램의 형식적 검증을 목적으로 한 최초 언어
 
 
Mesa (1976-79, XeroxPalo Alto 연구소)
Pascal 구조에 모듈 구조, 예외처리기, 병행성, 병렬 프로그래밍의 개념 추가
시스템 프로그래밍용 -> Modula-2 메커니즘 고안에 지대한 영향
 

 

 

1980년대 언어의 특징
 
Ada 등장(개념 통합)
함수형 언어에 새로운 관심 부여 - 스킴(Scheme), ML(Meta Language) 개발
논리형 프로그래밍 언어 -  Prolog 등장
객체 지향 언어에 대한 활발한 연구 및 개발
 
 
1980년대 등장한 언어
 
Ada
자료 추상화, 타입 메커니즘(package), 병행 처리(task), 예외처리기 도입
디자인이 섬세하고 상세함, 사용 급증
단점 :  복잡 방대 (2PL/I 가능성)
 
Modula-2
 
1982-88, Modula 언어를 기본, 운영체제 구축용( N. Wirth)
Pascal의 디자인에  결점 보완(당시 실험적 언어)
추상화, 부분적 동시처리 개념
내장형 시스템 프로그래밍 목적 : 하드웨어 접근이 용이한 다목적 언어
교육 목적으로 인기
가능한 한 소규모의 간결한 언어로 시도 -> 예외처리기능 등 제외
 
 
 
 
스킴(Scheme)
 
1975-78, MITGerald J. SussmanGuy L. Steele, Jr. 개발
Lisp 언어 개정
Lisp보다 획일적이고, lambda calculus에 가깝게 설계됨
 
Common Lisp(표준)
 
ML (meta language)
1978, 에딘버러(Edinburgh) 대학의 Robin Milner 개발
기존 함수형 언어와  상이 함
Pascal과 유사하나  유연성 (문법, 타입 체킹)
 
Miranda
1985-86, 맨체스터 대학의 데이비드 터너(David Turner)가 개발
 
Prolog (1972- ,  A. Colmerauer의 그룹)
논리형 언어
인공지능 분야에서 많이 사용
SETL (뉴욕 대학(NYU)J. Schwartz)
집합론을 프로그래밍 언어로 시도한 것 (미적분, 수학의 교육 모델로 사용)
구현 결핍
 
 
Smalltalk (1972-80, Xerox사의 Alan Kay, Dan Ingalls)
객체 지향 언어의  모범
 
 
C++ (1980, Bjarne Stroustrup)
C 언어를 확장한 객체 지향언어
Eiffel (1980년대 중반, Bertrand Meyer)
Pascal에 가까우면서 일관성 있는 객체 지향 언어

 

 

 

1990년대 언어의 특징
4세대 언어 대두
 
응용문제를 빠르게 구현
실사용자가 직접 프로그래밍
데이터 베이스를 쉽게 처리
 
HTML, Java 등장
 
 
1990년대 등장한 언어
 
Java언어
James Gosling 설계 팀장
C++ 기반 : 많은 구조 삭제, 일부 구조 변경, 일부 구조 추가
C++의 강력함과 유연성 제공
C++ 보다  규모는 작아지고, 더 간결하고, 신뢰성이 증가 된 언어
한 응용 분야 목표 :  내장 시스템
Java의 응용분야가 확장 됨 -> Web 프로그래밍 (C/C++결점 보완)
자료형클래스 제공
기본 자료형 : 스칼라 형 제공
배열 미리 정의된 클래스 객체로 제공(C++와 구별)
포인터  삭제 -> 참조형 제공
포인터 기억장소 지시참조형 객체 지시
논리형 제공 ( 산술 연산에 사용 불가 : C/C++와 구별),
부프로그램 제공 안함 -> 클래스 메소드 제공
단일상속 -> 다중 상속 변칙 사용 (인터페이스 사용)
동시성 제공 (synchronize) - Thread 
쓰레기 수집
묵시적 형 변화 확대형 변환 ( widenning)
 
중간 언어 제공 (이식성 증가)
 
Java 애플릿 -  클라이언트에서 실행
 
프로그래머 – Java선호 (C++기피)

 

 

정리

Fortran, Cobol,Basic : 비구조형 언어

  PL/1,Pascal, C : 프로시저 위주의 고급 언어

  Prolog, SETL: 초고급 언어

 

프로그래밍 언어의 세대 구분
1 세대 어셈블리 언어
2 세대 비구조형 고급 언어
3 세대 구조형 고급 언어
4 세대 화일처리(SQL)
5 세대 초 고급 언어
 
 
1 세대 기계어
2 세대 어셈블리 언어
3 세대 고급 언어
4 세대 화일처리(SQL)
5 세대 초 고급 언어
 

 

 

4세대 언어의 특징
 
소프트웨어의 위기 (software crisis)
4세대 언어들은 데이터베이스 시스템을 위해 만들어진 명령어로 출발
에디터(editor)디버거(debugger), 서류작성기나 제어용 유틸리티와 같은 개발도구들과 함께 디자인 환경에 포함됨
대표적 예 : SQL(Structured Query Language), Lotus, Delphi
거대한 화일 처리 응용 프로그램을 몇 개 안 되는 코드로 신속하게 작성
언어 설계 이론에 공헌한 바는 작지만 실용성 큼
최근의 Visual Basic, Visual C++, Power Builder도 이 부류에 속함
 
명세 언어
사용자가 원하는 바를 서술하면 시스템이 요구 사항을 구현해 주는 언어
 
 
1979, Winograd의 명세 언어에 대한 견해
 
-> 논리형 언어와 제 5세대 언어가 시도하는 바를 기술
이런 언어들은 모범답안을 빠르게 기술하는 방법만을 제공
 
소프트웨어 위기 (software crisis)의 극복
 
언어적 기술보다는 조직적인 방법으로 해결
기존 코드의 재사용 증대
이식성 증대
문법 위주의 에디터를 사용하여 프로그래머의 생산성 높임
 
언어 설계의 미래
 
하드웨어와 컴퓨터 구조의 발달에 의해 영향 받음
새로운 언어의 출현보다는 기존 언어들을 갈고 닦아, 언어 설계에 대한 이해를 점진적으로 증가시키는 방향으로 예상됨
 
 
728x90