프로그래밍[Univ]/프로그래밍 언어론

[프로그래밍 언어론] 명령형 언어의 특징 3 - Binding

Cloud Travel 2011. 10. 10. 16:24
명령형 언어의 특징이라는 주제를 달고 나온 부분은 자신이 프로그램언어를 개발시
고려해야할 상항에 대해서 나와 있는 것입니다.
-----------------------------------------------------------------------------------------------------

* 바인딩이란?

  변수나 예약어등 프로그래밍언어를 구성하고 있는 여러 것에 속성을 부여하는 것을 "바인딩한다"라고 한다.
  ex) int x; // 변수 x에 integer타입을 바인딩했다.
        x = 3;// 변수 x에 3이라는 값을 바인딩했다.


* 바인딩이 일어나는 시간 

 1. 설계시 : 설계자에 의해서 기호(+, - 등)와 기호가 하는 일이 바인딩 된다.(ex> +는 더하는 역할을 한다)
 2. 구현시 : 구현자에 의해서 각각의 특징을 바인딩한다. (ex> int라는 것은 정수 타입으로 2바이트를 할당한다) 
 3. 프로그램작성시 : 프로그래머에 의에서 바인딩이 일어난다. (ex> int x = 3; )
 4. 컴파일시 : 컴파일러에 의해서 각각 변수의 type이 바인딩 된다.
 5. 링크시 : 링커에 의해 외부 프로그램과의 바인딩이 일어난다.
 6. 프로그램을 불러올시 : 각각 변수에 필요한 메모리를 바인딩해준다.
 7. 프로그램 실행시 : 프로그램 실행시 나오는 결과값을 변수에 바인딩해준다.

 ex)

 

* 바인딩의 종류
 
 1. Static
  - 실행전에 바인딩이 일어난 후 프로그램 종료시까지 변경되지 않는다.

 2. Dynamic
  - 수행도중에 지속적으로 변화가 일어난다.(상황에 따라 지속적인 바인딩 실시)



* Type 바인딩

 1. Static Type Binding(정적 타입 바인딩) : 컴파일때 바인딩후 변경이 안됨
  - 명확히 Type를 명명해주는 방법(Explicit declaration)과 암암리에 Type이 명시되는 방법(Implicit declaration)
   ⓐ Explicit declaration : 타입을 명확히 지정하여 표현해주는 것 
    ex1) (In C)int x; float y; 
   ⓑ  Implicit declaration : 변수 이름에 변수의 표현되있다.
    ex1) (In FORTRAN) 변수지정시 시작 글자가 I~N은 정수형 변수로 취급 / 그 외는 실수 취급
         > INDEX, LENGTH, SUM, TOTAL       > INDEX와 LENGTH는 정수형 변수 SUM과 TOTAL은 실수형 변수
    ex2) (In Perl) '$' : 일반 변수 / '@' : Array변수 / '%' : Hash Array변수를 생성  
  - 정적 바인딩의 장단점
   ⓐ 장점 : 작성력이 높아진다. 
   ⓑ 단점 : 신뢰성이 떨어진다.  (reliable하지가 않다)

 2. Dynamic Type Binding(동적 타입 바인딩) :  실행중에 Type이 지속적으로 변화가능
  ex) (In APL)
        LIST <- 2 4 6 8   // LIST 정수 배열
        LIST <- 17.3       // LIST의 타입이 정수배열에서 실수로 변한다.
  - 장점
   ⓐ 유연함 > 하나의 경우가 아닌, 자유자제로 여러 곳에 사용이 가능(Generic Program Units)
    ex) (In C) 두 개의 변수를 더하는 sum함수를 정의시 다음과 같이 타입마다 모두 생성해줘야한다.
         int sum(int x, int y){return (x+y);}
         float sum(float x, float y){return (x+y);} 
         ... 
         > 만약, C가 유연해진다면...(Dynamic Binding을 한다면...) 
         sum(x,y){return (x+y);}
   - 단점 
    ⓐ 고비용 > 시간과 resource의 값이 높다.
     > 매 연산시(Assignment) : 결과 타입을 결정하기 위해 R-Value의 타입을 채킹해줘야 한다.(시간↑)
     > 한 변수에 대해서 계속 변화하므로 변수 생성시 변수의 최대 메모리로 생성 > buffer가 커진다.(메모리↑)
      ※ 이러한 단점에 의해서 작은 규모 언어에 적합하다.
    ⓑ 타입 에러의 발견이 힘들다(사용자 의도와 다른 타입으로 프로그램이 실행될수도 있다.)
     > 실행타임에서 타입에러를 발견할 수 있다. 

 3. Type Inferencing Binding(타입 추측)
  - 앞뒤 문맥을 통해 Type을 추측하여 바인딩한다.   
   ex) ML, Haskell ... (함수형 언어) 
   - (In ML)
     fun area(r) = 3.14159*r*r
     // 문맥상(3.14159에 의해) r의 타입은 실수로 정해진다.
     fun times10(x) = 10*x 
     // 문맥상(10에 의해) x의 타입은 정수로 정해진다. 
     fun square(x) = x*x
     // 문맥상 x의 타입을 알 방법이 없음. > default값인 정수형으로 정해진다.
     fun square(x):real = x*x
     // 결과값이 real(실수형)이기를 바라므로 x는 실수형으로 정해진다.
     fun square(x) = x*x(x:real)
     // x를 real변수로 정했기에 다른 x도 실수형으로 정해진다.
   
  ------------------------------------------------------------------------------------------------

왜 2번을 건너띄고 3으로 왔는가...? 2는 아직 작성중이고 아직 한가지 특징에 대해서 배우지 않았다.

2번은 변수에 대한 내용이다.