Lộ trình của Bazel

Báo cáo vấn đề Xem nguồn Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

Khi Bazel tiếp tục phát triển để đáp ứng nhu cầu của bạn, chúng tôi muốn chia sẻ thông tin cập nhật về lộ trình năm 2025.

Chúng tôi dự kiến sẽ cung cấp cho bạn dịch vụ hỗ trợ dài hạn (LTS) cho Bazel 9.0 vào cuối năm 2025.

Chuyển đổi hoàn toàn sang Bzlmod

Bzlmod là hệ thống phần phụ thuộc bên ngoài tiêu chuẩn trong Bazel kể từ Bazel 7, thay thế hệ thống WORKSPACE cũ. Tính đến tháng 3 năm 2025, Sổ đăng ký trung tâm Bazel lưu trữ hơn 650 mô-đun.

Với Bazel 9, chúng tôi sẽ xoá hoàn toàn chức năng WORKSPACE và Bzlmod sẽ là cách duy nhất để giới thiệu các phần phụ thuộc bên ngoài trong Bazel. Để giảm thiểu chi phí di chuyển cho cộng đồng, chúng tôi sẽ tập trung vào việc cải thiện hơn nữa hướng dẫncông cụ di chuyển.

Ngoài ra, chúng tôi dự định triển khai bộ nhớ đệm kho lưu trữ dùng chung được cải thiện (xem #12227) với tính năng thu gom rác và có thể chuyển ngược bộ nhớ đệm này sang Bazel 8. Bazel Central Registry cũng sẽ hỗ trợ xác minh chứng thực SLSA.

Di chuyển các quy tắc Android, C++, Java, Python và Proto

Với Bazel 8, chúng tôi đã di chuyển chế độ hỗ trợ cho các quy tắc Android, Java, Python và Proto ra khỏi cơ sở mã Bazel vào các quy tắc Starlark trong các kho lưu trữ tương ứng. Để đơn giản hoá quá trình di chuyển, chúng tôi đã triển khai các tính năng tự động tải trong Bazel. Bạn có thể kiểm soát các tính năng này bằng cờ --incompatible_autoload_externally--incompatible_disable_autoloads_in_main_repo.

Với Bazel 9, chúng tôi dự định tắt tính năng tự động tải theo mặc định và yêu cầu mọi dự án phải tải rõ ràng các quy tắc bắt buộc trong tệp BUILD.

Chúng tôi sẽ viết lại hầu hết tính năng hỗ trợ ngôn ngữ C++ thành Starlark, tách tính năng này khỏi tệp nhị phân Bazel và chuyển tính năng này vào kho lưu trữ /rules_cc. Đây là ngôn ngữ chính cuối cùng còn được Bazel hỗ trợ.

Chúng tôi cũng đang chuyển các kiểm thử đơn vị cho các quy tắc C++, Java và Proto sang Starlark, di chuyển các quy tắc này sang các kho lưu trữ bên cạnh quá trình triển khai để tăng tốc độ của các tác giả quy tắc.

Cải tiến Starlark

Bazel sẽ có khả năng đánh giá các macro tượng trưng một cách linh hoạt. Điều này có nghĩa là macro tượng trưng sẽ không chạy nếu các mục tiêu mà macro đó khai báo không được yêu cầu, giúp cải thiện hiệu suất cho các gói rất lớn.

Starlark sẽ có một hệ thống kiểu thử nghiệm, tương tự như chú thích kiểu của Python. Chúng tôi dự kiến hệ thống kiểu sẽ ổn định sau khi Bazel 9 ra mắt.

Khả năng định cấu hình

Mục tiêu chính của chúng tôi là giảm chi phí và sự nhầm lẫn về cờ bản dựng.

Chúng tôi đang thử nghiệm một mô hình cấu hình dự án mới, theo đó người dùng không cần phải biết nên đặt cờ kiểm thử và bản dựng ở đâu. Vì vậy, $ bazel test //foo sẽ tự động đặt đúng cờ dựa trên chính sách của dự án foo. Tính năng này có thể vẫn ở giai đoạn thử nghiệm trong phiên bản 9.0, nhưng chúng tôi rất mong nhận được ý kiến phản hồi mang tính định hướng.

Phạm vi gắn cờ cho phép bạn loại bỏ các cờ Starlark khi chúng rời khỏi ranh giới dự án, để chúng không làm gián đoạn việc lưu vào bộ nhớ đệm trên các phần phụ thuộc bắc cầu không cần đến chúng. Điều này giúp các bản dựng sử dụng hoạt ảnh chuyển đổi có chi phí thấp hơn và nhanh hơn. Sau đây là một ví dụ. Chúng tôi đang mở rộng ý tưởng này để kiểm soát những cờ nào sẽ truyền đến cấu hình exec và đang cân nhắc hỗ trợ linh hoạt hơn nữa, chẳng hạn như Starlark tuỳ chỉnh để xác định những cạnh phụ thuộc nào sẽ truyền cờ.

Chúng tôi đang ưu tiên nỗ lực di chuyển các cờ ngôn ngữ tích hợp sẵn ra khỏi Bazel và vào Starlark, nơi chúng có thể tồn tại cùng với các định nghĩa quy tắc liên quan.

Cải thiện khả năng thực thi từ xa

Chúng tôi dự định sẽ thêm tính năng hỗ trợ thực thi không đồng bộ, tăng tốc độ thực thi từ xa bằng cách tăng tính song song.


Để theo dõi thông tin cập nhật về lộ trình và thảo luận về các tính năng dự kiến, hãy tham gia máy chủ Slack của cộng đồng tại slack.bazel.build.

Lộ trình này nhằm mục đích thông báo cho cộng đồng về ý định của nhóm đối với Bazel 9.0. Các mức độ ưu tiên có thể thay đổi theo ý kiến phản hồi của nhà phát triển và khách hàng, hoặc theo các cơ hội mới trên thị trường.