컴파일타임 실행 제약

컴파일타임 실행 제약

Nim의 컴파일타임 실행(compile-time execution)은 강력한 기능이지만, 전부 다 쓸 수 있는 건 아니에요. 상수 표현식이나 매크로 정의처럼 컴파일 중에 실행되는 코드는 언어의 일부 기능을 쓰지 못하게 막혀 있는데, 이 절에서 어떤 기능이 제한되는지 살펴볼게요.

출처: Nim Manual

본문

컴파일타임에 실행될 Nim 코드는 다음 언어 기능을 사용할 수 없어요:

  • methods — 다중 디스패치(multi-dispatch) 방식의 프로시저
  • closure iterators — 클로저를 생성하는 반복자
  • cast 연산자 — 타입을 강제로 변환하는 연산자
  • reference(pointer) 타입 — 참조(포인터) 타입
  • FFI — 외부 함수 인터페이스(Foreign Function Interface)

FFI나 cast를 사용하는 래퍼(wrapper)의 사용도 마찬가지로 막혀 있어요. 여기서 주의할 점이 있는데, 표준 라이브러리에 포함된 래퍼들도 예외가 아니라는 거예요. 즉 표준 라이브러리 안에서 FFI나 cast를 쓰는 함수를 컴파일타임 코드에서 호출하는 것도 제약에 걸려요.

그래도 크게 걱정할 필요는 없어요. 매뉴얼은 이 제약들 중 일부 또는 전부가 시간이 지나면서 해제될 가능성이 높다고 밝히고 있어요. 다시 말해 지금 막혀 있는 기능이 영원히 막혀 있는 건 아니고, 언어가 발전하면서 점차 열릴 수 있는 영역이에요.

더 알아보기 (Learn more)

  • 컴파일타임 실행이 무엇인지, 어떤 코드가 컴파일 중 실행되는지 궁금하다면 매뉴얼의 컴파일타임 실행 관련 절을 함께 보면 도움이 돼요.
  • 매크로를 직접 만들어 보면서 컴파일타임 코드가 실제로 어떻게 동작하는지 확인해 보는 것도 좋은 연습이에요.
  • 관련 내용: Nim Manual