diff options
Diffstat (limited to 'docs/design/002-dsl-direction.md')
| -rw-r--r-- | docs/design/002-dsl-direction.md | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/docs/design/002-dsl-direction.md b/docs/design/002-dsl-direction.md index 3ba3d5d..d13c595 100644 --- a/docs/design/002-dsl-direction.md +++ b/docs/design/002-dsl-direction.md @@ -933,3 +933,26 @@ on packet { i64인 것과 같다. 값끼리는 섞이지 않는다: text의 값과 바이트의 값은 비교도 잇기도 하지 않고(진단), `bytes(t)`나 `text(b)`로 옮긴다. - 검증: `bytes_compared`가 0x00과 0xff가 든 무작위 바이트 400쌍을 여섯 관계, 양쪽의 리터럴, 형식이 든 문자열, 리터럴과의 잇기로 파이썬과 견준다. 진단 둘(바이트와 text의 값). 그 전에 컴파일되던 소스 60개의 모듈은 바이트까지 같다. + +### 블록 안의 let 리스트, `xs = [...]` (Pure 140의 inflate 뒤) + +```text +for block in blocks { + let lengths: list of number # 블록 안의 let 리스트: let을 지날 때마다 빈 리스트로 시작한다 + for s in 0 .. 288 { lengths.append(8) } +} +let ys: list of number = [1, 2, 3] +ys = [4, 5] # let의 리스트를 비우고 그 원소로 채운다. []는 비우기만 +``` + +- **블록 안.** let의 리스트를 if, for, while, match의 블록에도 둔다. 뜻은 let을 지날 때마다 새 리스트다. 리스트는 블록이 끝나면 + 보이지 않는다. 같은 이름은 한 레코드의 리스트 하나이고, 핸들러나 fn의 이벤트 리스트 하나다(`let.이름`). 접기와 필터의 블록에는 둘 수 + 없다. +- **`xs = [...]`.** let의 리스트를 비우고 원소를 차례로 붙인다. 저장되는 리스트에는 쓰지 않는다(진단). +- **비용.** 비우기는 항목을 하나씩 지운다(`while xs.count > 0 { xs.remove(…) }`, 수의 리스트는 자리 `count - 1`, 다른 리스트는 + `.last`). Pure에 한 번에 비우는 명령이 없어서다. 항목 수에 비례한다. +- **고친 것.** 식 안의 리스트 리터럴이 원소를 버리고 있었다(필드의 `[1, 2]`가 빈 리스트로 됐다). 이제 원소를 잇는다. 레코드 필드에는 + 여전히 let의 리스트나 `[]`만 준다(진단). +- 검증: `inner_lists`가 for의 블록, 키 있는 리스트, fn의 for, 보기의 본문에 둔 let 리스트와 `xs = [...]`, `xs = []`를 무작위 100 + 사건으로 파이썬과 견준다. 진단 하나가 바뀌었다(블록 밖에서 그 리스트를 읽으면 `unknown state`). 그 전에 컴파일되던 소스 60개의 + 모듈은 바이트까지 같다. |
