diff options
| author | eunhhu <[email protected]> | 2026-10-05 13:38:08 +0100 |
|---|---|---|
| committer | eunhhu <[email protected]> | 2026-10-05 13:38:08 +0100 |
| commit | b2b7f849d6ab80fceb7d3c3c312fae859613a913 (patch) | |
| tree | 8520db8e7f1d4d54c6c59d4df05020ca223bb426 /docs | |
| parent | 2945d2c0d6661d3602a2950825179331cb0ce4e0 (diff) | |
| download | pure-b2b7f849d6ab80fceb7d3c3c312fae859613a913.tar.gz pure-b2b7f849d6ab80fceb7d3c3c312fae859613a913.zip | |
023: only checks the tier moved know just that they fail (those left in place fault where they are; now is the host's per-event value); value numbering of pure operations, which words' floor assumes
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/design/023-optimizing-tier.md | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/docs/design/023-optimizing-tier.md b/docs/design/023-optimizing-tier.md index e119e97..bcc1064 100644 --- a/docs/design/023-optimizing-tier.md +++ b/docs/design/023-optimizing-tier.md @@ -76,10 +76,11 @@ C의 1.25배 안이다(roots 1.02 × 1.22). **빠듯하다.** JIT의 코드는 C - **뜻은 그대로.** 수는 binary64이고 −0은 −0이다. 유한하지 않은 결과, 0으로 나누기, 없는 키, 넘친 예산은 이벤트를 실패시키고, 결함의 종류와 자리가 실행기와 같다. 바뀌는 것은 표현과 실행의 길뿐이다. -- **결함은 빠른 길이 났는지만 안다.** 이벤트는 실패하면 통째로 되돌려지고, 같은 상태와 입력에서 결정적이다(`now`도 이벤트마다 정해진 - 값이다). 그래서 빠른 길의 검사는 "어딘가에서 결함이 난다"만 정확하면 된다: 나면 이벤트를 되돌리고 실행기가 처음부터 다시 돌아 - 같은 결함을 같은 자리에서 낸다. 끌어올린 검사가 너무 일찍 실패하면(실행기라면 거기까지 가지 않았을 때) 이벤트를 실행기로 다시 - 돌리면 되니 결과가 같다. 값은 실패할 때만 든다. +- **옮긴 검사는 났는지만 안다.** 이벤트는 실패하면 통째로 되돌려지고, 같은 상태와 입력에서 결정적이다(`now`는 호스트가 이벤트 + 전에 정한 `app->now`라 이벤트 안에서 그대로다). 그래서 계층이 루프 앞으로 옮기거나 하나로 묶은 검사는 "이 루프 어딘가에서 결함이 + 날 수 있다"만 정확하면 된다: 그 검사가 실패하면 그 루프를 검사가 제자리에 있는 코드로 돌고, 거기서도 결함이면 이벤트를 되돌리고 + 실행기가 처음부터 다시 돌아 같은 결함을 같은 자리에서 낸다. 제자리에 남은 검사(`require`, TPC-C의 거절 같은 뜻으로 실패하는 + 이벤트)는 지금처럼 그 자리에서 정확히 낸다. 다시 돌리는 값은 옮긴 검사가 실패할 때만 든다. - **모든 블록.** 핸들러, 본문 있는 보기, 함수의 블록 모두를 계층이 맡는다. 코드로 하지 않는 명령(드문 텍스트 편집 같은)은 지금처럼 step을 부른다. 값 모형으로 블록을 거르지 않는다. - **벤치마크의 모양을 넣지 않는다.** 묶음의 상수(`48271`, `1048576`)나 프로그램의 모양을 아는 코드는 없다. 미리 읽기 같은 기법은 @@ -95,6 +96,9 @@ C의 1.25배 안이다(roots 1.02 × 1.22). **빠듯하다.** JIT의 코드는 C SSA 값에 대응시키고 합류점(루프 머리 포함)에 φ를 둔다. - 상태, 리스트, 텍스트는 메모리다. 명령마다 무엇을 읽고 쓰는지(리스트별)를 이미 안다(`changes`). 이것으로 루프 불변을 가린다. - step을 부르는 명령은 메모리 전체를 쓰는 것으로 본다(부르기 전에 장부와 걷기의 자리를 쓰고, 부른 뒤 다시 읽는다. 022의 규칙 그대로). +- 값 번호 매기기로 순수한 연산의 같은 값을 하나로 한다(같은 리스트의 같은 항목 읽기는 그 사이에 그 리스트를 바꾸는 것이 없을 때, + 같은 수의 텍스트 쓰기와 보간도). words는 let이 텍스트를 담지 못해 같은 단어를 두세 번 쓰는데, 바닥은 한 번 쓴다: 그 차이를 이것이 + 메운다. ### 2. 타입과 범위 |
