일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 티스토리 초대장
- ios8 beta
- ios7 골드마스터
- ios7 gm
- ios7 beta3 버그
- 블로그
- 아이폰 IOS7
- ios9
- ios7 배포
- ios
- ios7 beta4
- ios7 beta
- iOS7 beta2
- beta5
- 티스토리
- iphone5
- 아이폰5
- iphone
- ios 7 beta 5
- computer
- TISTORY
- ios7 베타
- iOS7
- 애플
- 베타5
- WWDC
- 아이폰
- ios7 beta3
- 컴퓨터
- ios8
- Today
- Total
wookss blog
프로그래밍 언어의 설계 원칙 본문
프로그래밍 언어의 설계 원칙
대부분의 성공한 언어들은 설계 시 특정한 목표가 있었다. 실행 효율, 판독성, 간결한 교육용 언어의 제공, 언어와의 호환과 추상화 제공 등이 목표가 되었다.
(1) 효율성(efficiency)
목적코드의 효율성
번역기가 효율적인 실행 코드를 생성할 수 있어야 함을 의미한다.
번역의 효율성
번역기가 효율적으로 실행 코드를 생성할 수 있어야 함을 의미한다. 이는 설계된 언어가 번역기에 의해 빠르게 번역될 수 있어야 함을 뜻하는 것이다. 번역기가 오류를 검사하지 않으면 번역의 효율성은 높아지나 신뢰성은 떨어지게 되는데, 이처럼 번역의 효율성은 신뢰성과 상반된다.
구현의 용이성
번역기를 효율적으로 작성할 수 있어야 함을 의미(예 : ALGOL 60, Ada)
프로그램의 효율성
설계된 언어로 얼마나 빠르고 쉽게 프로그램을 작성할 수 있는 가에 달려있다.
(예 : LISP - 언어구조가 간결한데 그로인해 프로그래밍 효율이 높아짐)
(2) 일반성(generality)
특별한 경우를 피하고 밀접하게 관련 있는 개념들을 하나의 더 일반 적인 것으로 결합하는 성질을 의미한다. 대입연산자 =(또는 :=)가 배열과 레코드를 비롯한 모든 데이터 타입에 적용되는 경우 일반성이 있다고 할 수 있다.(예 : Ada)
(3) 직교성(orthogonality)
한 언어의 구성자가 문맥이 다르다고 다른 의미를 지녀서는 안 된다는 성질이다. 매개변수 전달에 있어서 데이터 타입에 상관없이 동일한 전달 방식을 지원하는 경우를 직교성이 있다고 할 수 있다.
(4) 획일성(uniformity)
비슷한 것은 비슷하게 보이고 비슷한 의미를 가져야 하며, 다른 것은 다르게 보이고 다른 의미를 가져야 한다는 원칙이다.
(5) 간결성(simplicity)
언어가 복잡하지 않고 간결해야 함을 의미한다. 언어의 구성자 수가 적은 것과 간결한 것은 같지 않다. (예 : Pascal, C언어)
(6) 표현력(expressiveness)
언어가 복잡한 과정이나 구조를 얼마나 쉽게 표현할 수 있는가를 의미한다. (예 : LISP, ALGOL 60등의 재귀(recursion)가 있다.)
(7) 확장성(extensibility)
사용자가 언어에 새로운 기능을 추가할 수 있도록 하자는 성질이다. 사용자가 새로운 타입을 정의하는 것, 라이브러리에 새로운 함수를 추가하는 것, 번역기에 새로운 키워드를 추가하는 것 등을 언어의 확장성이라 할 수 있다. (예 : LISP, JAVA(library를 사용), C(library를 사용))
(8) 정확성(preciseness)
프로그램의 실행을 예측할 수 있도록 하는 언어에 대한 정확한 정의가 있는지를 의미한다. 언어에 대한 정확한 정의는 프로그램과 번역기의 신뢰성에 도움을 준다. 그 외에도 언어 설계자가 매뉴얼 또는 보고서를 작성하거나 ANSI(America National Standards Instiute), ISO(International Organization for Standardization)와 같은 표준화 기구의 표준안을 채택하는 방법도 있다. (예 : C, C++, Ada, LISP 등)
(9) 기계 독립성(machine independence)
언어가 특정 기계에 의존적이지 않고 독립적인 것을 의미한다. 메모리 할당이나 기계 구조 등의 내용과는 독립적인 미리 정의된 데이터 타입을 제공하는 것이 대표적인 방법인데 사실상 대부분의 데이터 타입은 기계에 의존적이다.
(10) 제약성(restrictability)
언어에 대한 최소한의 지식과 일부 언어 구조만 알고 있더라도 프로그램을 작성할 수 있는 성질을 의미한다.
(11) 보안성(security)
프로그래밍 오류를 줄이고 오류 발견을 쉽게 하는 언어를 설계하는 원칙이다. 신뢰성과 정확성에 밀접한 연관을 가지고 있으며, 프로그래머가 범할 수 있는 오류의 수를 최소화하자는 것이다.
'Study > 프로그래밍' 카테고리의 다른 글
매크로 함수와 인라인 함수를 사용하는 경우의 장단점 (1) | 2013.05.21 |
---|---|
프로시저와 함수의 차이, 매개변수 전달 방식 (1) | 2013.05.21 |
연산자, 반복문, 분기문, 구조적 프로그래밍 (0) | 2013.05.14 |
정적 바인딩과 동적 바인딩 (0) | 2013.05.14 |
프로그래밍 처리 기법 (0) | 2013.05.14 |