rust 4

[wgpu] 파이프라인 (Pipeline)

Pipeline Pipeline은 OpenGL로치면 Shader의 강력한 버전이라고 보면 된다. Pipeline은 데이터 세트에 대해 작업을 수행할때 GPU가 해야할 모든 일을 설명한다. *Shader는 GPU가 데이터에 대해 어떤 동작을 수행할지 알려주는 작은 프로그램이다. Shader의 종류 Vertex Fragment Compute Vertex Vertex는 3D혹은 2D 공간에서의 한 점이다. 2개로 선을, 3개로 삼각형을 만들 수 있다. Vertex를 조작하여 모양을 이룬다. Fragment Vertex가 모여서 Fragment를 형성한다. Fragment는 각각의 픽셀들이 어떤 색상으로 그려질지를 정의한다. WGSL WebGPU Shading Language의 약자로, WebGPU를 위한 Sh..

메멘토 패턴 (Memento Pattern): Rust로 구현

메멘토는 세부 구현을 드러내지 않으면서 객체의 이전 상태를 복원하고, 저장할 수 있게 해주는 디자인 패턴이다. 문제 간단한 텍스트 편집기를 개발한다고 가정해보자. 상태 스냅샷을 만드는것을 간단히 생각해보면, 저장소에 모든 필드들을 저장소에 저장하는 것을 생각할 수 있다. 하지만 아래와 같은 문제들이 있을 수 있다. 캡슐화로 인해 모든 필드들에 접근할 수 없을지도 모른다. 나중에 텍스트 편집기 클래스를 리팩토링하거나 일부 필드를 추가/제거 한다고 했을때 상태 복사를 담당하는 클래스도 같이 변경해야하는 번거로움이 생긴다. 상태를 저장 및 복원하기 위해 스냅샷도 필드들을 모두 열어놓아야(public)한다. 솔루션 메멘토 패턴은 앞에서 생각했던 것 처럼 다른 객체가 외부에서 에디터의 상태를 복사하려고 시도하는 ..

[Rust] Option<T>가 Null보다 나은 이유(번역)

Null의 문제점 Rust에는 다른 많은 프로그래밍 언어에서 있는 Null이 없다. Null은 값이 없음을 의미하는 값이다. Null이 있는 언어에서, 변수는 항상 Null, 또는 Not-null 두가지 상태 중 하나에 있다. Null의 발명자인 Tony Hoare는 2009년 발표 "Null References: The Billion Dollar Mistake"에서 이렇게 얘기했다: "나는 그것을 10억 달러짜리 실수라고 부릅니다. 그 당시 저는 객체 지향 언어에서 참조에 대한 최초의 포괄적인 타입 시스템을 설계하고 있었습니다. 모든 참조의 사용이 컴파일러에 의해 자동으로 검사되도록 보장하는 것이 목표였습니다. 하지만 null 참조를 넣는 유혹을 이기지 못했습니다. 구현하기가 너무 쉽기 때문입니다. 이..