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에서 동일한 작업을 수행하는 방법을 알고 싶음

    • 이와 같은 테스트를 허용하는 스레드 클래스를 만들 수 있는지 궁금함