docs: clarify char and byte conversions
This commit is contained in:
@@ -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` 혼용을 거부해야 한다.
|
||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user