프로그래밍/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..

간단한 예시로 알아보는 iter vs into_iter 차이

iter() &T를 iterate한다: 컬렉션의 Immutable Reference를 생성하여 iterate 수행 컬렉션의 요소를 읽기만 가능하고 수정할 수 없는 상태다. 이를 통해 컬렉션의 요소에 안전하게 접근할 수 있다. let vec = vec![1, 2, 3, 4, 5]; let iter = vec.iter(); // vec에 접근 가능하다. println!("{:?}", vec); into_iter() T를 iterate한다: 컬렉션의 소유권을 가져와서 컬렉션을 소비(consume)하는 Iterator 생성. 컬렉션을 iterate하는 동안 원본 데이터를 소비함을 의미한다. let vec = vec![1, 2, 3, 4, 5]; let iter = vec.into_iter(); // 여기서부터는..

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

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

[Rust] Stack과 Heap (번역)

Stack과 Heap 많은 프로그래밍 언어에서는 스택(Stack)과 힙(Heap)에 대해 자주 생각할 필요가 없다. 그러나 시스템 프로그래밍 언어인 Rust에서는 값이 스택에 있거나 힙에 있는지 여부가 언어의 동작 방식과 특정 결정을 내리는 이유에 영향을 미친다. 스택에 대하여 스택과 힙은 모두 런타임(Runtime)에 코드가 사용할 수 있는 메모리의 일부이지만 구조가 다르다. 스택은 값을 가져온 순서대로 저장하고 반대 순서로 값을 제거한다. 이것을 "Last In, First Out" (LIFO)라고 한다. 접시 더미를 생각해보라. 접시를 더 추가하면 더미 위에 놓고 접시가 필요할 때는 가장 위에서 하나씩 가져온다. 중간이나 바닥에서 접시를 추가하거나 제거하는 것은 그다지 효과적이지 않을 것이다. 데이..