diff options
| author | eunhhu <[email protected]> | 2026-09-30 06:42:17 +0100 |
|---|---|---|
| committer | eunhhu <[email protected]> | 2026-09-30 06:42:17 +0100 |
| commit | c5419777f16a4330072bc732b12c2924887c0fcf (patch) | |
| tree | d782b4d013c460bff90f39bc3ca341e654ec6afa /docs/research | |
| parent | a6c2aae1a7d3f5caeb829514c7238009e0ad38fe (diff) | |
| download | pure-c5419777f16a4330072bc732b12c2924887c0fcf.tar.gz pure-c5419777f16a4330072bc732b12c2924887c0fcf.zip | |
Say that sends and applies now spread their fields (105)
aup spreads an item or a message into a send or a record, and sets an
item whole (c69682e): the board sends { ..at } and applies cards[k] =
Card { ..remote }, and a new field is written in two places, the record
and the output. v6 on both nodes, cut apart and joined again, agrees on
the later change; its module is byte for byte the one with every field
written.
Diffstat (limited to 'docs/research')
| -rw-r--r-- | docs/research/105-growing-a-shared-board.md | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/docs/research/105-growing-a-shared-board.md b/docs/research/105-growing-a-shared-board.md index 969597b..5fe5527 100644 --- a/docs/research/105-growing-a-shared-board.md +++ b/docs/research/105-growing-a-shared-board.md @@ -24,8 +24,9 @@ 보였다. `make check`가 이제 그 빌드도 돌린다. - 필드 순서를 바꾼 판(v4)은 한 노드만 올린 채로 0.1초 만에 같아진다. 두 노드를 갈라 같은 카드를 양쪽에서 고치면, 다시 이을 때 나중 변경이 두 판 모두에서 이긴다. 두 노드를 다 멈췄다 띄워도 이어진다. -- 남은 걸림: 보내기와 받은 것을 적용하는 곳은 여전히 필드마다 적는다(언어). 출력과 입력의 필드 목록은 `message like`로 한 번만 - 적는다(aup `aa279fb`). 노드 이름은 시작 줄이 알린다(`f695e9a`). +- 언어의 걸림도 풀었다. 출력과 입력의 필드 목록은 `message like`로 한 번 적고(aup `aa279fb`), 보내기와 적용은 항목이나 메시지를 + 펼쳐 쓴다(`send changed { ..at }`, `cards[k] = Card { ..remote }`, aup `c69682e`). 필드 하나를 더할 때 고칠 곳이 다섯에서 + 둘(레코드와 출력)로 줄었다. 노드 이름은 시작 줄이 알린다(`f695e9a`). ## 앱 @@ -38,6 +39,7 @@ | v3 | 카드가 누구의 것인가: `who` 필드와 `input assign` | | v4 | 카드와 메시지의 필드 순서를 바꿨다 | | v5 | 받는 입력을 `input remote = message like changed`로 적었다 | +| v6 | 카드를 통째로 보내고(`send changed { ..at }`) 통째로 적용한다(`cards[k] = Card { ..remote }`) | ## 걸린 것 @@ -45,7 +47,7 @@ |---|---|---|---| | 1 | 카드의 "누가 바꿨나" 필드를 `by`로 쓸 수 없다(`list of Card by title`의 예약어) | aup | 진단은 분명하다. `node`로 썼다 | | 2 | 노드 이름을 주지 않으면 모듈 파일 이름(`board2`)이 된다. 링크의 source가 `board2.changed`가 되어 받는 쪽(`--sender a.changed`)이 거절했다 | pure-serve | `--name`으로 풀었다. 이제 시작 줄이 이름을 알리고 사용법이 기본값을 말한다(`f695e9a`) | -| 3 | 필드 하나(`who`)를 더하려고 레코드, 출력, 입력, 보내기 셋, 받은 것을 적용하는 곳을 고쳤다 | aup | 출력과 입력은 `message like`로 한 번 적는다(aup `aa279fb`). 보내기와 적용은 여전히 필드마다다(남음) | +| 3 | 필드 하나(`who`)를 더하려고 레코드, 출력, 입력, 보내기 셋, 받은 것을 적용하는 곳을 고쳤다 | aup | 출력과 입력은 `message like`로 한 번 적고(aup `aa279fb`), 보내기와 적용은 펼친다(`..at`, `cards[k] = Card { ..remote }`, aup `c69682e`). 이제 레코드와 출력 두 곳이다 | | 4 | 한 노드씩 올리면 교착: 새 노드는 옛 보내기를, 옛 노드는 새 보내기를 거절하고, 옛 노드는 옛 보내기가 기다려 새 모듈로 시작할 수 없다 | 런타임, 링크 | 고쳤다: 기다리는 보내기를 이름으로 옮긴다(`290cbdb`), 필드를 이름으로 받는다(014) | | 5 | 시작이 거절될 때 이유를 말하지 않는다 | 런타임 | 고쳤다: `PureApp.why`, pure-serve와 Vega가 찍는다 | | 6 | 옛 노드가 새 노드의 보내기를 거절하는 동안 옛 노드가 다시 뜨면, 새 노드의 링크가 영영 멈췄다 | 링크 | 고쳤다(`d6f4eb8`) | @@ -112,8 +114,10 @@ A가 나중에 `lee`에게 준다. B는 떨어진 채 카드 하나를 더한다 | B도 v4 | 같다 | | 갈라 놓고 양쪽에서 같은 카드를 고침 | 떨어진 동안 다르다. 다시 이으면 나중 변경(`lee`)으로 같다 | | 둘 다 멈췄다 띄움, 카드 하나 더함 | 같다 | +| v6를 둘 다(통째로 보내고 적용), 갈라 놓고 같은 카드를 고침 | 다시 이으면 나중 변경으로 같다 | + +v6의 모듈은 펼치기를 필드마다 적은 v6와 바이트로 같다. 펼치기는 적는 방법일 뿐이고, 실행은 그대로다. ## 다음 -- 걸림 3의 나머지: 보내기와 받은 것의 적용을 필드마다 적지 않게 하는 것(레코드를 펼쳐 보내기 같은 것)은 aup의 일이다. - 다른 모양의 기록을 옮기는 비용은 기록 하나에 310 ns였다(014). 필드 목록을 전달마다 한 번만 읽으면 더 준다. |
