POSTPONE — 컴파일 의미 지연

POSTPONE — 컴파일 의미 지연

POSTPONEname의 컴파일 의미를 현재 정의에 추가하는 코어 단어예요.

출처: POSTPONE — Forth 2012 Standard

본문

컴파일 (Compilation)

( "<spaces>name" -- )

선행 공백 구분자를 건너뛰고 공백으로 구분된 name을 파싱해요. name을 찾아요. name의 컴파일 의미를 현재 정의에 추가해요. name을 찾을 수 없으면 애매한 조건이 존재해요.

참조 (See)

  • 3.4.1 Parsing(파싱)
  • A.6.1.2033 POSTPONE

합리성 (Rationale)

전형적인 사용:

: ENDIF POSTPONE THEN ; IMMEDIATE
: X ... IF ... ENDIF ... ;

POSTPONE는 대부분의 COMPILE[COMPILE] 기능을 대체해요. COMPILE[COMPILE]은 같은 목적으로 사용되었어요: 다음 단어의 컴파일 동작을 지연시키는 것. [COMPILE]은 컴파일 상태에서 즉시 단어의 컴파일 동작을 추가하는 데 사용되었어요. 그러나 [COMPILE]은 해당 즉시 단어가 해석 상태에서 사용될 때는 동작하지 않았고, COMPILE은 즉시가 아닌 단어들의 컴파일 동작을 지연시키는 데 사용되었어요.

COMPILE에는 또 다른 문제가 있었어요: 일부 프로그래머들이 특정 구현을 기대하고 이용하게 되었는데, 즉:

: COMPILE R> DUP @ , CELL+ >R ;

이 구현은 네이티브 코드 Forth 시스템에서는 동작하지 않아요. 인라인 코드 확장과 피호프(peephole) 최적화를 사용하는 네이티브 코드 Forth에서는 생성되는 객체 코드의 크기가 다양해져서 컴파일된 항목이 실제로 사용하는 정확한 메모리 양을 알 수 없어요.

이런 이유로 COMPILE은 표준에 포함되지 않았고 [COMPILE]POSTPONE을 위해 옮겨졌어요. 추가 논의는 Hayes, J.R., "Postpone"에서 찾을 수 있어요.

테스트 (Testing)

T{ : GT4 POSTPONE GT1 ; IMMEDIATE ->  }T
T{ : GT5 GT4 ; ->  }T
T{ GT5 -> 123 }T
T{ : GT6 345 ; IMMEDIATE ->  }T
T{ : GT7 POSTPONE GT6 ; ->  }T
T{ GT7 -> 345 }T

더 알아보기 (Learn more)

출처: POSTPONE — Forth 2012 Standard