조건과 대기를 빌드 때 계산해 같은 시간표에 담는다
배경
시간표는 사용자가 박자와 이동 시간을 적어 정하고, 값은 점이 도형에 닿을 때만 바뀐다. 잠금, 교착, 큐 역압, 재시도, 회로 차단기는 값에 따라 이동이 달라지거나 조건이 풀릴 때까지 기다려야 해서 사용자가 결과 시각을 일일이 계산해야 한다. 움직이는 SVG에는 스크립트가 없고 재생기는 시간표를 읽기만 한다. 같은 원본은 같은 시간표와 출력을 만들어야 하고, 일시정지, 배속, 재시작, 단계 이동이 결과를 바꾸면 안 된다.
선택지
| 선택지 | 장점 | 단점 |
|---|---|---|
| 기존 시간표를 유지하고 조건, 대기, 값 유지, 단계별 도형 상태, 구간별 이동 시간을 선택 기능으로 더한다. 조건은 빌드 때 결정적인 이벤트 처리로 계산한다 | 기존 원본과 출력이 그대로이고, SVG와 재생기가 같은 시간표를 읽는다. 특정 사례 전용 문법이 아니다 | 이벤트 순서, 대기 종료, 계산 예산의 계약을 정해야 한다 |
| 설명용 시간표만 확장하고 결과 시각은 사용자가 적는다 | 기존 모델이 그대로다 | 조건에 따른 대기를 표현하지 못하고 값이 바뀌면 시각을 손으로 다시 계산한다 |
| 재생기에서 조건과 대기를 계산한다 | 재생 중 상태에 반응할 수 있다 | SVG에는 스크립트가 없어 같은 결과를 낼 수 없고, 일시정지, 배속, 단계 이동에서 결과가 갈릴 수 있다 |
결정
기존 시간표를 유지하면서 조건, 대기, 값 유지, 단계별 도형 상태, 구간별 이동 시간을 선택 기능으로 더하고, 조건 계산은 시간표를 만들 때 결정적인 이벤트 처리로 끝낸다. 가른 기준은 SVG와 재생기가 같은 결과를 읽고 새 기능을 쓰지 않는 원본이 바뀌지 않는지다. 이 선택지만 둘을 함께 만족한다. 치르는 비용은 이벤트 순서, 대기 종료, 이벤트 수 예산을 문법과 시간표 계약으로 정해야 하는 것이고, 예산 기본값은 측정으로 확정한다. 시간 상한(1시간)과 메모리 한계는 바꾸지 않는다.
결과
- 잠금, 교착, 큐 역압, 회로 차단기를 공통 기능으로 그린다.
- 같은 원본이 같은 이벤트 순서와 결과를 만들고 재생기는 상태를 다시 계산하지 않는다.
- 새 기능을 쓰는 원본에만 이벤트 처리 비용이 붙는다.
- 문법, 진단
code, 시간표 필드, 이벤트 수 예산이 늘어 유지할 계약이 늘어난다. - 끝나지 않는 대기와 예산 초과를 진단으로 다뤄야 한다.
다시 볼 조건
- 이벤트 예산 기본값이 정상 예제를 막거나, 대기가 많은 정상 원본의 빌드가 느려질 때
- 같은 시각의 이벤트 순서가 예제에서 사용자의 기대와 반복해서 어긋날 때