Transcript PL 3장 PPT
제 3장 프로그래밍 언어 설계
3.1 설계 기준의 역사적 변천
3.2 효율성
3.3 일반성, 직교성, 획일성
3.4 프로그래밍 언어의 기타 설계 원칙
3.5 문제점과 해결책들
프로그래밍 언어 설계
주요 언어 설계 목적
FORTRAN
실행의 효율성
COBOL
프로그램 판독성(영어 비슷)
ALGOL 60
블록 구조 : 알고리즘 작성
PASCAL
간단 명료 : 하향식 설계 증진
프로그래밍 언어 설계
3.1 설계 기준의 역사적 변천
1950년대
실행의 효율성 중시 : FORTRAN
점차로 일반적 원칙 중시
ALGOL 60 : 블럭구조, 재귀적 용법 제공
COBOL : 프로그램 판독성 증가
프로그래밍 언어 설계
1960년대
프로그램 복잡 증대
복잡성 제어 인식
추상화 기법 : 언어 규칙 제한 감소 필요성
Simular 67 : 추상화 기법 제공
ALGOL 68 : 일반성, 직교성 제공
프로그래밍 언어 설계
1970∼80년대
간결성, 추상화 강조
PASCAL, C, Modula-2, Ada
수학적 정의 도입
신뢰성 증진
1980년대
논리 수학 개념 삽입 증진
함수형 언어 관심 증대
ML Scheme
객체 지향 언어 관심 증대
C++
프로그래밍 언어 설계
언어 설계의 기본 원칙
효율성 (efficiency)
일반성 (generality)
직교성 (orthogonality)
획일성 (uniformity)
프로그래밍 언어 설계
3.2 효율성
효율성의 기준에 따른 분류
목적 코드에 따른 분류
번역기의 효율적 실행 코드 생성
최적화
정적 자료형 변수 : 효율적 코드 생성
PASCAL의 상수 식별자 사용
프로그래밍 언어 설계
번역의 효율성
원시 코드의 효율적으로 번역
알맞은 크기의 번역기로 빠르게 번역
언어 번역의 단계 구성 문제
PASCAL : 단일 패스
Modula-2 : 2 패스
구현성
번역기의 효율적 구현 문제
번역기 작성의 어려움
번역 수행 알고리즘 이해 부족
언어실패요인
(ALGOL 60)
프로그래밍 언어 설계
프로그래밍의 효율성
프로그램 작성의 단순성, 용이성 문제
언어의 표현성, 추상화 관련
이상적 언어
LISP
PROLOG
프로그래밍 언어 설계
3.3 일반성, 직교성, 획일성
일반성
여러 개념들을 일반적으로 하나의 개념을 통합하여
얻는 성질
일반성이 부족한 예
PASCAL : 가변 배열 불허
FORTRAN : call by reference만 허용
FORTRAN : 상수 이름 부재
프로그래밍 언어 설계
일반성의 문제점
언어의 간결성 저하
언어의 판독성 저하
언어의 신뢰성 저하
C언어의 pointer : 일반성 -> 문제점 제기
PASCAL : pointer 제한 사용
프로그래밍 언어 설계
직교성
수학 개념 : 직각 또는 완전히 독립적인 방향
각각 의미 가진 채 결합하는 성질
Ada : 모든 자료형 (직교성 보장)
call by value
call by result
call by value-result 허용
ALGOL 68 주요 설계 쟁점
프로그래밍 언어 설계
획일성
언어 구조 외모와 행동 조화 중점
유사한 것은 유사하게 상이한 것은 서로 다르게
행동하는 성질
PASCAL 비 획일성 (; 사용)
Procedure p ; (* teminator *)
var x : integer ; (* separator *)
y : real ; (* teminator *)
begin
x := 0 ; (* separator *)
y := 1.0
end ; (* terminator *)
프로그래밍 언어 설계
3.4 프로그래밍 언어의 기타 설계 원칙
간결성 (Simplicity)
PASCAL : 간결성
구성자의 수와 비례 안함 : LISP, PROLOG
과다한 단순성도 문제
프로그래밍 언어 설계
표현력 (Expressiveness)
복잡한 과정이나 구조 표현의 용이함
되부름 프로그램
표현력이 강하면서도 단순한 언어 : C 언어
while (incr < 20) {
while (sum <= 100) {
sum += incr;
}
}
loop1 :
if (incr >= 20) goto out :
loop2:
if (sum > 100) goto next :
sum + = incr;
goto loop2;
next :
incr++;
goto loop1 :
out :
정확성 (Preciseness)
언어에 대한 정확한 정의
언어의 신뢰도, 번역기의 신뢰도 영향
프로그래밍 언어 설계
기계독립성 (machine independence)
호환성 제공
기계 구조와 별개의 자료형 사용
안전성(security)
오류발생을 줄이고 발견 용이한 언어 목표
언어 설계시 자료형, 형 검사, 변수 선언 도입
프로그래밍 언어 설계
기존 표기나 관습과의 일치성
표준화된 특성, 개념 일치
언어의 간결성 저하
확장성 (Extensibility)
새로운 특징 첨가 의미
추상화 개념 : 확장성 지원
프로그래밍 언어 설계
제약성 (Restrictability), 부분성 (Subset)
언어의 일부 지식으로 효과적 프로그램 작성
언어의 부분 선택 구현 작성
SP/1, SP/2 … SP/k : PL/I의 부분 언어
프로그래밍 언어 설계
3.5 문제점과 해결책들
성공적인 언어 설계를 위한 제언
신뢰성 : 집단 컴파일러 사용
효율적인 번역 : 분리, 통합 컴파일 사용
코드 최적화
적절한 간결성