본문 바로가기
CS(Computer Science)/프로그래밍언어

1. 프로그래밍 언어론 소개

by 동욷 2023. 4. 7.

의사 소통 하는 방식 (언어) <-> 생각하는 방법 (사고)

 

프로그래밍 언어 <-> 컴퓨터에 대한 이해와 활용

 

컴퓨터 발전 <-> 컴퓨터에 대한 생각 <-> 프로그래밍 언어의 이해

 

 

프로그래밍 언어 설계

: 요구사항 및 구현 부분에서는 완벽하지 X

: 기본 법칙, 개념 , 설계 지식 -> 컴퓨터와 의사 소통,  컴퓨터 이해

 

 

 

프로그래밍 언어 정의

-> 기계가 읽을 수 있고, 사람이 읽을 수 있는 형식으로 계산을 기술하는 표현 체계

 

1940s 이전 : 프로그래밍이 전선 연결 (전선과 스위치로 입력)

1940s : Von Neumann 방식 (Program stored computer)

- CPU가 처리할 작업을 명령 코드로 작성

- 프로그래밍 개념 시작

- 어셈블리 언어 탄생 (Symbol 사용) -> 기계 종속적, 저급 수준의 추상화, 읽고 쓰기 어려움

- 고급 수준의 추상화 요구 -> 고급 언어의 등장 -> 프로그램 간략, 이해 용이, 이식성 증가, 배정 , 반복, 선택 개념

 

 

계산(computation) 

: 수학적으로 형식적인 정의 가능 (튜링 머신 등)

: 컴퓨터가 처리할 수 있는 작업을 의미 (일반적)

 

Machine-readable

: 효과적인 번역 가능 ( 간결한 구조의 언어 요구)

: 단순 번역 알고리즘 존재

: 제한된 시간 내에 번역 가능 (프로그램 크기 단순 비례 이상적임)

: 문맥 자유 언어 (context free language)

 

Human-readable

: 기계 독립적인 추상성 제공 -> 자연어 형태

: 프로그램 대형화 -> 판독성은 새로운 국면 -> 지역성 요구

: 프로그래밍 언어 -> S/W 개발 환경에 포함되는 경향

 

 

프로그래밍 언어를 배우는 이유

1. 프로그래밍 언어 고찰 (언어들의 특징 기본개념, 특징들의 구현 & 문제점 , 특징들의 설계에 대한 기본 개념, ex) 비교분석)

 

2. 사용하고 있는 언어의 이해와 효율적인 알고리즘 작성

( 일부 특징 및 특성은 거의 사용 안되며 이해 못함)

( 특징들 사용의 효율성과 비효율성 이해 Ex) recursion , 동적 기억장소 할당 (PL/I) , 병행성)

( 효율적인 알고리즘 작성 가능)

 

3. 유용한 프로그래밍 구사 능력

(언어 <-> 사고)

(다양한 언어 구조 -> 알고리즘 작성 시 어휘 구사력 증가)

(어휘를 적재적소 사용)

(특징 구현 기술 -> 실제 적용 능력 제공 (coroutine 등))

(좋은 알고리즘 작성)

 

4. 프로그래밍 언어 선택 능력

- 문제 해결에 적절한 언어 선택 

- 문자처리 : Snobol 4, 상업용 : Cobol , 시스템 내장 프로그램 : Ada , Modula-2

 

 

 

 

프로그래밍 언어에서의 추상화

- 추상화 (abstraction) : 주어진 작업이나 객체를 속성들의 일부분을 가지고 필요한 만큼 묘사할 수 있는 방법을 지원하는 것

- 필수적인 속성만으로 주어진 것을 묘사하므로, 나머지 속성들은 추상화/은닉/삭제

 

1) 자료 추상화 : 문자열, 수, 트리와 같은 계산될 자료의 특성을 추상화

2) 제어 추상화 (알고리즘 추상화) : 실행 순서를 제어하는 특성을 추상화 (반복문, 조건문, 프로시저 호출)

 

추상화의 목적 : readability 증가

 

정보의 양에 따른 분류

1) 기본 추상화 (basic abstraction) : 가장 지역적인 기계정보에 대한 추상화

2) 구조 추상화 (structured abstraction) : 보다 전역적인 정보인 프로그램의 구조에 대한 추상화

3) 단위 추상화 (unit abstraction) : 단위 프로그램 전체에 대한 정보의 추상화

 

 

자료추상화

1) 기본 추상화

- 컴퓨터 내부 자료표현을 추상화

- 기억 장치의 장소 -> 변수로 추상화 (int x; float y;)

- 자료의 값(2진수) -> 수를 10진 자료형으로 추상화 (x = 5.7;)

 

2) 구조 추상화

- 관련된 자료의 집합을 추상화

- ex) 배열, 레코드 (구조형 자료)

- 구조형에 새 이름 부여 기능 (새 차원의 추상화)

- type student = record ....

 

3) 단위 추상화

- 자료의 생성과 사용에 대한 정보를 한 장소에 모아두고, 자료의 세부 사항에 대한 접근을 제한

- 자료형의 구조 변경이 프로그램 전체에 영향을 주지 않음

- 자료 구조의 세부사항 무시

- 자료 캡슐화, 자료 추상화

- Ex) c++ , Java의 class / Modula-2의 module / Ada의 package

 

 

 

제어 추상화

1) 기본 추상화

- 몇 개의 기계 명령어를 모아 이해하기 쉬운 추상 구문화

- 배정문 : 계산과 값의 저장을 추상화한 것 (x := x + y)

- 분기문 (FORTRAN의 GOTO문 , IF문)  (IF (A  .GT. B) GOTO 10)

 

2) 구조 추상화

- (검사 값에 따라) 분할된 명령어 그룹 수행

- 택일문 : if 문과 같은 택일문 / Pascal의 case문 / C 언어의 switch 문

- 구조화 반복문 : for, repeat, while , loop-exit

- 강력한 구조 제어 : 부프로그램 ( 프로시저 추상화)

 

Ex) Ada의 if 문

 if x > y then

     t := x;

     x := y;

     y := t;

 else

     x := x + y;

     y := y + l;

 endif;

 

Ex) Java의 if 문

if (x > y) {

     t = x;

    x = y;

    y = t;

} else {

     x = x + y ;

     y = y + l;

}

 

Ex) Ada의 반복문

i := 0;

loop

    i := i + 1;

    exit when sentence(i) /= '$';

endloop;

 

Ex) Java의 반복문

i = 0;

do

   i = i + 1;

while (sentence(i) = '$');

 

 

3) 단위 추상화 

- 프로시저의 집합을 추상화 (관련된 프로시저 그룹 추상화)

- 자료 관리 프로그램에서 유사한 작업 프로그램들을 모아서 하나의 단위 프로그램화

- 지원 도구 : Ada의 package,  Modula-2의 module, C++와 Java의 class

 

cf) 기타 제어 추상화 : 병행 프로그래밍 (동기화 , 통신개념 지원) -> coroutine , task, process

 

 

 

 

계산 전형 (computational paradigms)

- 명령형 언어 (imperative L. )  / 절차적 언어 (procedural L. )

   : 명령의 순차적 실행 , 변수 사용 , 배정문 사용

 

   문제점 1) 폰 노이만 병목현상 발생 (순차실행) 

               2) 많은 자료의 동시 계산, 비결정적 계산, 순서에 의존하지 않는 계산 등에 비효율적

 

 

   비 절차적 언어 -> 함수형 언어, 논리형 언어

 

- 함수형 언어 (functional L. ) / 적용형 언어 (applicative L.)

   : 함수의 평가와 함수 적용을 기본으로 함 , 함수의 평가 및 호출 방법 제공 ,

     변수/배정문 없음 , 반복연산은 재귀적 함수 이론에 기술됨

 

 Ex) Modula-2

 

1      PROCEDURE gcd (u,v : INTERGER;

2                                      VAR  x : INTERGER);

3      VAR y, t : INTERGER

4      BEGIN

5          x := u ; y := v ;

6          LOOP

7              IF y <= 0 THEN

8                 EXIT

9             END ;

10           t := y;

11           y := x MOD y;

12           x := t;

13        END;

14   END gcd;

 

 

1      PROCEDURE gcd (u,v : INTERGER) : INTEGER ;

2      BEGIN

3           IF v = 0 THEN

4                 RETURN u ;

5           ELSE

6                 RETURN gcd (v, u MOD v) ;

7           END;

8      END gcd

 

 

 

cf) 절차형 언어를 쓴 함수형프로그래밍

// Modula-2 (최대공약수)

1      PROCEDURE gcd (u,v : INTERGER) : INTEGER ;

2      BEGIN

3           IF v = 0 THEN

4                 RETURN u ;

5           ELSE

6                 RETURN gcd (v, u MOD v) ;

7           END;

8      END gcd;

 

// Java (최대공약수)

1      int gcd (int u, int v) {

2           if ( v == 0)

3                 return u ;

4           else

5                 return gcd (v, u % v) ;

6      }

 

 

 

cf) 함수형 언어를 사용한 예시

define (gcd u v) (if ( = v0 ) u (gcd v ( remainder u v))))

 

 

 

- 논리형 언어(Logical L. ) / 선언적 언어 (declarative L.)

   : 기호 논리학에 근거

   : 계산 실행 순서(how) 대신, 무엇을 하려고 하는가 (what)를 선언

   : 반복이나 선택 개념 불필요

 

 

Prolog 프로그램

1      gcd(U,V,U) :- V=0.

2      gcd(U,V,X) :- V>0,

3                          Y is U mod V,

4                          gcd(V,Y,X).

 

 

 

객체 지향 언어 (object-oriented L.)
 
객체에 기반을 둔 언어
객체란 상태를 의미하는 기억 장소와 상태를 변경할 수 있는 연산의 집합
객체는 클래스로 그룹화
클래스 선언
CPascal에서 구조형 자료를 선언하는 방법과 유사
클래스의 인스턴스
선언된 객체의 실제 예
객체 지향의 방법을 처음 소개한 언어 : Simula 67
 
 
프로그래밍 언어의 정확한 형식 정의가 필요한 이유
 
언어의 구조와 의미의 정확한 기술 없이는  프로그래밍이 불가능
모호함 없는 언어 구현
프로그래밍 과정에서 프로그램이 어떻게 동작할 것인가에 대한 문제 발생 시 유용
프로그램 설계 과정을 규격화하는 방법
 
 
언어 정의의 범주
 
형식 정의에는 구문(syntax) 정의와 의미(semantic) 정의가 있음
 
언어 구문 정의
언어 구문에 관한 정의는 형식화가 많이 되어 있음
 
 
대부분의 언어가 문맥 자유 문법을 만족하며 BNF로 정의
: Pascalif
         <if > ::= if <조건> then <> [ else <> ]
 
 
언어 의미 정의
 
의미는 프로그램의 실행 시 어떤 일이 발생하는가를 기술
if 문에서 조건문이 거짓으로 판명 되었을 때, else 문 이하가 존재하지 않을 경우 -> 언어 의미론은 형식화 미비
 
 
 
의미론의 형식적 정의 방법
디노테이셔녈 (denotational) 의미론, 액시어매틱 (axiomatic) 의미론 등
728x90

'CS(Computer Science) > 프로그래밍언어' 카테고리의 다른 글

2. Algol 60 , Algol 68  (0) 2023.04.19
1. Fortran  (0) 2023.04.19
4. 프로그래밍 언어 구문과 구현 기법  (0) 2023.04.07
3. 프로그래밍 언어 설계 시 주의점  (0) 2023.04.07
2. 언어의 변천  (0) 2023.04.07