▲neo 5달전 | parent | favorite | on: GN⁺: 동시 데이터 구조의 적절한 테스트(matklad.github.io)Hacker News 의견 Rust로 Temper라는 라이브러리를 개발 중이며, Rust 메모리 모델의 복잡한 부분을 다루기 위해 많은 노력이 필요함 C++/Rust 메모리 모델의 가장 큰 테스트 케이스 모음을 포함하고 있음 Loom은 더 완전한 라이브러리로, 뮤텍스와 큐 같은 고수준 구조를 철저히 테스트할 수 있게 해줌 Foundation DB 테스트 강연에서 영감을 받았으며, WebAssembly가 이 분야에서 중요한 역할을 할 것이라고 믿음 Rust에서 공유 메모리 원자 스냅샷을 구현했으며, 자동화된 테스트를 매우 중요하게 생각함 처음에는 Loom을 사용했지만 나중에 Shuttle로 전환함 Shuttle은 무작위화된 접근 방식을 사용하며, 버그를 찾는 확률적 보장을 제공함 Shuttle은 더 빠르고 복잡한 테스트 시나리오에 잘 확장됨 실패한 테스트를 재현할 수 있는 기능이 매우 중요함 이 접근 방식의 단점은 테스트 코드에 맞게 코드 자체를 수정해야 한다는 점임 두 스레드를 실행하고 ptrace로 단일 스텝을 통해 명령어 실행을 무작위로 섞는 방법으로도 가능할 것임 JetBrains의 Lincheck은 Kotlin/Java 세계에서 좋은 라이브러리임 선언적이며 선형화 결과를 출력하는 방식이 마음에 듦 C++용 "Loom" 같은 라이브러리가 있는지 궁금함 잠금 없는 데이터 구조를 테스트하고 싶음 이 접근 방식은 소프트 전진 보장에 한계가 있을 수 있음 cmpxchg 루프에서 실제 하드웨어와 스케줄러에서는 중단될 가능성이 매우 낮음 그러나 이 테스트 접근 방식에서는 작업 수와 일시 중지 횟수에 따라 전진 확률이 달라짐 실질적인 지식이 필요하며, 실제 스레드를 생성해야 함 비동기 런타임을 사용할 수 있는지 궁금함 ptrace를 사용해 스레드를 단일 스텝으로 실행하여 명령어 수준에서 다른 인터리빙을 만들 수 있음 블랙박스 테스트 대안이 있는지 궁금함 Loom을 사용하려면 조건부 컴파일을 사용해야 하며, 이는 다소 침입적임 다른 언어가 자체 스케줄러를 사용하는 데 더 나은지 궁금함 Python에서 동일한 작업을 수행하는 방법을 알고 싶음 이와 같은 테스트를 허용하는 스레드 클래스를 만들 수 있는지 궁금함
Hacker News 의견
Rust로 Temper라는 라이브러리를 개발 중이며, Rust 메모리 모델의 복잡한 부분을 다루기 위해 많은 노력이 필요함
Rust에서 공유 메모리 원자 스냅샷을 구현했으며, 자동화된 테스트를 매우 중요하게 생각함
이 접근 방식의 단점은 테스트 코드에 맞게 코드 자체를 수정해야 한다는 점임
JetBrains의 Lincheck은 Kotlin/Java 세계에서 좋은 라이브러리임
C++용 "Loom" 같은 라이브러리가 있는지 궁금함
이 접근 방식은 소프트 전진 보장에 한계가 있을 수 있음
실질적인 지식이 필요하며, 실제 스레드를 생성해야 함
ptrace를 사용해 스레드를 단일 스텝으로 실행하여 명령어 수준에서 다른 인터리빙을 만들 수 있음
Loom을 사용하려면 조건부 컴파일을 사용해야 하며, 이는 다소 침입적임
Python에서 동일한 작업을 수행하는 방법을 알고 싶음