Files
doslang-mirror/SPEC.AUDIT.md
T

2.6 KiB

Ferro specification audit log

SPEC.md를 항상 최신 규범 문서로 유지하고, 최초 AUDIT.md 반영 이후 설계 판단으로 바뀐 사항은 이 파일에 누적한다.

2026-08-16 — v0.1.3

charu8 사이의 변환

  • 문제: §4.1은 charu8과 별개 타입으로 규정하고 암묵 변환을 금지하지만, §6.4의 줄 수 계산 예제는 []u8에서 얻은 값을 문자 리터럴과 직접 비교했다.
  • 결정: 별개 타입과 암묵 변환 금지 원칙을 유지한다. 저장, 대입, 비교 모두 명시적인 as가 필요하며 문자 리터럴도 문맥에 따라 자동으로 u8이 되지 않는다.
  • 명세 반영: 예제의 비교를 c.^ == '\n' as u8로 수정하고 §4.1에 규칙을 명시했다.
  • 구현 영향: 타입 검사기는 char를 독립 기본 타입으로 취급해야 하고, C 방출 시 같은 크기의 정수 표현을 사용할 수 있어도 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 파싱을 멈춰야 하며, 괄호 안에서는 일반 구조체 초기화 규칙을 그대로 적용한다. 오류 복구는 모든 반복에서 적어도 한 토큰을 소비해 같은 진단을 무한 반복하지 않아야 한다.

2026-08-16 — v0.1.5

제어 흐름 헤더와 구조체 초기화의 중괄호 모호성 일반화

  • 문제: v0.1.4의 모호성은 match뿐 아니라 if flag {}, while flag {}for x in values {}처럼 식 직후 본문이 시작되는 모든 제어 흐름에 동일하게 발생한다.
  • 결정: if, while, for, match, comptime if 헤더 바로 뒤의 최상위 {는 항상 제어 흐름 블록을 시작한다. 헤더 최상위에 구조체 초기화식을 쓰려면 괄호가 필수다.
  • 구현 영향: 제어 흐름 헤더의 최상위 식 파싱에서 구조체 초기화를 금지하되 괄호 안에서는 일반 식 파싱 상태를 복원한다. 단순 식별자 조건과 배열·슬라이스 반복은 본문 { 앞에서 정상적으로 종료되어야 한다.