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)
  • 세그먼트된 MODULE.bazel (#17880)
  • 모듈 확장 프로그램 생성 저장소 재정의 허용 (#19301)
  • 문서 (예: #18030, #15821)와 이전 가이드, 이전 도구가 개선되었습니다.

원격 실행 개선

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

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

Android, C++, 자바, 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에 적합한 빌드 플래그를 자동으로 설정합니다.
  • 프로젝트 지원 플래그 조합을 정의하고 bazelrc를 설정하지 않고도 기본 플래그로 대상을 자동으로 빌드합니다.
  • 빌드 플래그가 변경될 때마다 빌드 분석을 다시 실행하지 않습니다.

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

Bazel은 빠른 증분 빌드를 위해 RAM에 많은 상태를 유지합니다. 그러나 개발자는 종종 소스 파일의 작은 하위 집합을 변경합니다 (예: 외부 종속 항목 중 하나를 변경하는 경우가 거의 없음). Skyfocus를 통해 Bazel은 불필요한 증분 상태를 삭제하고 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의 등록 상표입니다.