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

[프로그래밍 언어론] Sub Program Part 4 - 나머지 Phase 2

Cloud Travel 2011. 11. 21. 17:59
* Generic Sub-Programs
 - 특정 조건(Types, ...)에 관계없이 돌아가는 서브프로그램(로직)
 ⓐ In Ada
  > 타입, 배열의 길이, 상수 값, 서브프로그램가 파라미터로 들어오는 것에 대해서 Generic Sub-program을 지원
  > 선언, 구현, 사례화(생산), 사용의 4단계에 걸쳐서 사용이 가능하다.
  ex1) sort 프로그램 // 들어오는 타입에 관계없이 돌아가는 Type Generic Sub-program
   

  ex2) parameter로 서브프로그램을 받는 Sub-program Generic Sub-program
   

 
 ⓑ In C++
  - C++에서는 Generic Sub-program을 Template라는 것으로 정의 하였다.
  - 암시적으로 사례화가 일어나기 때문에 Ada에 비해 사용이 간편하다.
    ex1) 타입에 구애 없이 동작하는 최대값 반납 프로그램과 Sorting프로그램

   


※ Sub-Program에는 Statement를 확장한 procedure과 Operator를 확장한 function이 있다.
    Operator의 오버로드에 집중하여 function 구현 부분을 살펴보자.

* Functions
 - 설계 이슈
  ⓐ 부작용을 어떻게 처리할 것인가?(Tow-way parameters)
   ex) sub(x,x); // Ada의 경우는 이러한 것을 아이에 사용하지 못하게 하였다.
  ⓑ return value의 Type 허용범위는 어떻게 할 것인가? 
   > return value Type의 허용범위가 커질수록 컴파일러 크기가 커진다.
   ex) (In FORTRAN, Pascal, Modula-2) only simple types(Integer, Float) 
         (In Ada) Any Type
         (In C계열,Java) Any Type + 구조체, 클래스...
  ⓒ return value의 개수는?
   ex) (in Lua) fun(){ return a,b,c; } d,e,f = fun(); 과 같이 여러개의 파라미터 return이 가능하게 제작
 - 연산자 오버로딩
  > 사용자에 의한 연산자 오버로딩
  > 다른사람도 모두 생각가능 하게 작성하면 좋고, 생각불가능 하게 작성(ex. -를 이용한 덧셈정의)하면 안좋다.

* Coroutines(Symmetric control)
 - 서브프로그램의 시작 부분이 한 곳(맨위)이 아닌 여러 곳에서 실행가능(multiple entries)
 - 자신이 호출할 수도 있으며, 다른 사람에게 호출 받을수도 있다.(controls them itself)
  > 즉, 자기 자신이 자신을 호출할 수도있다. 
 - Coroutine을 call할때는 resume라는 키워드를 사용하여 부른다.
 - 특별한 끝이 오기 전에는 지속적으로 반복하여 일을 실행한다.
 - 실행과정은 다음과 같다.

    


    A에서 B를 호출 할때 최초의 호출에는 B의 시작 부분에서 시작되지만, B가 실행되다 A를 실행하면
    자신을 호출했던 지점에서 이어서 다시 프로그램을 실행한다. 이게 반복하면 위와 같은 그림이 나온다.
    경우에 따라 끝까지 내려간 코루틴은 다시 최상위로 올라가서 실행을 반복한다.
    예를들어, 체스나 장기등에서 이러한 것이 필요 할 것이며, 시뮬레이션에서 2개의 물체간 지속적인
    변화를 나타내기 위해서 위와 같은 코루틴은 용의 할 것이다. 

    또한, 위 그림과 같이 순차적으로 A,B가 돌아가면서 실행하지만,
   사용자가 보았을때는 두 개가 지속적으로 실행되는 느낌을 받을 수 있다. (게임이나 시뮬레이션 프로그램 용의)