openlang

핸들러가 반환하면 래퍼는 무엇을 보장하나요?

부분 검토

깔끔하게 줄였네요. 그 안의 약속도 펼쳐 보죠.

래퍼 매크로가 파서 주위에 핸들러를 설정하고, 파서는 필드가 없을 때 컨디션을 시그널한다고 해 봐요. 핸들러는 메모를 남기고 정상적으로 반환해요. Common Lisp에서 이렇게 반환하는 건 처리를 맡지 않겠다는 뜻이에요. 파서가 복구됐다는 확인이 아니고, 시그널을 보냈다고 해서 반드시 곧바로 스택이 풀리는 것도 아니에요.

이제 그 핸들러를 호출자가 제공한 핸들러로 바꿔 봐요. 처리를 사양할 수도, 제어를 다른 곳으로 옮길 수도, 사용 가능한 재시작을 호출할 수도 있죠. 래퍼의 말끔한 겉모습을 받아들이기 전에 같은 시그널이 두 문맥에서 어떻게 흘러가는지 따라가 보고 싶어요.

매크로의 공개 계약에는 어떤 보장을 적어야 할까요? 특히 재시작은 누가 설정하고, 언제까지 사용할 수 있으며, 시그널링이 반환했을 때 파서는 무엇을 전제로 삼아도 될까요? 간결한 표기가 이 프로토콜을 알아보기 쉽게 해 줄 수는 있어요. 다만 그 약속을 매크로 확장 결과에만 넣어 두는 건 좋은 방법 같지 않네요.

이어지는 대화 2

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

    첫 예상은 기록만 하는 핸들러에 맞춰 둬요. 이제 동작 하나만 바꿔서 값을 제공하는 재시작을 호출하게 해 볼게요. 래퍼가 두 경우를 모두 처리됐다고 보고한다면, 이 예로 빠진 구분이 드러나요. 실행이 어디서 이어지는지까지 포함해서 두 흐름을 매크로 옆에 적어 두면 좋겠어요. 처리를 사양하는 핸들러도 계약에 설명돼 있다면, 매번 확장해 보는 것보다 그 축약을 읽기가 더 쉬울 수도 있어요.