1. 효율성 (efficiency)
2. 일반성, 직교성, 획일성
1) 일반성
* 일반성이 갖는 문제점
→ 일반성은 다른 원칙들을 거스르는 위험한 원칙!
- 언어의 간결정 저하
- 언어의 판독성 저하
- 언어의 신뢰성 저하
ex) c언어 포인터 (일반성 제공): 자바는 포인터를 불허하며 다른 방법을 지원하며, 파스칼에서는 포인터가 본질적으로 제한됨.
2) 직교성 (Generality)
→ 2개 이상 기능이 같이 동작할 때 문제가 없어야 함.
: 같은 언어의 구성자가 문맥이 다르다고 다르게 행동해서는 안된다는 것이 관점임.
* Algol 68의 중요 설계 목표 → 직교성 보장
- 매개변수 전달 기법
C: 배열 - callby reference, 이외 모든 자료형 - call by valude 방식 → 직교성의 문제도 발생
: 언어 구조들의 외모와 행동에서의 조화에 중점을 둠.
- ex) 세미콜론(;): Modula-2, Pascal에서 문장 구분자와 선언 종결자로 사용 (c언어에서는 종결자로만 사용)
4) 프로그래밍 언어의 기타 설계 원칙
- 간결성: 직교성, 일반성, 획일성은 간결성을 보장 못 함 (ex. Algol 68)
- 구성자의 수가 적다고 언어가 간결한 것은 아님
→ 과다한 단순성: 언어 사용에 방해, 표현력이 부족, 많은 제한 발생
- 안정성: 프로그래밍 오류를 줄이고, 오류 발견 용이한 언어 목표
- 언어의 신뢰성과 정확성에 밀접한 관계
- 언어 설계 시 자료형, 형 검사, 변수 선언을 도입
- 기존 표기나 규칙과의 일관성
- 언어 설계 시 표준화된 특성과 개념을 갖도록 해야 함
- Algol 68: 표준화된 표기를 잘 따르지 않은 언어 (ex. type 대신 mode 사용)
- 확장성
- 사용자가 언어의 특성을 쉽게 부가하도록 허용하는 기법
- 확장성을 가진 언어의 예: Lisp
- 명령형 언어는 함수형 언어보다 언어 확장이 어려움
- 추상화 개념 (자료 추상호, 제어 추상화)은 확장성 지원
4. 프로그래밍 언어의 기타 설계 원칙
1) 제약성, 부분성: 일부의 언어 지식과 언어 구조만 가지고도 효과적인 프로그램 작성 가능
- 언어 제한성의 장점
- 프로그래머는 언어의 효과적인 사용을 위해 언어 전체를 배울 필요 없음
- 번역기 작성자가 언어 일부분만을 선택하여 구현, 사용 가능(부분 언어 지원)
- 성공적인 언어 설계를 위한 충고
- 신뢰성: 프로그램의 신뢰성을 위해 진단 컴파일러 또는 점검 컴파일러 사용
- 효율적인 번역
- 초기 고급 언어: 분리 컴파일 제공, 효율적 번역 가능, 오류 유발