프로그래밍 언어 개념: 1개의 글

프로그래밍 언어개념 과제1

Posted by Patchman
2010.02.15 16:04 Univ Study/프로그래밍 언어 개념


1. For a language that is heavily used on your local computer system, evaluate the reasons for its success according to the list of criteria given in Section 1.3.1. Should the list be extended?

 

로컬 컴퓨터 시스템에서 많이 사용되고 있는 C 언어에 대하여 Section 1.3.1에 주어진 기준에 따라 평가하면 다음과 같다.

 

먼저 지금까지 설계, 구현, 사용되다가 사라진 수백 가지의 언어와 비교 했을 때, 지금도 여러 분야에서 다양한 목적으로 사용되고 있는 C 언어는 성공적인 언어라 할 수 있다. 또한 C 언어의 성공의 외적인 요인을 찾으라면 UNIX 운영체제의 성공을 예로 들 수 있을 것이다. 성공적인 언어란, 곧 좋은 언어의 특징을 많이 가지고 있는 언어라고도 말할 수 있는데 좋은 언어의 특징으로는 [ 단순,간단,명료성 / 직교성 / 응용분야 / 적응성 / 추상화 지원 / 검증의 용이성 / 프로그램 환경 / 이식성 / 비용 ] 등을 들 수 있으며, 성공적인 언어인 C를 평가하기 위해 좋은 언어의 특징 중, [언어구조 명료 / 직교성 / 추상화 지원] 과 연관해 평가 하겠다.

 

명료성 - C 언어에서는 #define, typedef 문 등을 사용하여 변수나, 상수, 구조체 등의 선언과 이름을 명료하게 할 수 있다. #define, typedef 를 통한 사용자 정의 데이터 타입은 프로그램의 작성과 테스트, 이해, 변경을 쉽게 하는 요인으로 작용하며, 반복문, 루프에서 사용하는 변수나 배열의 색인은 보통 i,j 와 같인 간단한 이름으로 선언하여 명료성을 높인다.

 

직교성 - C 언어는 직교성 측면에서 부족한 면을 보인다. 예를들어 C 언어 함수 반환값의 자료형 으로는 배열형이 제외되며, 매개변수 전달방식에서 Ada 언어는 모든 자료형에 call by value, result, value-result 허용하여 직교성을 보장하지만, C 언어에서는 배열은 call by reference 방식을 취하는 반면, 이외의 모든 자료형에서는 call by value 방식을 취해 직교성을 보장하지 못한다.

 

추상화 지원 - 추상화중 데이터 추상화의 가장 기본적인 형태는 int, char, float 같은 데이터 타입이다. 개발자는 정수 연산의 값의 범위나 진법, 보수 형태의 치환 등을 일일이 프로그램해 넣을 필요없이 그저 선언만 해주면 된다. 또한 C 언어 에서는 typedef struct 같은 추상 데이터 타입, 사용자 정의 데이터 타입을 통해 데이터 구조를 원하는 데로 추상화하여 쓸 수 있다. 그러나 이렇게 전통적 언어에서의 추상화 방식은 데이터와 프로세스를 별도로 추상화함으로써 추가적인 작업의 가능성이 많고 내부 메커니즘이 철저하게 숨겨지지 못하여 진정한 추상화라고 볼 수 없다. 객체지향 언어에서는 클래스를 이용함으로써 데이터와 프로세스를 함께 추상화의 구조에 넣어 보다 완벽한 추상화를 실현한다.

 

위에서 명시한 3가지 특징 외에도 C 언어에는 유연성, 확장성, 이식성 등 많은 특징을 가지고 있다. 또한 추상화 특징에 명시된 것과 같이, C언의 단점인 추상화 지원을 보완하기 위해 데이터와 프로시저를 하나의 단위로 묶는 클래스의 개념과, 객체지향설계가 도입된 C++ 언어가 만들어지게 된 것이다.



2. Consider the following simple language. a and b represent names of integer variables. Each statement may have a label as a prefix. Statements in the language are as follows:

a=b Assign a the value of b

a=a+1 Add 1 to a

a=a-1 Subtract 1 from a

if a=0 then goto L If a=0, transfer control to statement L

if a>0 then goto L If a>0, transfer control to statement L

goto L Transfer control to statement L

halt Stop execution

For example, the program that computes a = a + b can be given by

L: a=a+1

b=b-1

if b>0 then goto L

halt

 

Write the following programs in this language:

 

Given a and b, compute x = a + b

 

L: a=a-1

b=b+1

if a>0 then goto L

x=b

halt

 

a와 b의 합을 x에 넣기 위해, 조건문을 통해 a가 0이 될 때까지 a의 값은 1씩 감소시키고, b의 값은 1씩 증가 시킨다. 결과적으로 a가 0이 될 때 b의 값은 a+b의 값이 되고, b의 값을 x에 넣고 halt(Stop execution)를 실행 해 프로그램을 종료한다.

 

 

3. Features in C allow the same meaning to be expressed many ways. How many different statements can you write in C that add 1 to a variable X (i.e,. equivalent to X =X + 1)? Discuss the advantages and disadvantages of this aspect in the design of C

 

① x = x + 1 - 할당 연산자 = 로 수식 x + 1 을 x 에 할당 한다.

 

② x += 1 - 할당문과 이항 산술 연산자의 기능을 동시에 사용하게 해주는 복합 할당 연산자(compound assignment operators)를 사용한다

 

③ ++x - 단항연산자(unary)의 선행모드(prefix mode)를 사용한다

 

④ x++ - 단항연산자(unary)의 후행모드(postfix mode)를 사용한다

 

⑤ p = &x;

(*p)++; ; - 포인터를 이용하는 방법으로 x의 주소 번지 값을 변수 p에 할당하여 x의 - 값을 참조하여 증가시키는 방법을 사용한다

 

 

4. Early computers were designed as electronic calculators to solve numerical problems. Speculate on what programming languages would be like if these early machines were developed for a different purpose (e.g., word processing, robot control, game playing).

 

만일 초기의 컴퓨터가 사람의 패턴에 관련한 언어로서 개발되었다고 가정 한다면, 프로그래밍 언어에는 매우 다양한 경우가 발생하게 될 것이고, 예외처리 역시 매우 어렵게 될 것이다. 또한 추상화 지원이 뛰어난 언어가 더욱 빨리 개발되고 발전했을 것이다. 하지만 기계의 특성과 구조적, 물리적인 이유에서 수리적인 문제해결과 표현 방법 없이 프로그래밍 언어가 있기는 힘들다고 생각한다.

 

 

5. Suppose a new language design provides three basic data types: integer, real. and character. It also provides the ability to declare arrays and records of data. Arrays have elements of the same type and records have elements of mixed types. Use the concept of orthogonality to critique the following two variants of this new design:

 

(a)Elements of arrays and records may be of any of these basic data types and may themselves also be arrays or records(e. g., an element of a record may be an array).

 

a 의 변형에 따르면, 레코드 형이 요소가 되는 배열과 배열형의 요소가 혼합된 레코드가 가능 하다. 아래의 두 가지 경우의 혼합 역시 가능하다. 즉 다양한 조합이 가능하고 언어의 특징을 결합할 수 있는 직교성이 높다고 할 수 있다.

 

- 레코드 배열

[0]

[1]

[2]

Real

Integer

Real

Integer

Real

Integer

- 배열 레코드

Character[5]

Real[3]

- 혼합

[0]

[1]

[2]

Character[3]

Real[8]

Character[3]

Real[8]

Character[3]

Real[8]

 

(b) Elements of arrays and records may be of type integer or real. Arrays of characters are called strings and get special treatment. Record elements may be of type character. Records may have arrays as elements, but arrays may no have records as elements. Arrays may not have arrays as elements, but multidimensional arrays are provided to get the same effect.

 

b 의 경우는 a 의 경우보다 직교성이 조금 떨어진다고 생각 된다. 배열은 레코드를 가질 수 없다는 제약이 있고, Primitive Data Type에서 문자의 배열은 String이라는 예외 처리가 있기 때문이다. 그리고 다차원 배열과 배열을 요소로 가지는 배열은 비슷한 의미가 아닌가 생각된다. 하지만 Java 언어의 경우 String을 non primitive type 즉, Object Type으로서 제공한다. 실제의 사용성과 유용성을 고려한다면 String으로 따로 분류하는 것이 편리하게 사용될 수 있다고 생각한다.