"Sources/CLibMPV/ 는 좁은 C 모듈 경계. 제품 결정은 없음."
위험이 사는 곳
Swift 앱에 C 라이브러리를 embed 하면, 날카로운 모서리가 죄다 이음매에 몰려. 원시 포인터, 손으로 관리하는 메모리, NULL 로 끝나는 배열, 정수 에러 코드, 핸들 잘못 쥐면 터지는 undefined behavior. 이 위험은 못 피해. 재사용의 값이니까. 네가 통제할 수 있는 건 하나야. 앱의 얼마만큼이 그걸 만져야 하느냐.
Ashen Reel 의 답은 CLibMPV 라는 모듈이야. 하는 일이라곤 Swift 가 libmpv 의 C API 를 안전하게 부르게 해주는 것뿐인, 작고 지루한 경계 하나. C 헤더를 매핑하고, 앱이 필요한 몇 안 되는 호출을 안전한 Swift 시그니처로 감싸고, 딱 거기서 멈춰. 그 위로는 전부 Swift 로 말하고, 원시 포인터는 구경도 안 해.
이음매엔 제품 결정 없음
이 경계를 건강하게 지키는 규칙. 제품 로직은 C 모듈에 안 산다. seek 을 정확히 할까 빠르게 할까? resume 가 딥링크를 이겨야 할까? 뭘 성공한 seek 으로 칠까? 그중 아무것도 C 이음매에 안 속해. AshenReelCore 의, 순수하고 테스트되는 Swift 에 속하지. C 모듈은 libmpv 한테 한마디 건네고 답을 되받아 옮기는 것만 알아.
철학 전체가 함수 하나에 담겨. 원시 mpv 포인터를 만지는 유일한 곳이야.
왜 '지루함' 이 목표인가
좋은 interop 경계는 일부러 지루해. 함수 몇 개 없고, 각각 한 번 호출하고, 각각 뒤처리하고, 아무도 판단 안 해. 재생 깊은 데서 뭐가 잘못되면, 넌 진짜 타입이랑 테스트로 Swift 로직을 디버깅하고 싶지, 포인터랑 제품 결정이 엉켜서 어디서 터졌는지도 모를 크래시를 뒤지고 싶진 않거든. 이음매가 지루한 게 다른 데서 다 정신 건강을 벌어줘.