프로그래밍

프로그래밍 언어론 2장

CodeHS 2024. 11. 10. 00:15

프로그래밍 언어의 변천사

1. 디지털 컴퓨터 이전의 알고리즘

1.1 바벨론의 점토판 (기원전 1500-3000년)

  • 세계 최초의 알고리즘 기록
  • 60진법 사용 (현대 시간 체계의 기원)
  • 고정 소수점 개념 도입
  • 사칙연산과 대수 방정식 해법 포함
  • ‘This Procedure’ 형태의 선언적 표현 사용
  • 제한사항:
    • 분기문(if) 개념 부재
    • 0(영) 개념 미발견
    • 음수 개념 부재

1.2 유클리드 알고리즘 (기원전 300년)

  • 최대공약수 계산 알고리즘
  • 자연어로 표현된 알고리즘
  • 특징:
    • 반복 개념 존재
    • 여전히 0과 1의 나눗셈 개념 부재
    • 바벨론 알고리즘 대비 제한적 진보

2. 근대 이전의 발전

2.1 찰스 바베지와 해석기관 (1792-1871)

  • 차분기관(Difference Engine)과 해석기관(Analytical Engine) 개발
  • 산업혁명 시대의 혁신적 계산 기계
  • 현대 컴퓨터의 기본 개념 제시
  • 폰 노이만 구조의 선구자적 모델

2.2 에이다 어거스타 (최초의 프로그래머)

  • 찰스 바베지의 조수
  • 세계 최초의 컴퓨터 프로그래머로 인정
  • 주요 공헌:
    • 알고리즘 분석에 대한 선구적 견해 제시
    • 계산 시간 최소화의 중요성 강조
    • ADA 프로그래밍 언어의 이름의 유래

3. 현대 프로그래밍 언어의 태동

3.1 1940년대의 발전

  • 튜링 머신 개념
  • 처치의 람다 계산법
  • 에이컨의 Mark I (전기식 계산기)
  • 폰 노이만의 플로우 다이어그램

3.2 최초의 고급 프로그래밍 언어들 (1957-1958)

  1. FORTRAN I (1957)
    • 최초의 고급 프로그래밍 언어
    • FORTRAN II, IV, 77, 90으로 발전
  2. FLOW-MATIC (1957-1958)
    • COBOL의 전신
    • 비즈니스 응용에 초점
  3. LISP (1958-1959)
    • 함수형 프로그래밍의 시초
    • AI 분야에서 널리 사용

4. 주요 프로그래밍 언어의 계보

4.1 ALGOL 계열

  • ALGOL 58 → ALGOL 60 → ALGOL 68
  • Pascal, Modula-2로 발전
  • 현대 프로그래밍 언어에 큰 영향

4.2 C 언어 계열

  • CPL → BCPL → B → C (1972)
  • C++ (1985)
  • Java, C# 등으로 영향

4.3 특수 목적 언어들

  • ADA (1983-1995)
    • 미 국방성 공식 언어
    • 대규모 시스템용
    • 완전한 컴파일러는 미 국방성만 보유
  • Visual BASIC
    • 윈도우 시스템 대응
    • GUI 프로그래밍 지원

5. 현대 언어의 특징

5.1 객체 지향 언어의 발전

  • Simula 67에서 시작
  • Smalltalk으로 발전
  • C++, Java로 이어지는 계보

5.2 최근 동향

  • 약 250여 개의 프로그래밍 언어 존재
  • ADA가 마지막 완전히 새로운 언어로 평가
  • 이후 언어들은 기존 언어의 변형이나 개선으로 간주

프로그래밍 언어의 연대별 발전 과정 (1950-1970년대)

1. 1950년대 초반: 초기 단계

  • 기계어 사용 시기
  • 프로그래밍의 어려움:
    • 기계 의존적 특성
    • 자연어와의 큰 차이
    • 이해와 작성의 복잡성

2. 1950년대 중후반: 최초의 고급 언어들

2.1 FORTRAN (1957)

  • Formula Translation의 약자
  • 개발자: 존 배커스
  • 특징:
    • 수학/과학기술 계산용 언어
    • 배열, 반복구조, 분기문, 부프로그램 지원
  • 발전 과정:
    • FORTRAN I, II, IV (Standard FORTRAN)
    • FORTRAN 66
    • FORTRAN 77
    • FORTRAN 90
  • 30년 이상의 긴 수명

2.2 COBOL

  • 전신: FLOW-MATIC
  • Common Business Oriented Language의 약자
  • 특징:
    • 상업용/업무용 언어
    • 문서화 기능 강조
    • 간단한 수학 계산 중심

2.3 ALGOL 60

  • ALGOrithmic Language의 약자
  • 주요 특징:
    • 자유 형식(Free Format) 도입
    • 자료형 선언
    • 재귀(Recursion) 개념
    • Call by Value 매개변수 전달
    • 스택 기반 실행환경
    • BNF(Backus-Naur Form) 도입

2.4 LISP

  • List Processor의 약자
  • 개발: MIT 존 매카시
  • 특징:
    • 함수형 언어
    • 람다 계산법 기반
    • 힙 메모리 할당
    • 가비지 컬렉션 도입

2.5 APL

  • A Programming Language의 약자
  • 개발: 하버드대 아이버슨
  • 특징:
    • 행렬 연산 특화
    • 그리스 문자 사용
    • 인터프리터 전용
    • 특별한 제어구조 부재

3. 1960년대: 언어의 폭증 시대

3.1 기술적 배경

  • 트랜지스터의 도입
    • 진공관 대체
    • 전력 소모 감소
    • 처리 속도 향상 (약 1000배)

3.2 주요 언어들

PL/I

  • IBM 개발
  • 특징:
    • 병행성 도입
    • 메모리 할당 개념
    • 예외 처리 도입
  • 한계:
    • 복잡한 문법
    • 낮은 실행 효율
    • 어려운 학습곡선

ALGOL 68

  • 특징:
    • 일관된 형 시스템
    • 직교성 강조
    • 새로운 전문용어 도입

기타 중요 언어들

  1. SNOBOL
    • 최초의 문자열 처리 언어
    • 패턴 매칭 특화
  2. SIMULA 67
    • 최초의 객체지향 언어
    • 클래스 개념 도입
    • 노르웨이에서 개발
  3. BASIC
    • Beginner’s All-purpose Symbolic Instruction Code
    • 초보자용 언어
    • 단순한 문법 구조
    • 마이크로컴퓨터 기본 언어로 채택

4. 1970년대: 정리와 체계화

4.1 기술적 배경

  • IC칩의 등장
  • LSI, VLSI 발전

4.2 주요 언어들

Pascal

  • 개발: 니클라우스 워스
  • 특징:
    • 단순성과 일관성 강조
    • IBM 360 시리즈 지원

C (1972)

  • 개발: 데니스 리치(벨 연구소)
  • 특징:
    • 유닉스 OS 개발용
    • 하드웨어 접근성 강화
    • 시스템 프로그래밍 지원
    • 포인터 개념 도입

4.3 시대적 특징

  • 간결성과 일관성 추구
  • 추상화와 병행성 개념 도입
  • 프로그램 증명 개념 등장

'프로그래밍' 카테고리의 다른 글

프로그래밍 언어론 3장  (4) 2024.11.11
프로그래밍 언어론 1장  (4) 2024.11.08