프로그래밍 언어론 (chapter3)

프로그래밍 언어의 설계

무엇이 좋은 언어를 만드는가? (평가/설계기준)

  • 주 언어의 성공 요인
    • FORTRAN - 컴퓨터 제조회사 후원
    • COBOL - 미 국방성 지원
    • LISP - 인공지능 분야에서 사용
    • PASCAL - 교육용, 마이크로컴퓨터 표준언어역할
    • PL/I - IBM의 적극적 후원
    • C - UNIX운영 체제의 성공
    • ADA - 미국방성 지원
  • 주요 언어 설계 목적
    • Fortran - 실행의 효율성
    • Cobol - 영어와 유사한 문법 구조로 프로그램 판독성 용이
    • Algol 60 - 블록 구조 제공으로 알고리즘 작성 용이
    • Pascal - 간단한 명령형 언어, 하향식 설계 증진

설계기준의 역사적 변천

  • 1950 년대 - 초기에는 실행의 효율성 중시 (Fortran)
    • Cobol과 Algol60의 등장으로 효율성보다 일반적인 원칙을 중시
  • 1960 년대 - 복잡성 제어 필요성 인식
    • 추상화 기법, 언어규칙과 제한의 감소 필요성 (simula67 -추상화 기법, algol 68 - 일반성, 직교성 제공)
  • 1970년대 - 간결성과 추상화를 강조(ex: Pascal, C, Euclid, Modula-2, Ada)
    • 언어 구성에 수학적 정의 도입
    • 프록램의 정확성 증명 기법을 갖춘 언어 제공 - 프로그램 신뢰성 증진
  • 1980년대
    • 언어에 논리 또는 수학 개념의 삽입 증진
    • 논리를 프로그래밍 언어 자체에 포함
    • 함수형 언어에 관심
    • 객체지향 언어에 관심

효율성

  • 번역기가 효율적인 실행 코드를 생성할 수 있도록 언어 설계가 이루어져야 한다. -> 이것을 종종 최적화라고 부른다
  • 프로그래밍 효율성 - > 얼마나 쉽고 빠르게 프로그램을 작성할 수 있는가.
  • 신뢰성은 효율성 문제 자체로 간주되기도.
  • 판독성과 유지보수능력은 효율성에 관한 매우 중요한 쟁점

일반성, 직교성, 획일성

  • 일반성 : 여러 개념들을 일반적으로 하나의 개념으로 결합함
  • 직교성 : 수학에서 인용해 온 용어로 원래는 “직각 또는 완전히 독립적인 방향으로”라는 의미. 프로그래밍 언어에서의 직교성이란, 언어 구성자들이 각각의 의미를 지닌 채 결합될 수 있음을 의미, 구성자간의 상호 작용이나 문맥 때문에 예기치 않은 제한이나 행위를 야기해서는 안 된다는 것을 의미.
  • 획일성은 유사한 것들은 유사하게 보여야 하고, 유사한 의미를 지녀야 하며, 반대로 서로 다른 것들은 다르게 보여야 한다는 것을 의미

일반성 : 다른 원칙들을 거스르는 위험한 원칙. 언어의 간결성을 보장 못하고, 언어를 읽기 어렵게 하며, 신뢰성을 낮춘다. ex) pointer -> 매우 큰 일반성을 제공하려고 사용하지만, 신뢰성과 판독성에 문제를 야기 그래서 자바에서는 포인터를 불허하는 것이다.

직교성 : 같은 언어의 구성자가 문맥이 다르다고 다르게 행동해서는 안 된다는 것이 관점이다. 문맥과 관계없는 제한이 비일반성을 의미하는 반면, 문맥에 의존하는 제한은 비직교성을 의미한다.

획일성 : 언어 구조들의 외모와 행동에서의 조화에 중점

프로그래밍 언어의 기타 설계 원칙

  • 간결성
  • 표현력
  • 정확성
  • 기계 독립성
  • 안전성
  • 기존 표기나 규칙과의 일관성
  • 확장성
  • 제약성 , 부분성

문제점과 해결책들


참고자료

프로그래밍 언어 개념 - 원유헌 저

0%