Bazel 로드맵

문제 신고 출처 보기 보통

개요

Bazel 프로젝트가 귀사의 요구사항에 따라 계속 발전함에 따라 2024년 업데이트를 공유해 드리고자 합니다.

이 로드맵에서는 Bazel 개발의 미래에 대한 현재 이니셔티브와 예측을 설명하여 현재 우선순위와 진행 중인 프로젝트를 파악할 수 있습니다.

Bazel 8.0 출시

2024년 말에 Bazel 8.0 장기 지원(LTS)이 제공될 예정입니다. 다음 기능이 구현될 예정입니다.

Bzlmod: 외부 종속 항목 관리 시스템

Bzlmod는 전이 종속 항목을 자동으로 해결하므로 빠르고 리소스 효율성을 유지하면서 프로젝트를 확장할 수 있습니다.

Bazel 8에서는 WORKSPACE 지원이 기본적으로 사용 중지됩니다 (--enable_workspace를 사용하여 사용 설정할 수도 있음). Bazel 9 WORKSPACE 지원은 삭제됩니다. Bazel 7.1부터 --noenable_workspace를 설정하여 새 동작을 선택할 수 있습니다.

Bazel 8.0에는 다음을 비롯하여 Bazel의 외부 종속 항목 관리 기능에 대한 여러 가지 향상된 기능이 포함되어 있습니다.

  • 새 플래그 --enable_workspacefalse로 설정하여 WORKSPACE 기능을 완전히 사용 중지할 수 있습니다.
  • 새 디렉터리 감시 API (Bazel 7.1에서 제공되는 #21435 참고)
  • 종속 항목 버전 업데이트 전반에 걸쳐 작업의 캐시 가능성을 높이기 위해 표준 저장소 이름을 생성하는 스키마가 향상되었습니다. (#21316, Bazel 7.1에서 제공)
  • 공유 저장소 캐시가 개선되었습니다 (#12227 참고).
  • 공급업체 및 오프라인 모드 지원 - 사용자가 미리 다운로드한 종속 항목을 사용하여 빌드를 실행할 수 있습니다 (#19563 참고).
  • 잠금 파일의 병합 충돌을 줄였습니다. (#20396)
  • Segmented MODULE.bazel (#17880)
  • 모듈 확장 프로그램 생성 저장소 재정의를 허용합니다. (#19301)
  • 개선된 문서 (예: #18030, #15821)와 마이그레이션 가이드, 마이그레이션 도구

원격 실행 개선

  • 비동기 실행 지원을 추가하여 --jobs 플래그를 사용한 동시 로드를 늘려 원격 실행 속도를 높입니다.
  • 새로운 간단한 실행 로그로 캐시 부적중을 더 쉽게 디버그하여 크기를 100배 늘리고 런타임 오버헤드를 크게 줄입니다 (#18643 참고).
  • 디스크 캐시의 가비지 컬렉션을 구현합니다 (#5139 참고).
  • 원격 출력 서비스를 구현하여 임의의 빌드 출력의 지연 다운로드를 허용합니다 (#20933 참고).

Android, C++, Java, Python, Proto 규칙 이전

Android, C++, Java, Python 규칙 세트를 전용 저장소로 완전히 이전하고 Bazel 출시에서 분리합니다. 이를 통해 Bazel 사용자와 규칙 작성자는

  • Bazel과 독립적으로 규칙을 업데이트합니다.
  • 필요에 따라 규칙을 업데이트하고 맞춤설정합니다.

규칙 세트의 새 위치는 bazelbuild/rules_android, rules_cc, rules_java, rules_python, google/protobuf가 됩니다. rules_proto가 지원 중단될 예정입니다.

Bazel 8은 저장소에서 바이너리의 일부였던 규칙 세트를 자동으로 사용하는 임시 마이그레이션 플래그를 제공합니다. 이러한 규칙 세트의 모든 사용자는 결국 저장소에 종속되며 Bazel의 일부가 아닌 다른 규칙 세트와 유사하게 로드하게 됩니다.

또한 Bazel 8은 기존 확장 규칙과 하위 규칙 API를 개선하여 비실험용으로 표시합니다.

Starlark 개선

  • 기호형 매크로는 BUILD 사용자, 매크로 작성자, 도구에 더 친숙한 매크로를 작성하는 새로운 방법입니다. Bazel이 유용한 정보만 제공하는 기존 매크로와 달리 기호형 매크로는 사용자가 일반적인 문제를 피하고 권장사항을 시행하는 데 도움이 됩니다.
  • 패키지 파이널라이저는 맞춤 패키지 유효성 검사 로직에 관한 최고 수준의 지원을 추가하기 위해 제안된 기능입니다. 이는 native.existing_rules()의 지원 중단을 돕기 위한 것입니다.

구성 가능성

  • 출력 경로 매핑은 계속해서 안정화되고 있습니다. 전환을 사용하는 규칙 설계자에게는 더 나은 원격 캐시 성능과 빌드 속도가 보장됩니다.
  • 지정된 --platforms에 적합한 빌드 플래그를 자동으로 설정합니다.
  • bazelrcs를 설정할 필요 없이 프로젝트 지원 플래그 조합을 정의하고 기본 플래그를 사용하여 대상을 자동으로 빌드합니다.
  • 빌드 플래그가 변경될 때마다 빌드 분석을 다시 실행하지 않습니다.

Project Skyfocus - 보관된 데이터 구조 최소화

Bazel은 빠른 증분 빌드를 위해 RAM에 많은 상태를 보유합니다. 하지만 개발자는 소스 파일의 작은 하위 집합을 변경하는 경우가 많습니다 (예: 외부 종속 항목 중 하나를 변경하는 경우는 거의 없음). Bazel은 Skyfocus를 통해 불필요한 증분 상태를 삭제하고 Bazel의 메모리 사용량을 줄이는 실험적인 방법을 제공하면서 동시에 동일한 빠른 증분 빌드 환경을 제공합니다.

초기 범위는 보관된 힙 측정항목만 개선하는 것을 목표로 합니다. 최대 힙 감소도 가능하지만 초기 범위에는 포함되지 않습니다.

기타

  • 모바일 설치 v3는 Android 애플리케이션을 점진적으로 배포하는 더 간단하고 잘 유지관리되는 접근 방식입니다.
  • 저장소 캐시 및 Bazel의 install_base에 대한 가비지 컬렉션
  • 샌드박싱 오버헤드가 감소했습니다.

Bazel-JetBrains* IntelliJ IDEA 지원

최신 JetBrains 플러그인 출시를 지원하도록 증분 IntelliJ 플러그인 업데이트

이 로드맵은 스냅샷을 대상으로 하며 이를 보장하는 것으로 간주해서는 안 됩니다. 우선순위는 개발자 및 고객의 의견 또는 새로운 시장 기회에 따라 변경될 수 있습니다.

이 로드맵 업데이트를 비롯한 새로운 기능에 대한 알림을 받으려면 Google 그룹 커뮤니티에 가입하세요.

*Copyright © 2022 JetBrains s.r.o. JetBrains 및 IntelliJ는 JetBrains s.r.o의 등록 상표입니다.