Targets
Targets (타깃)
프로그램을 만들 때 '어떤 컴퓨터에서 실행할지'는 코드보다 먼저 정해져야 하는 기준이에요. Zig에서 이 기준이 되는 개념이 바로 Target인데요, 실행 파일을 돌릴 컴퓨터를 말해요. Target을 정리하면서 Zig가 기본값으로 어떤 선택을 하는지, 그리고 다른 컴퓨터로 옮겨 쓸 때 왜 Target을 지정해야 하는지 함께 살펴볼게요.
본문
Target은 실행 파일(executable)을 실행할 컴퓨터를 가리켜요. 그리고 이 Target은 여러 요소로 구성되어 있는데요, CPU 아키텍처, 활성화된 CPU 기능들의 집합, 운영체제, 운영체제의 최소·최대 버전, ABI, 그리고 ABI 버전이 바로 그 구성 요소예요.
Zig는 범용 프로그래밍 언어라서 넓은 범위의 Target에 최적화된 코드를 만들어 내도록 설계되어 있어요. zig targets 명령어를 실행하면 컴파일러가 알고 있는 모든 Target에 대한 정보를 확인할 수 있어요.
컴파일러에 Target 옵션을 전혀 주지 않으면 기본값으로 호스트 컴퓨터(host computer)를 타깃으로 삼아요. 즉 이때 만들어지는 실행 파일은 다른 컴퓨터로 복사해서 쓰기에는 부적합해요. 실행 파일을 다른 컴퓨터로 옮겨 쓰려면, 컴파일러가 -target 옵션을 통해 Target의 요구사항을 알 수 있게 해줘야 해요.
Zig 표준 라이브러리(@import("std"))에는 플랫폼을 가로지르는 추상화(cross-platform abstractions)가 마련되어 있어서, 같은 소스 코드를 많은 Target에서 그대로 쓸 수 있어요. 물론 어떤 코드는 이식성이 좋고 어떤 코드는 그보다 덜한 차이가 있어요. 다만 전반적으로 Zig 코드는 다른 프로그래밍 언어에 비해 이식성이 아주 뛰어난 편이에요.
각 플랫폼은 Zig의 플랫폼 간 추상화가 실제로 동작하도록 자기만의 구현을 필요로 해요. 그런데 이 구현들은 완성도가 제각각이에요. 컴파일러가 태그된 릴리스(tagged release)를 낼 때마다 릴리스 노트가 함께 나오고, 그 노트에 각 Target에 대한 전체 지원 표가 실려 있어요.
더 알아보기
- Zig Documentation — 이 문서의 전체 목차와 기능별 상세 설명
- WebAssembly — 바로 앞에서 다루는, Target과 밀접한 웹어셈블리 실행 환경