지난 며칠간 4개 언어로 유니코드 SDK를 '바이브코딩'했는데 테스트 스위트를 전부 통과함??
spent the last few nights vibecoding a unicode sdk in 4 languages and it actually passes all four test suites??
핵심 요약
유니코드 의존성을 제거하고 커스텀 인코딩 시스템을 구축할 수 있는 다국어 SDK 'Unicodoid' 개발기.
- Unicodoid SDK — 유니코드 의존성 없이 커스텀 인코딩 시스템을 설계할 수 있는 다국어 SDK임.
- 다국어 지원 — C, C++, C#, Rust 4개 언어로 구현되어 각 테스트 스위트를 모두 통과함.
- 유니코드 18.0.0 — 정규화, 세분화, 이모지 검증 등 최신 유니코드 표준 기능을 선택적으로 지원함.
- 바이브코딩 방식 — AI 에이전트를 활용해 MSVC 호환성 및 복잡한 인코딩 로직을 해결하며 개발함.
자, 방금 'unicodoid'라는 걸 바이브코딩으로 좀 만들어봤는데, 이거 어디다 좀 자랑하고 싶어서 가져왔음 ㅋㅋ
솔직히 이거 시작한 이유가 뭐냐면, 요즘 인코딩 관련 툴들은 죄다 유니코드가 기본이라고 깔고 들어가는 게 좀 빡쳐서임. 유니코드랑은 아예 상관없는 시스템을 건드려보고 싶었거든. 예를 들어 문자가 그냥 토큰 ID라거나, 인공어(conlang) 값이라거나, 아니면 이전 바이트에 따라 의미가 달라지는 모달(modal) 방식 같은 거 말이야. 그래서 유니코드가 그냥 '선택 사항'인 그런 아이디어를 제대로 구현한 SDK를 밑바닥부터 짜보고 싶었음. 유니코드 프로필을 쓰고 싶으면 쓰고, 아니면 말고. 그래도 코덱, 문자열, 트랜스코딩은 다 돌아가야지.
그래서 unicodoid는 한마디로 자기만의 인코딩 시스템을 만드는 SDK임. 문자는 그냥 네 시스템이 정의한 값 공간에 있는 u64일 뿐이야. 유니코드일 필요가 전혀 없다는 거지. 증명하려고 몇 가지 멍청한 예시도 넣어놨음. ASCII, 14비트 인공어, 그리고 ShiftModal-16(이건 모달 방식에 상태까지 있어서 좀 짜증 났음) 같은 거. 그리고 시스템이 원하면 유니코드 프로필을 옵션으로 얹을 수도 있게 해놨고.
어차피 손댄 김에 유니코드 18.0.0까지 싹 다 밀어버리기로 했음. 그래서 정규화, 자소/단어/줄/문장 세그멘테이션, 콜레이션(3레벨까지만, CLDR 테일러링은 안 했음, 나도 알아), 이모지 RGI 검증, 명명된 시퀀스, 링크 감지, 동아시아 간격 처리까지 다 됨. 아, 그리고 ConvertUTF도 추가했음. 옛날에 단종된 W3C 라이브러리를 18.0.0 버전으로 C, C++, C#, Rust에 맞춰서 업데이트했지. ConvertUTF.h/.c랑 .hpp/.cpp에다가 harness.c / harness.cpp / harness.cs / harness.rs까지 다 있음. C++ 버전은 그냥 C 코드 래핑한 게 아니라 네이티브로 짰음. 왠지 그러면 반칙하는 기분이라서.
유니코드 테이블은 전부 공식 18.0.0 데이터에서 파이썬 스크립트로 뽑아낸 거라 수작업으로 친 거 아님. 버전은 어디든 18.0.0 / 제너레이터 1.2.0으로 고정해놨음.
현재 상태:
- C/C++: 15개 ctest 스위트 전부 통과
- Rust: ConvertUTF 하네스 포함 모든 통합 테스트 통과
- C#: ConvertUTF 하네스 포함 303개 체크 통과
이거 진짜 바이브코딩으로 만든 거라, 에이전트한테 MSVC 관련 문제 해결해달라고 징징대고, 정렬 키랑 이모지 수정자 같은 거 계속 다시 짜라고 시키면서 만들었음. 윈도우 파워쉘 때문에 진짜 개고생했다 ㅋㅋ
링크: Unicodoid SDK
진짜 가차 없는 피드백 좀 부탁함. 이거 진짜 쓸모가 있는 건지, 아니면 그냥 잘 만든 데모 하나 뽑아낸 건지 궁금하네. 너네는 이런 다중 언어 프로젝트 만들 때 보통 뭐부터 바이브 체크함?
