docs: disambiguate match scrutinees

This commit is contained in:
2026-08-16 08:33:19 +09:00
parent 3aa7618d0c
commit 95de333da4
2 changed files with 16 additions and 1 deletions
+12
View File
@@ -14,3 +14,15 @@
- 명세 반영: 예제의 비교를 `c.^ == '\n' as u8`로 수정하고 §4.1에 규칙을 명시했다. - 명세 반영: 예제의 비교를 `c.^ == '\n' as u8`로 수정하고 §4.1에 규칙을 명시했다.
- 구현 영향: 타입 검사기는 `char`를 독립 기본 타입으로 취급해야 하고, C 방출 시 같은 - 구현 영향: 타입 검사기는 `char`를 독립 기본 타입으로 취급해야 하고, C 방출 시 같은
크기의 정수 표현을 사용할 수 있어도 Ferro 단계에서는 `char`/`u8` 혼용을 거부해야 한다. 크기의 정수 표현을 사용할 수 있어도 Ferro 단계에서는 `char`/`u8` 혼용을 거부해야 한다.
## 2026-08-16 — v0.1.4
### `match` scrutinee와 구조체 초기화의 중괄호 모호성
- 문제: `match expr { arms }``Type{ fields }`가 모두 식별자 뒤에 `{`를 사용하므로
`match value { ... }`의 arm 블록을 구조체 초기화로 잘못 소비할 수 있었다.
- 결정: `match` scrutinee 바로 뒤의 `{`는 항상 arm 블록으로 해석한다. 구조체 초기화식
자체를 scrutinee로 쓸 때는 `match (Type{ ... }) { ... }`처럼 괄호가 필수다.
- 구현 영향: match 문맥의 식 파서는 최상위 `{` 앞에서 scrutinee 파싱을 멈춰야 하며,
괄호 안에서는 일반 구조체 초기화 규칙을 그대로 적용한다. 오류 복구는 모든 반복에서
적어도 한 토큰을 소비해 같은 진단을 무한 반복하지 않아야 한다.
+4 -1
View File
@@ -1,4 +1,4 @@
# Ferro 언어 명세 v0.1.3 # Ferro 언어 명세 v0.1.4
DOS용 시스템 프로그래밍 언어. C만큼 빠르고, 메모리 안전성을 함수 단위 지역 검사만으로 보장한다. DOS용 시스템 프로그래밍 언어. C만큼 빠르고, 메모리 안전성을 함수 단위 지역 검사만으로 보장한다.
파일 확장자 `.fe`, 컴파일러 이름 `fec`, 심볼 파일 `.fei`. 파일 확장자 `.fe`, 컴파일러 이름 `fec`, 심볼 파일 `.fei`.
@@ -450,6 +450,9 @@ pub fn main() -> !void {
- 이 루프 형태들은 경계 검사를 생략한다(컴파일러가 안전을 보장). - 이 루프 형태들은 경계 검사를 생략한다(컴파일러가 안전을 보장).
- `while``bool` 조건만. - `while``bool` 조건만.
- `match`**완전성 검사**. 모든 배리언트를 다루거나 `_` 필요. - `match`**완전성 검사**. 모든 배리언트를 다루거나 `_` 필요.
- `match expr { ... }`에서 scrutinee 바로 뒤의 `{`는 항상 arm 블록을 시작한다.
따라서 구조체 초기화식을 scrutinee로 직접 쓸 때는 `match (Point{ x: 1, y: 2 }) { ... }`처럼
괄호로 감싸 구조체 초기화의 `{`를 명시한다.
- `break`/`continue`는 가장 안쪽 루프에만 적용(레이블 없음). - `break`/`continue`는 가장 안쪽 루프에만 적용(레이블 없음).
- `defer block`은 스코프 종료 시 역순 실행. 소멸자와 함께 선언 역순으로 병합 실행. `return`/`break`/에러 전파 경로에서도 실행. - `defer block`은 스코프 종료 시 역순 실행. 소멸자와 함께 선언 역순으로 병합 실행. `return`/`break`/에러 전파 경로에서도 실행.