프로그래밍 언어의 설계
무엇이 좋은 언어를 만드는가? (평가/설계기준)
- 주 언어의 성공 요인
- 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 -> 매우 큰 일반성을 제공하려고 사용하지만, 신뢰성과 판독성에 문제를 야기 그래서 자바에서는 포인터를 불허하는 것이다.
직교성 : 같은 언어의 구성자가 문맥이 다르다고 다르게 행동해서는 안 된다는 것이 관점이다. 문맥과 관계없는 제한이 비일반성을 의미하는 반면, 문맥에 의존하는 제한은 비직교성을 의미한다.
획일성 : 언어 구조들의 외모와 행동에서의 조화에 중점
프로그래밍 언어의 기타 설계 원칙
- 간결성
- 표현력
- 정확성
- 기계 독립성
- 안전성
- 기존 표기나 규칙과의 일관성
- 확장성
- 제약성 , 부분성
문제점과 해결책들
참고자료
프로그래밍 언어 개념 - 원유헌 저