docs: disambiguate control-flow headers

This commit is contained in:
2026-08-16 08:42:21 +09:00
parent 95de333da4
commit 57b47a574a
2 changed files with 17 additions and 4 deletions
+12
View File
@@ -26,3 +26,15 @@
- 구현 영향: match 문맥의 식 파서는 최상위 `{` 앞에서 scrutinee 파싱을 멈춰야 하며,
괄호 안에서는 일반 구조체 초기화 규칙을 그대로 적용한다. 오류 복구는 모든 반복에서
적어도 한 토큰을 소비해 같은 진단을 무한 반복하지 않아야 한다.
## 2026-08-16 — v0.1.5
### 제어 흐름 헤더와 구조체 초기화의 중괄호 모호성 일반화
- 문제: v0.1.4의 모호성은 `match`뿐 아니라 `if flag {}`, `while flag {}`
`for x in values {}`처럼 식 직후 본문이 시작되는 모든 제어 흐름에 동일하게 발생한다.
- 결정: `if`, `while`, `for`, `match`, `comptime if` 헤더 바로 뒤의 최상위 `{`는 항상
제어 흐름 블록을 시작한다. 헤더 최상위에 구조체 초기화식을 쓰려면 괄호가 필수다.
- 구현 영향: 제어 흐름 헤더의 최상위 식 파싱에서 구조체 초기화를 금지하되 괄호 안에서는
일반 식 파싱 상태를 복원한다. 단순 식별자 조건과 배열·슬라이스 반복은 본문 `{` 앞에서
정상적으로 종료되어야 한다.
+5 -4
View File
@@ -1,4 +1,4 @@
# Ferro 언어 명세 v0.1.4
# Ferro 언어 명세 v0.1.5
DOS용 시스템 프로그래밍 언어. C만큼 빠르고, 메모리 안전성을 함수 단위 지역 검사만으로 보장한다.
파일 확장자 `.fe`, 컴파일러 이름 `fec`, 심볼 파일 `.fei`.
@@ -450,9 +450,10 @@ pub fn main() -> !void {
- 이 루프 형태들은 경계 검사를 생략한다(컴파일러가 안전을 보장).
- `while``bool` 조건만.
- `match`**완전성 검사**. 모든 배리언트를 다루거나 `_` 필요.
- `match expr { ... }`에서 scrutinee 바로 뒤의 `{`는 항상 arm 블록을 시작한다.
따라서 구조체 초기화식을 scrutinee로 직접 쓸 때는 `match (Point{ x: 1, y: 2 }) { ... }`처럼
괄호로 감싸 구조체 초기화의 `{` 명시한다.
- `if`/`while`/`for`/`match`/`comptime if` 헤더 바로 뒤의 `{`는 항상 해당 제어 흐름의
본문 또는 arm 블록을 시작한다. 따라서 구조체 초기화식을 헤더의 최상위 식으로 직접
쓸 때는 `match (Point{ x: 1, y: 2 }) { ... }`처럼 괄호로 감싸 구조체 초기화의 `{`
명시한다. 괄호 안의 구조체 초기화는 일반 식 규칙을 따른다.
- `break`/`continue`는 가장 안쪽 루프에만 적용(레이블 없음).
- `defer block`은 스코프 종료 시 역순 실행. 소멸자와 함께 선언 역순으로 병합 실행. `return`/`break`/에러 전파 경로에서도 실행.