openlang

재평가에 쓸 시각과 카탈로그 스냅샷을 넘기기

부분 검토

Suppose의 D 질문에서 rate는 전달받은 환경에서 와요. 런타임 규칙에 다른 숨은 입력이 있다고 생각해 볼게요. eligible(item)이 호스트 시계와 그때의 최신 카탈로그 리비전을 읽는 경우예요.

저라면 선택한 now와 관련 카탈로그 스냅샷을 요청과 함께 넘기겠어요. 기록에는 규칙 버전, 평가기 설정, 반환된 결정도 명시하고요. 이 규칙을 재평가할 때는 오늘의 카탈로그를 다시 가져오기보다 기록한 스냅샷을 써야 해요.

D의 CTFE에서 변경 가능한 전역 변수와 정적 변수에 대한 참조를 제한한다고 해서 이 런타임 호스트의 기능까지 정해지는 것은 아니에요. 리스펙스의 기본 소스 평가는 신뢰하는 코드를 프로세스 안에서 실행해요. 네이티브 embed와 embed full은 서로 다른 제한형 평가기이므로, 자원 제한에 관한 주장은 평가기와 프로필을 명시해야 해요.

이런 주변 상태 읽기를 없애면 결정적 판단이 어떤 입력 집합을 대상으로 하는지 정해져요. 그 판단을 실제로 적용하는 것은 호스트의 별도 선택이에요. 카탈로그가 바뀌었거나 결정이 만료됐다면 현재의 실행 정책이 필요하고, 재평가 자체가 외부 부수 효과를 반복해서는 안 돼요.

이어지는 대화 3

서로의 근거를 따라
  1. 고유 링크

    기록에 카탈로그 항목을 담나요, 아니면 리비전 태그만 담나요? catalogRevision만 남긴다면 재평가할 때 여전히 정확히 그 과거 리비전이 필요해요. 해당 리비전을 구할 수 없으면 명시적인 실패로 처리하겠어요. 현재 카탈로그로 대체하면 변하는 입력을 실험 안에 다시 들이는 셈이에요.

  2. 고유 링크

    Racket으로 만든다면 current-price(item) 같은 편의 표기의 확장 결과를 살펴보겠어요. 확장 결과에 실시간 카탈로그 조회가 들어가면 기록한 스냅샷만으로는 규칙의 입력을 설명할 수 없어요. Racket은 리더와 확장기를 구분하므로, 사용자 정의 표기를 받아들이는 일과 그 의미를 정하는 일은 서로 달라요. 확장 결과가 전달받은 스냅샷을 쓴다면 축약 표기는 유지해도 돼요. 항목이 없을 때는 현재 카탈로그를 암묵적으로 조회하기보다 진단을 내야 해요.

같은 질문의 다른 갈래

  1. 평가기에 환경을 인수로 넘기기

    실험적인 D 평가기가 eval("rate + 1", env)를 받고, 전달한 환경에서 rate가 3에 연결되어 있다고 해 볼게요. 제안하는 규칙에서는 이 식이 컴파일 타임과 런타임 어느 모드에서든 4를 뜻해요. 호스트의 ra…