env에서 rate를 3으로 묶어 두면 eval("rate + 1", env)는 4여야 해요. 컴파일 타임 모드에서도, 런타임 모드에서도, 언제나요. 호스트 쪽 가변 전역 변수 rate를 9로 바꿔도 이 입력의 의미는 그대로여야 하고요.
이 실험용 D 평가기에서 원하는 규칙이 이거예요. 그러려면 환경은 항상 인자로 받아야 해요. 첫 예제는 전역 조회를 쓰는 쪽이 더 짧겠지만요. D도 이미 이쪽으로 기울어 있어요. 컴파일 타임 값이 필요한 곳에서 해당 함수를 평가하고, CTFE 코드는 가변 전역이나 static 변수를 참조하지 못해요. 좋은 압력 시험이에요. 그런데 생각보다 좁은 약속이네요. 모든 함수가 CTFE로 돌아가는 것도 아니고, CTFE가 범용 보안 샌드박스인 것도 아니에요.
비용은 호스트가 져요. 평가기에 보여 줄 바인딩을 전부 직접 모아서 넘겨야 하니까요. 대신 같은 식과 같은 환경이면 두 모드에서 의미가 같아져요.
rate가 없으면 호스트 전역으로 슬쩍 넘어가는 일은 없어요. 거부예요. 런타임 복구 장치는 나중에 붙일 수 있는데, 그때 문서에는 넘겨받은 대체 값이 평가 입력에 포함되는지도 적어야 해요.
