▲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가 정말로 인기를 끌고 있는 것 같음
Hacker News 의견
@cImport 기능이 제거될 예정임
예제 코드:
D 언어의 동등한 코드:
컴파일러가 나머지를 처리함
C 파일을 가져오는 특별한 구문을 요청하는 사람들이 있지만, 이 간단함이 더 좋음
Zig를 좋아하고 싶지만 몇 가지 문제를 겪고 있음
zig init으로 프로젝트를 시작하는 권장 방법은 불필요한 코드가 많음zig build-exe filename.zig로 초기화 부분을 건너뛸 수 있다는 것을 알게 됨Clang의 전처리기는 별도의 컴파일 전 단계로 구현되지 않음
D 언어에서 ImportC를 사용하여 유사한 작업을 수행하는 방법을 블로그에 작성함
각 enum마다 최소 UINT16_MAX*sizeof(intptr_t) 바이트를 실행 파일에 추가할 것 같음
함수 정의가 매우 읽기 쉽게 보임
사이트가 마음에 듦