프로그래밍 언어론 3-1강. Binding Time(바인딩 타임)

[프로그래밍 언어론]

2019. 10. 26. 14:25

 

[바인딩(binding)]

: a name(변수, 함수등)에 the thing it names(코드, 클래스와 같은 실제 값)으로 연결하는 것.

 

 

 

 

[바인딩 타임(binding time)]

: 이름(name)에 속성이나 값이 결정(연결)되는 시점

 

 

 

[바인딩 타임의 종류]

: 결정되는 시점에 따른 분류

 

1. 언어 디자인 시점 

  : 대부분의 언어에서 제어 흐름 구조, 기본 유형 집합, 복잡한 유형을 만드는 데

   사용할 수 있는 생성자 및 언어론의 많은 측면들이 언어를 설계할 때 선택된다.

 

2. 언어 구현 시점

  : 대부분의 언어 메뉴얼이 언어 구현자의 재량에 다양한 이슈를 남긴다.

   (ex. I/O, 스택과 힙의 최대크기 등)

 

3. 프로그램 작성 시점

  : 알고리즘, 데이터구조, 변수 어떤것을 사용할지 결정(바인딩의 일종)

 

4. 컴파일 시점(Compile time)

: 메모리에 정적(static)으로 정의된 데이터의 레이아웃, 기계어의 상위 수준의 구성의 매핑을 선택

 

5. 링크 시점(Link time)

: 코드내에서 사용된 라이브러리 모듈들 링크

 

6. 로드 시점(load time)

: 운영체제가 프로그램을 실행하려고 메모리로 불러오는 시점

: 가상 주소 결정시점(가상주소와 물리주소 서로 다름 – 물리주소는 실행시점에 변동)

 

7. 실행 시점(Run time)

: 실행 시작부터 끝까지에 해당되는 전체 영역

: 값을 변수에 바인딩

  • 실행 시점 세부 분류
    • 프로그램 시작 시점
    • 모듈 임장 시점
    • 상세 시점(elaboration time) : 함수내 변수가 메모리 공간 하는 시점

 

 

[정적(Static), 동적(Dynamic) 조건]

: 바인딩 시점이 실행 시점 이전인지 실행 시점인지에 따라 구분된다.

 

  • 컴파일러 기반 언어가 인터프리터 기반 언어보다 더 효율적인 이유

    : 컴파일러 기반언어가 바인딩에 대한 결정 일찍 내리기 때문 (= static binding이 좀더 많다)

    : 순수한 인터프리터는 프로그램 실행할때마다 바인딩 결정(+실행시점)

 

  • 빠른 바인딩 시점(대부분의 컴파일 언어) => 높은 효율성
  • 느린 바인딩 시점(대부분의 인터프리트 언어) => 높은 유연성

몇몇 언어는 언어의 유연성또는 표현력 증가를 위해 그들언어의 근본적인 토대가 실행 시점까지 연기될 필요가 있어 컴파일하기 어렵다.
대부분의 스크립팅 언어는 모든 타입 검사를 실행 시점까지 미룬다.
이렇게까지해서 다형성(polymorphism)을 얻을 수 있다.

 

 

 

[다형성(polymorphism)]

: 프로그래머가 유연하고 범용 목적 코드를 쓸수 있도록 해준다.

: 프로그램 언어의 각 요소들이 다양한 자료형에 속하는 것이 허가되는 성질