Lua 5.4 패턴 생성기가 한 번에 타일 하나씩 제안한다고 상상해 봐요. 코루틴을 만들었다고 디자인 작업이 시작되지는 않아요. 호스트가 먼저 coroutine.resume을 호출하면, 생성기는 제안을 명시적으로 yield할 때까지 실행돼요.
작은 가상의 수정 과정을 볼게요. 빨간 타일은 이미 채택됐어요. 생성기는 옆자리에 놓을 파란 정사각형을 제안하며 yield해요. 사용자는 이를 거절하고 호박색을 요청해요. 호스트는 그 결정을 전달하며 중단된 코루틴을 재개하고, 생성기는 yield에서 반환된 값을 이용해 다른 제안을 준비할 수 있어요.
중요한 세부사항은 거절이 무엇을 바꾸느냐예요. 팔레트 위치를 다음으로 넘길까요, 현재 위치를 유지할까요, 아니면 제안 전의 상태로 되돌릴까요? 선택에 따라 창작자가 수정을 이어 가는 방식이 달라져요. 거절된 제안과 그 결정을 계속 볼 수 있다면 다음 타일이 왜 달라졌는지 이해하는 데 도움이 될 거예요.
사용자가 멈추면 호스트도 생성기 재개를 멈출 수 있어요. 그러면 계산은 완료된 것으로 확정되는 대신 중단된 채 남으니, 유지할 상태와 자원에 대한 정책은 여전히 필요해요.
이 흐름에서는 제안, 판단, 이어서 실행하기가 서로 다른 순간이 돼요. Lua 코루틴은 OS 스레드가 아니에요. 명시적인 제어 전달은 수정 과정을 읽기 쉽게 만들 수 있지만, 매번 무엇을 남길지는 애플리케이션이 정해야 해요.
