From 3aa7618d0c129c9e04ec52a54dcec82552a6542d Mon Sep 17 00:00:00 2001 From: Sebastian Jeong Date: Sun, 16 Aug 2026 08:16:24 +0900 Subject: [PATCH] docs: clarify char and byte conversions --- SPEC.AUDIT.md | 16 ++++++++++++++++ SPEC.md | 7 ++++--- 2 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 SPEC.AUDIT.md diff --git a/SPEC.AUDIT.md b/SPEC.AUDIT.md new file mode 100644 index 0000000..bb85cc0 --- /dev/null +++ b/SPEC.AUDIT.md @@ -0,0 +1,16 @@ +# Ferro specification audit log + +`SPEC.md`를 항상 최신 규범 문서로 유지하고, 최초 `AUDIT.md` 반영 이후 설계 판단으로 +바뀐 사항은 이 파일에 누적한다. + +## 2026-08-16 — v0.1.3 + +### `char`와 `u8` 사이의 변환 + +- 문제: §4.1은 `char`를 `u8`과 별개 타입으로 규정하고 암묵 변환을 금지하지만, + §6.4의 줄 수 계산 예제는 `[]u8`에서 얻은 값을 문자 리터럴과 직접 비교했다. +- 결정: 별개 타입과 암묵 변환 금지 원칙을 유지한다. 저장, 대입, 비교 모두 명시적인 + `as`가 필요하며 문자 리터럴도 문맥에 따라 자동으로 `u8`이 되지 않는다. +- 명세 반영: 예제의 비교를 `c.^ == '\n' as u8`로 수정하고 §4.1에 규칙을 명시했다. +- 구현 영향: 타입 검사기는 `char`를 독립 기본 타입으로 취급해야 하고, C 방출 시 같은 + 크기의 정수 표현을 사용할 수 있어도 Ferro 단계에서는 `char`/`u8` 혼용을 거부해야 한다. diff --git a/SPEC.md b/SPEC.md index b4d387e..4c68c0a 100644 --- a/SPEC.md +++ b/SPEC.md @@ -1,4 +1,4 @@ -# Ferro 언어 명세 v0.1.2 +# Ferro 언어 명세 v0.1.3 DOS용 시스템 프로그래밍 언어. C만큼 빠르고, 메모리 안전성을 함수 단위 지역 검사만으로 보장한다. 파일 확장자 `.fe`, 컴파일러 이름 `fec`, 심볼 파일 `.fei`. @@ -62,7 +62,8 @@ and or not orelse - 정수: `i8 i16 i32 u8 u16 u32 usize isize` - `bool` (1바이트, 정수와 상호 변환 없음) -- `char` (u8과 크기 같지만 별개 타입) +- `char` (`u8`과 크기 같지만 별개 타입). `char`와 `u8` 사이의 저장·대입·비교에는 + 반드시 명시적인 `as` 변환이 필요하며, 리터럴에도 문맥 기반 암묵 변환을 적용하지 않는다. - `void` (반환 타입으로만) - `type` (comptime 파라미터에서만, §9) @@ -415,7 +416,7 @@ fn count_lines(path: str) -> !usize { let got = try f.read(buf[..]); if got == 0 { break; } for c in buf[0..got] { - if c.^ == '\n' { n += 1; } + if c.^ == '\n' as u8 { n += 1; } } } return n;