Linker Elf2 Mới Của Zig Mang Lại Tốc Độ Build Tăng Dần Nhanh Hơn 11 Lần Với Chi Phí Gần Như Bằng Không

Nhóm Cộng đồng BigGo
Linker Elf2 Mới Của Zig Mang Lại Tốc Độ Build Tăng Dần Nhanh Hơn 11 Lần Với Chi Phí Gần Như Bằng Không

Ngôn ngữ lập trình Zig đã giới thiệu một linker mới đột phá có tên Elf2 giúp cải thiện đáng kể tốc độ quy trình phát triển. Linker được xây dựng tùy chỉnh này đại diện cho một bước tiến lớn hướng tới mục tiêu của Zig trong việc tạo ra một toolchain biên dịch tích hợp hoàn toàn có thể vượt trội hơn các công cụ phát triển truyền thống.

Cách Kích Hoạt Elf2 Linker

  • Dòng lệnh: Sử dụng cờ -fnew-linker
  • Script xây dựng: Đặt exe.use_new_linker = true
  • Tự động: Được kích hoạt mặc định với -fincremental trên các target ELF
  • Hỗ trợ hiện tại: Chỉ định dạng ELF (dự kiến hỗ trợ thêm nhiều nền tảng khác)

Đột Phá Về Hiệu Suất Thay Đổi Quy Trình Phát Triển

Linker Elf2 mới mang lại những cải thiện tốc độ đáng kể cho các build tăng dần. Khi thực hiện những thay đổi nhỏ trong code của trình biên dịch Zig , thời gian build đã giảm từ khoảng 750-850 millisecond với linker cũ xuống chỉ còn 72-73 millisecond với Elf2 . Điều này thể hiện sự cải thiện gấp 11 lần về tốc độ biên dịch tăng dần.

Có lẽ ấn tượng hơn là hiệu suất này gần như tương đương với việc bỏ qua hoàn toàn quá trình tạo code. Khi các developer vô hiệu hóa hoàn toàn cả backend và linker, các build tăng dần mất khoảng 69-70 millisecond. Linker mới chỉ thêm 4% chi phí so với việc chỉ kiểm tra kiểu dữ liệu, khiến bước build -Dno-bin truyền thống gần như trở nên lỗi thời.

So sánh hiệu suất: Linker cũ vs Linker mới

Kịch bản Linker cũ Linker mới ( Elf2 ) Chỉ kiểm tra kiểu
Build ban đầu 18s 18s 17s
Build tăng dần 1 754ms 73ms 70ms
Build tăng dần 2 858ms 72ms 69ms
Cải thiện tốc độ Chuẩn Nhanh hơn 11 lần Nhanh hơn 11.6 lần
Chi phí phụ so với kiểm tra kiểu ~1100% ~4% 0%

Cộng Đồng Tranh Luận Về Triết Lý Thiết Kế Của Zig

Thông báo về linker đã khơi mào những cuộc thảo luận rộng hơn về hướng đi tổng thể của Zig . Một số developer đánh giá cao cách tiếp cận tích hợp theo chiều dọc của ngôn ngữ, lưu ý rằng các thành phần tùy chỉnh như linker này cho phép những tối ưu hóa độc đáo mà các toolchain truyền thống không thể thực hiện được. Những người khác bày tỏ lo ngại về một số lựa chọn thiết kế, đặc biệt là xung quanh việc xử lý interface và những gì họ coi là sự phức tạp không cần thiết.

Càng nghe nhiều về Zig , tôi càng đánh giá cao nó. Stack tích hợp theo chiều dọc của nó (với linker tùy chỉnh và các backend tạo code) nổi bật với tôi như một tính năng thực sự hấp dẫn cho phép những tối ưu hóa thú vị.

Cộng đồng vẫn chia rẽ về những thay đổi gần đây trong hệ thống IO của Zig , hiện tại phụ thuộc nhiều hơn vào các interface mặc dù ngôn ngữ này truyền thống không khuyến khích sử dụng chúng. Điều này đã tạo ra căng thẳng giữa triết lý đã tuyên bố của ngôn ngữ và nhu cầu triển khai thực tế.

Tiềm Năng Toolchain Đa Nền Tảng

Ngoài việc phát triển Zig thuần túy, linker mới đưa Zig gần hơn tới việc trở thành một giải pháp cross-compilation hoàn chỉnh cho các dự án C và C++ . Nhiều developer đã sử dụng Zig như một sự thay thế drop-in cho các cross-compiler truyền thống vì tính đơn giản của nó so với việc quản lý các toolchain riêng biệt cho các nền tảng khác nhau.

Linker Elf2 hiện tại hoạt động với các target ELF và tự động kích hoạt khi sử dụng chế độ biên dịch tăng dần. Các developer cũng có thể kích hoạt nó thủ công thông qua các flag dòng lệnh hoặc cài đặt build script. Khi hỗ trợ mở rộng tới nhiều nền tảng và định dạng file hơn, điều này có thể định vị Zig như một lựa chọn thay thế nghiêm túc cho các kết hợp toolchain đã được thiết lập.

Những cải thiện hiệu suất cho thấy rằng thiết kế linker hiện đại có thể loại bỏ các nút thắt cổ chai truyền thống trong chu kỳ phát triển. Với các build tăng dần hiện tại mất dưới 100 millisecond, các developer có thể duy trì các vòng phản hồi chặt chẽ hơn nhiều trong các phiên coding tích cực.

Tham khảo: Elf2: create a new linker from scratch #25299