▲neo 7달전 | parent | favorite | on: GN⁺: 우리가 마땅히 받아야 할 Rust 호출 규약(calling convention)(mcyoung.xyz)Hacker News 의견 요약: 최적화된 호출 규약(Calling Convention)을 만들 때는 성능을 직접 측정하는 것이 중요함. 이상해 보이는 코드가 실제로는 가장 빠를 수 있음. 오늘날의 CPU는 C 컴파일러가 생성한 명령어 추적을 최적화하므로, C 컴파일러처럼 스택에 자주 전달하는 것이 도움될 수 있음. 인라이닝이 성공적이어서 호출은 드문 경계가 되므로, 다른 것을 단순화하기 위해 경계에 약간의 불규칙성을 허용할 수 있음. Rust의 구조체는 필드에 대한 참조를 제공해야 하므로, C보다 크기가 커질 수 있음. Option<u8> 필드 8개를 가진 구조체는 Rust에서 16바이트, C에서는 9바이트임. Rust에서는 수동으로 C와 동등한 구현을 할 수 있지만, &Option<T> 또는 &mut Option<T>로는 매핑할 수 없음. Rust는 아직 Rust 수준 의미론을 위한 호출 규약이 없음. Apple은 이를 구축할 동기가 있었지만 Rust는 그런 지원이 없음. Go와 Rust 간의 상호 운용성은 현재 Zig을 중간에 사용하여 달성 가능함. 현재 Rust 컴파일러는 공격적인 인라이닝을 수행하고 최적화하므로, 이 문제를 해결할 가치가 있는지 의문임. 디버깅을 위해 Cargo.toml 플래그를 사용하여 우려를 피할 수 있음. 필드를 크기순으로 정렬하는 것은 쉬운 최적화이며, repr로 끌 수 있음.
Hacker News 의견
요약:
Option<u8>
필드 8개를 가진 구조체는 Rust에서 16바이트, C에서는 9바이트임.&Option<T>
또는&mut Option<T>
로는 매핑할 수 없음.