
러스트(Rust) 오류 처리 라이브러리 Eros가 10월 7일 한국시간 기준 0.8.1 버전을 공개했다. 프로젝트의 공식 GitHub 릴리스에 따르면 오류 유형을 일일이 나열하지 않는 AnyError 기반 결과에도 narrow, recover, try_recover를 사용할 수 있게 됐다. 선택한 유형만 처리하고 나머지 오류는 타입을 명시하지 않은 상태로 계속 전달하는 방식이다.
Eros는 함수가 반환할 수 있는 오류를 튜플로 표현하거나, 구체적인 유형을 드러내지 않는 결과로 다룰 수 있게 만든 라이브러리다. 파일 읽기와 숫자 변환처럼 서로 다른 오류가 생기는 작업에서 조합마다 새 열거형을 정의하는 부담을 줄이는 데 초점을 맞췄다. 이번 변경은 반환 시그니처를 간결하게 유지하면서도 호출자가 필요한 오류에만 대응할 수 있도록 범위를 넓힌 것이다.
공식 사용 예제는 설정 파일이 없을 때 기본 포트 8080을 사용하되, 접근 권한 문제나 숫자 변환 실패는 그대로 전달하는 경우를 보여준다. try_recover 처리기에서 I/O 오류를 받고 파일 부재 여부를 검사하면, 복구 가능한 상황과 계속 알려야 할 실패를 구분할 수 있다. 모든 오류를 같은 기본값으로 덮어쓰는 방식과는 차이가 있다.
오류를 고르는 방식에 따라 진단 정보의 보존 여부도 다르다. narrow로 구체적인 오류 값만 꺼내면 해당 오류의 진단 정보는 제거된다. 같은 오류라도 한 항목짜리 튜플 형태로 선택하면 문맥과 역추적 정보를 포함한 오류 묶음을 유지할 수 있으며, 선택되지 않은 나머지 오류도 진단 정보를 보존한다.
새 매크로 eager_context는 context 기능이 켜져 있을 때 함수 본문이 실행되기 전에 진단용 문맥 문자열을 만든다. 함수가 성공하더라도 문자열을 준비하므로, 오류가 발생했을 때만 문맥을 계산하는 기존 context와 실행 시점이 다르다. 함수 본문에서 소유권이 이동할 매개변수의 값을 문맥에 남겨야 하는 경우에 사용할 수 있다.
업그레이드 시에는 기존 매크로 사용 코드를 살펴볼 필요가 있다. 릴리스 안내는 context가 .clone() 인수를 더 이상 특별 취급하지 않고, 표현식을 작성된 그대로 오류가 발생했을 때만 실행한다고 명시한다. 본문으로 이동하는 값을 미리 문맥에 담아야 한다면 eager_context로 바꾸는 것이 프로젝트가 제시한 이행 방법이다. context 기능을 끈 경우에는 문맥 매크로의 문자열 포맷팅과 래퍼 생성도 생략한다.
Eros 0.8.1은 Apache-2.0 라이선스로 배포된다. 변경의 의미는 새로운 러스트 언어 문법을 도입한 데 있지 않다. 별도 라이브러리 수준에서 오류 전달의 편의성과 필요한 유형만 선택해 처리하는 방식을 연결한 업데이트다.
출처: Eros 공식 GitHub v0.8.1 릴리스
https://github.com/mcmah309/eros/releases/tag/v0.8.1
Eros v0.8.1 공식 사용 문서
https://raw.githubusercontent.com/mcmah309/eros/v0.8.1/rs/eros/README.md
Eros 0.8.1 eager_context API 문서
https://docs.rs/eros/0.8.1/eros/attr.eager_context.html
Eros v0.8.1 공식 패키지 설정
https://raw.githubusercontent.com/mcmah309/eros/v0.8.1/rs/eros/Cargo.toml