목록rust (50)
NeuroWhAI의 잡블로그
MS가 최근 winrt를 Rust로 구현하여 공개했는데 그 예제로 지뢰찾기가 있다. 지뢰찾기 코드를 구경하던 중 아래와 같은 코드(#)를 발견. Rust는 블럭({ ... })도 식으로 평가하기 때문에 while의 조건식에 블럭을 사용할 수 있는 것을 이용한 꼼수이다. while { 수행할 내용들; ... 조건식 } { /* 빈 실제 실행문 */ } 찾아보니 거의 6년전(#)에 나온 꼼수인 듯하다. 근데 사실 보기에 그리 좋진 않다. 간단한 매크로를 만들면 좀 더 보기 괜찮아진다. macro_rules! do_while { ($x:block, $y:expr) => {{ while { $x; $y } {} }}; } fn main() { let mut i = 0; do_while!({ i += 1; }, ..
http://sled.rs/errors Error Handling in a Correctness-Critical Rust Project sled home documentation support blog introduction to sled motivating experiences error handling in Rust Error Handling in a Correctness-Critical Rust Project Let’s begin with two excerpts from the paper Simple Testing Can Prevent Most Critical Failures: An sled.rs 에러를 올바르게 다루는 방법에 대한 글에서 나온 중첩 Result 사용 예가 인상깊어서 가져왔습니다. ..
https://thomashartmann.dev/blog/on-generics-and-associated-types/ On Generics and Associated Types In which we look at traits using generic types (or type parameters) and traits with associated types in Rust. What is the difference and when does it make sense to use one over the other? thomashartmann.dev 제너릭은 대상 타입에 대해 여러 타입 매개변수로 여러번 구현하는 것이 의도일 경우 사용합니다. From처럼 어떤 Foo 타입을 대상으로 impl From for Fo..
첫번째 버전 : https://blog.naver.com/neurowhai/221715701528 입체음향 방향 시각화 세로는 위가 오른쪽, 아래가 왼쪽이며 가로는 시간축입니다.각 시간대에 주파수별로 방향(세로 위치)을 계... blog.naver.com 이번엔 재생하면서 실시간으로 시각화 하도록 해봤습니다. 이전 글에서도 말했지만 방향 계산식이 정확한 게 아니라서 그냥 눈요깃거리가 되어버렸습니다... 테스트 음성 시각화 음악 시각화 (출처 : https://youtu.be/wVJNLD8zL00) 이것도 Rust로 짰습니다. 이전엔 piston을 써서 이미지로 만들었는데 이번엔 ggez를 사용했습니다. ggez 쵝오...
출처 : https://rust-lang.github.io/api-guidelines/future-proofing.html C++이나 C#에 보면 sealed라는 키워드가 있습니다. 이걸로 수식된 클래스는 상속의 끝을 뜻하며 자식 클래스를 가질 수 없죠. 보통 다른 개발자가 의도치 않게 자신의 클래스를 상속하고 확장하는 것을 방지하기 위한 용도로 쓰입니다. Rust에서도 이와 비슷한 목적으로 trait을 sealed 시킬 수 있습니다. 다만 키워드로 지원하는 것은 아니고 문법을 이용합니다. 다른 개발자가 trait을 사용할 수는 있어도 다른 타입에 impl하는 것은 막는 것이죠. pub trait Foo: private::Sealed { fn foo(&self); } impl Foo for usize {..
Rust 컴파일러는 기본적으로 모든 타입을 이동 가능한 것으로 취급합니다. 실제로 대부분의 타입은 이동되어도 문제가 없죠. 그러나 세상 사는 게 그렇게 순탄하지는 않습니다. 만약 i32 변수 a와 이를 가리키는 포인터 b가 있고 둘 다 객체 obj의 멤버라고 합시다. obj { a
https://rust-lang.github.io/async-book/02_execution/01_chapter.html Under the Hood: Executing Futures and Tasks - Asynchronous Programming in Rust In this section, we'll cover the underlying structure of how Futures and asynchronous tasks are scheduled. If you're only interested in learning how to write higher-level code that uses existing Future types and aren't interested in the details of how..
그냥 C++로 된 튜토리얼 보고 Rust로 옮겨 적은 것 뿐... 이해해보려고 하긴 했는데 아무래도 수학적인 부분은 영;; https://github.com/NeuroWhAI/tinyraytracer-rs NeuroWhAI/tinyraytracer-rs tinyraytracer in rust. Contribute to NeuroWhAI/tinyraytracer-rs development by creating an account on GitHub. github.com
Rust 표준 라이브러리에 있는 AsRef와 Borrow trait은 생긴 것이 매우 비슷합니다. pub trait AsRef where T: ?Sized, { fn as_ref(&self) -> &T; } pub trait Borrow where Borrowed: ?Sized, { fn borrow(&self) -> &Borrowed; } impl Borrow for T impl
주의! 공부하고 정리한 글이라서 틀린 부분이 있을 수 있습니다.올바른 지적은 언제나 환영합니다. Rust는 패턴 매칭시 적절한 바인딩 모드를 선택함으로써 프로그래머 입장에서 쉽게 패턴 매칭 코드를 작성할 수 있게 합니다.다만 구버전 Rust까지는 그런 기능이 부족해서 아래 코드는 컴파일이 안되었었습니다. let s: &Option = &Some("hello".to_string()); match s { Some(s) => println!("s is: {}", s), _ => (), };s는 &Option인데 패턴은 Option이기 때문이었죠.그래서 아래처럼 수정해야 했었습니다. let s: &Option = &Some("hello".to_string()); match s { &Some(ref s) => p..