GN⁺ 2024-07-31 | parent | ★ favorite | on: Zig에서의 C 매크로 리플렉션(jstrieb.github.io)
Hacker News 의견
  • @cImport 기능이 제거될 예정임

    • C 파일을 가져오는 것은 가능하지만 더 많은 작업이 필요함
    • libclang 의존성을 제거하기 위해 이 기능을 언어에서 제거하려고 함
  • 예제 코드:

    const win32 = @cImport({
      @cInclude("windows.h");
      @cInclude("winuser.h");
    });
    
    pub fn main() !void {
      _ = win32.MessageBoxA(null, "world!", "Hello", 0);
    }
    
  • D 언어의 동등한 코드:

    import windows, winuser;
    void main() {
      MessageBoxA(null, "world!", "Hello", 0);
    }
    
  • 컴파일러가 나머지를 처리함

  • C 파일을 가져오는 특별한 구문을 요청하는 사람들이 있지만, 이 간단함이 더 좋음

  • Zig를 좋아하고 싶지만 몇 가지 문제를 겪고 있음

    • 대부분은 아직 1.0 버전이 아니기 때문이라고 생각함
    • 예를 들어, zig init으로 프로젝트를 시작하는 권장 방법은 불필요한 코드가 많음
    • 최근에 zig build-exe filename.zig로 초기화 부분을 건너뛸 수 있다는 것을 알게 됨
    • 에디터 통합 문제도 많았음
    • VSCode 확장을 설치했지만 자동 완성 등이 제대로 작동하지 않음
    • 아마도 사용자 오류일 가능성이 높아 주말에 다시 시도해볼 예정임
  • Clang의 전처리기는 별도의 컴파일 전 단계로 구현되지 않음

    • 본질적으로 렉서의 일부임
    • gcc도 유사한 방식을 사용할 것이라고 생각함
    • 매크로 이름에 접근하는 것은 기술적으로 불가능하지 않음
    • 수요가 많지 않기 때문에 구현되지 않음
  • D 언어에서 ImportC를 사용하여 유사한 작업을 수행하는 방법을 블로그에 작성함

  • 각 enum마다 최소 UINT16_MAX*sizeof(intptr_t) 바이트를 실행 파일에 추가할 것 같음

  • 함수 정의가 매우 읽기 쉽게 보임

    • 다른 언어에서 본 적이 있지만 보통은 매우 끔찍함
    • Zig를 배울 가치가 있을지도 모름
    • 이것은 킬러 기능임
  • 사이트가 마음에 듦

    • Zig가 정말로 인기를 끌고 있는 것 같음