4P by xguru 7일전 | ★ favorite | 댓글 1개
  • 컴파일 타임에 인라인 Rust 로직을 평가하여 새로운 코드를 생성하여 추가해주는 매크로
  • Procedural 매크로보다 더 많은 유연성과 성능을 제공하는 동시에 macro_rules보다 읽고 쓰기가 더 쉽고 자연스러움
  • Token Stream/Macro Fragments/Rust 코드로 Input/Output 모두 지원
  • IDE 지원, 코드 포맷팅, 인라인 정의 가능하며 가독성이 뛰어남
  • 원샷-eval : 복잡한 컴파일 타임 연산을 간단하게 처리 가능
    const MY_NUM: usize = crabtime::eval! {  
        (std::f32::consts::PI.sqrt() * 10.0).round() as usize  
    };  
    
  • 함수형 매크로 (Function-like Macros)
    • #[crabtime::function]으로 함수형 매크로 정의 가능
    • 정의된 함수는 매크로로 변환되어 빌드 시점에 실행됨
    • 표준 #[macro_export] 속성을 사용해 매크로 내보내기 가능
  • 매크로 정의된 함수는 임시 Rust 프로젝트의 main 함수로 삽입됨
  • 컴파일 후 생성된 코드를 stdout을 통해 반환

해커뉴스 댓글들**

  • weinzierl
    • Crabtime의 로고를 칭찬함, Rust 매크로를 쉽게 만드는 시도
    • proc_macro가 별도 크레이트가 필요한 점이 불편했는데, Crabtime이 이를 해결하는 것처럼 보임
    • 다만 Crabtime은 Zig의 comptime과는 다르게, 단순한 컴파일 타임 평가 기능의 확장판처럼 보임
    • Zig와 Rust의 큰 차이는 타입 정보 접근 가능 여부로, Zig는 가능하지만 Rust는 불가능함
    • Rust에서는 타입 정보를 얻기 위해 RustDoc 파싱 같은 우회 방법을 사용하고 있음
    • Crabtime이 타입 리플렉션 기능을 제공하지 않는 것으로 보이며, 이 기능 없이는 진정한 comptime 구현이라 보기 어려움
    • pron
      • Zig의 comptime문법 매크로가 아니기 때문에 더 쉽게 이해하고 디버깅할 수 있음
      • 마치 런타임에 실행되는 함수처럼 동작하며, 강력한 리플렉션과 함께 부분적으로 타입을 가진 언어처럼 작동함
      • comptime 기능 하나만으로 다른 많은 언어 기능을 대체할 수 있어서, 언어 자체가 단순해짐
      • Zig는 C 수준의 단순성을 유지하면서도 C++ 수준의 표현력을 제공함
      • 복잡한 언어에 comptime을 추가하는 것은 Zig처럼 단순함의 이점을 얻기 어려움
  • pjmlp
    • C++의 메타프로그래밍 발전을 긍정적으로 평가함
    • C++98의 템플릿 해킹에서 시작해 C++23에서는 실용적인 수준으로 발전함
    • 향후 컴파일 타임 리플렉션이 도입되면 더 나아질 전망임
    • Rust는 매크로마다 문법이 다르거나, syn 같은 외부 크레이트에 의존해야 해서 배워야 할 게 많음
  • nindalf
    • 선언적 매크로로 작성했던 벤치마크 생성 코드를 Crabtime으로 재작성하여 만족스러운 경험을 함
    • Crabtime을 사용하면서 대부분의 코드를 Rust처럼 작성할 수 있어서 가독성과 커스터마이징이 향상됨
    • 예전에는 모듈명을 매번 전달해야 했지만, 이제는 디스크에서 파일을 읽어 처리할 수 있음
    • paste!{}crabtime::output!{}의 사용 비교에서 후자가 훨씬 직관적이라고 평가함
    • 반복문 문법도 복잡한 매크로 패턴 대신 Rust의 for 문법을 그대로 사용 가능함
    • Crabtime 덕분에 Rust 메타프로그래밍에 대해 더 자신감을 갖게 됨
    • 이전 버전은 몇 주 전에, 새로운 버전은 이틀 전에 발표되어 사용자 수는 많지 않음
    • 이전에 작성한 매크로를 자신도 잘 이해 못했으나, Crabtime으로는 명확하게 작성하고 유지할 수 있었음
  • orman784
    • 복잡한 매크로 작성이 필요한 상황에서 macro_rules만으로는 한계를 느껴 전체 코드를 직접 작성했다고 언급
    • proc_macro 사용은 피하고 싶지만, 대개 syn, quote, proc_macro2 같은 의존성을 추가해야 해서 불만족
    • Crabtime이 이를 해결해줄 수 있을지 테스트해보고 싶음
    • 의존성 추가가 얼마나 될지는 아직 확인하지 않았지만, 가능하면 줄이고 싶음