WITH-COMPILATION-UNIT — 컴파일 지연 동작의 범위를 묶는 매크로

WITH-COMPILATION-UNIT — 컴파일 지연 동작의 범위를 묶는 매크로

여러 파일을 연달아 컴파일할 때, 컴파일러가 끝까지 미뤄두는 동작(예: 정의되지 않은 함수 경고)의 기준점을 한 곳으로 모으고 싶을 때 쓰는 매크로예요. 폼들을 묶어 '하나의 컴파일 단위'처럼 다루게 해줘요.

출처: CLHS: Macro WITH-COMPILATION-UNIT

이 문서는 컴파일/빌드 관련 매크로입니다. 여러 파일을 함께 컴파일하는 시점에 주로 유용해요.

시그니처

with-compilation-unit ({option}) form* => results*

option::= :override override

본문

인자와 값 (Arguments and Values)

  • override — 일반화된 불(generalized boolean); 평가돼요. 기본값은 nil.
  • forms — 암묵적 progn.
  • resultsforms가 돌려준 값.

설명 (Description)

forms를 왼쪽에서 오른쪽으로 실행해요. with-compilation-unit의 동적 환경 안에서, 컴파일러가 컴파일이 끝날 때까지 미뤄둔 동작은 가장 바깥쪽 with-compilation-unit 호출이 끝날 때까지 미뤄져요.

허용되는 option 집합은 구현이 확장할 수 있지만, 표준화된 키워드는 :override뿐이에요.

동적으로 중첩되면 :override와 연결된 값이 true가 아닌 한 바깥쪽 with-compilation-unit 호출만 효과를 가져요. :override가 true인 경우엔 경고가 그 true인 가장 안쪽 호출 끝까지 미뤄져요.

compile-file 함수는 자기 코드 주위에 (with-compilation-unit (:override nil) ...)의 효과를 제공해요.

구현 의존적인 확장은 구현 의존적인 키워드를 써서 프로그래머가 명시적으로 요청했을 때에만 제공될 수 있어요. 구현들은 키워드 없거나 :override 키워드만 쓰는 이 매크로 사용에 추가 의미를 붙이는 것을 금지돼요.

예제 (Examples)

어떤 구현이 정의되지 않은 함수 경고 같은 특정 종류의 경고를 컴파일 단위(예: 파일) 끝까지 미루는 게 정상이라면, 다음 예제는 그 경고들이 여러 파일의 컴파일이 끝날 때까지 미뤄지게 하는 법을 보여줘요.

 (defun compile-files (&rest files)
   (with-compilation-unit ()
     (mapcar #'(lambda (file) (compile-file file)) files)))

 (compile-files "A" "B" "C")

다만 구현이 평소에 어떤 경고도 미루지 않는다면 with-compilation-unit을 써도 효과가 없을 수 있다는 점을 유의하세요.

특이 상황 (Exceptional Situations)

없음.

참고 (Notes)

없음.

더 알아보기

  • compile — 폼/함수를 컴파일하는 함수
  • compile-file — 파일을 컴파일하는 함수