docs: clarify char and byte conversions

This commit is contained in:
2026-08-16 08:16:24 +09:00
parent da78a615fb
commit 3aa7618d0c
2 changed files with 20 additions and 3 deletions
+16
View File
@@ -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` 혼용을 거부해야 한다.
+4 -3
View File
@@ -1,4 +1,4 @@
# Ferro 언어 명세 v0.1.2 # Ferro 언어 명세 v0.1.3
DOS용 시스템 프로그래밍 언어. C만큼 빠르고, 메모리 안전성을 함수 단위 지역 검사만으로 보장한다. DOS용 시스템 프로그래밍 언어. C만큼 빠르고, 메모리 안전성을 함수 단위 지역 검사만으로 보장한다.
파일 확장자 `.fe`, 컴파일러 이름 `fec`, 심볼 파일 `.fei`. 파일 확장자 `.fe`, 컴파일러 이름 `fec`, 심볼 파일 `.fei`.
@@ -62,7 +62,8 @@ and or not orelse
- 정수: `i8 i16 i32 u8 u16 u32 usize isize` - 정수: `i8 i16 i32 u8 u16 u32 usize isize`
- `bool` (1바이트, 정수와 상호 변환 없음) - `bool` (1바이트, 정수와 상호 변환 없음)
- `char` (u8과 크기 같지만 별개 타입) - `char` (`u8`과 크기 같지만 별개 타입). `char``u8` 사이의 저장·대입·비교에는
반드시 명시적인 `as` 변환이 필요하며, 리터럴에도 문맥 기반 암묵 변환을 적용하지 않는다.
- `void` (반환 타입으로만) - `void` (반환 타입으로만)
- `type` (comptime 파라미터에서만, §9) - `type` (comptime 파라미터에서만, §9)
@@ -415,7 +416,7 @@ fn count_lines(path: str) -> !usize {
let got = try f.read(buf[..]); let got = try f.read(buf[..]);
if got == 0 { break; } if got == 0 { break; }
for c in buf[0..got] { for c in buf[0..got] {
if c.^ == '\n' { n += 1; } if c.^ == '\n' as u8 { n += 1; }
} }
} }
return n; return n;