
Deltoid은 Rust용 라이브러리다. 같은 타입의 두 값 사이에서 차이(delta)를 계산하고, 그 차이를 첫 번째 값에 적용해 두 번째 값과 같은 값을 만들 수 있다.
관련 데이터 트리의 연속된 상태를 차이의 연속으로 기록하면 메모리나 네트워크 대역폭 사용을 합리적인 수준으로 유지하는 데 활용할 수 있다. 차이는 직렬화와 역직렬화를 지원하므로, 한쪽에서 차이를 모아 내보낸 뒤 받는 쪽에서 차례로 적용해 원래의 데이터 상태들을 재구성할 수 있다. 차이 인코딩에 대한 설명은 위키백과에서 볼 수 있다.
Cargo.toml에 다음 의존성을 추가한다.
[dependencies]
deltoid = "0.13.4"
deltoid-derive = "0.13.4"
두 값 사이의 차이를 계산한 뒤 적용하는 예시는 다음과 같다.
use deltoid::Deltoid;
use serde_derive::{Deserialize, Serialize};
#[derive(Deserialize, Serialize, Deltoid)]
struct Point {
x: usize,
y: usize,
}
fn main() {
// Define 2 instances of the same type
let point0 = Point { x: 0, y: 0 };
let point1 = Point { x: 42, y: 8 };
// Calculate the delta between them
let delta = point0.delta(&point1).unwrap();
// Apply the delta to `point0`
let point2 = point0.apply(delta).unwrap();
assert_eq!(point1, point2);
}
Deltoid는 struct와 enum을 지원하지만 union은 지원하지 않는다. 고급 제네릭을 사용하는 타입은 deltoid-derive보다 수동 구현이 세밀하게 제어할 수 있어 일반적으로 권장된다. &T와 &mut T 같은 참조 타입 필드도 현재 지원하지 않는다. 표준 라이브러리 타입 가운데 아직 지원 구현이 없는 경우에는 이슈를 등록하거나 PR을 보낼 수 있다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요