https://github.com/google/wuffs
https://github.com/google/wuffs/blob/main/doc/background.md
Zig처럼 C로 트랜스파일됨.
예를들어
if (offset + length < end) 같은 정수 오버플로우 검사나
a[i]에서 if ((0 <= i) && (i < a.length)) { use a[i] } else { throw }처럼 만족하는지 경계검사를
런타임이 아니라 컴파일타임에 할 수 있나봄.
-----------
궁금한게 러스트는 컴파일러에 플러그인 가능하다고 들었는데
컴파일 타임에 제약 못함?
아니면 제약된 방식만 가능한 매크로를 제공한다던지?
분야가 정해진 언어에 구글이 만들어서 디코딩 관련해서는 알음알음 써먹을만 할듯한디, 러스트에 제약을 빡세게 거는게 낫지 않나 싶어서.
별게 다되네
경계 검사는 확실히 유용해보여.
파일 포맷용 DSL아님?
포맷용 맞음. DSL이라기에는 규모가 살짝 있어보여.
연산자 우선 순위 없는것도 좀 특이한듯.
메모리 못건드리고 OS 기능 못쓰고 외부 라이브러리 못쓰고 그냥 예제처럼 C에서 파싱할때 임베딩해서 쓰라고 만든거구만
DSL이라 부르는게 맞겠다.
상당수 메모리 버그가 복잡한 형식 파싱하는 코드에서 생긴다는 걸 고려하면, 적절한 용도로 잘 만든듯
언어들이 대부분 범용을 표방하는데, 주력분야가 정해져있다는 점을 생각하면 포지션은 괜찮음. C로 트랜스파일 된다는 것도 글코.
러스트를 쓴다면 wuff가 아니라 C를 대체하겠지 protobuf의 protoc같은 녀석이라고 봐야할듯
아... 딱 이거네.
https://github.com/rust-lang/rfcs/pull/45
RFC가 있긴했었네.
마소가 만드는 checkedc라는 것도 있음