- Krabby là một triển khai trình biên dịch Rust viết mới từ đầu ưu tiên hiệu năng, nhằm cải thiện tốc độ biên dịch chậm của
rustc
- Những cải thiện hiệu năng mà người dùng có thể cảm nhận trong
rustc hiện nay không còn đến từ việc chỉnh sửa một hàm đơn lẻ, mà chủ yếu đến từ thay đổi API và cấu trúc dữ liệu; tuy nhiên, do codebase lớn và yêu cầu ổn định cao, các thay đổi quy mô lớn rất khó thực hiện
- Krabby tìm cách kiểm chứng các cơ hội tối ưu hóa mới và một kiến trúc gắn kết hơn bằng cách cùng thiết kế lại các thành phần trình biên dịch trong một codebase nhỏ do một người kiểm soát, nơi tính ổn định không được đặt lên hàng đầu
- Mục tiêu là kiểm nghiệm giả thuyết rằng để tăng mạnh hiệu năng trình biên dịch thì cần phải suy nghĩ lại hoàn toàn về thiết kế, ngay cả với một ngôn ngữ phức tạp như Rust
- Mã nguồn được công khai tại kho krabby trên Codeberg, và mục tiêu là đăng cập nhật tiến độ trên Fediverse ít nhất mỗi 1–2 tuần
Mục tiêu và bối cảnh của Krabby
- Rust là ngôn ngữ được tác giả ưa thích, nhưng trình biên dịch
rustc lại chậm một cách dễ nhận thấy
- Đã có rất nhiều người nỗ lực cải thiện hiệu năng của
rustc, và các cải tiến có thể nâng hiệu năng cảm nhận được chỉ bằng cách thay đổi một hàm đơn lẻ gần như đã được khai thác hết
- Những cải thiện có ý nghĩa hiện nay chủ yếu đến từ thay đổi API và cấu trúc dữ liệu, nhưng với một codebase lớn như
rustc, việc thay đổi ở quy mô lớn gần như không khả thi do còn phải phát triển nhiều tính năng và đảm bảo tính ổn định
- Krabby là một triển khai trình biên dịch Rust viết mới từ đầu đặt hiệu năng lên ưu tiên hàng đầu, và có mục tiêu về bản chất khác với
rustc
- Vì là codebase nhỏ do một người kiểm soát và không ưu tiên tính ổn định, dự án chọn cách thiết kế mọi thành phần trong mối liên hệ với nhau để tìm ra các cơ hội tối ưu hóa mới và tạo nên một kiến trúc gắn kết hơn
- Dự án khởi đầu từ giả thuyết rằng nếu muốn cải thiện mạnh hiệu năng trình biên dịch thì phải suy nghĩ lại hoàn toàn về thiết kế của trình biên dịch
- Tác giả cũng muốn cho thấy rằng các tối ưu hóa kiến trúc quy mô lớn có thể đang ẩn giấu bất kể ngôn ngữ mục tiêu là gì, và điều này không chỉ áp dụng cho các ngôn ngữ đơn giản như C mà còn có thể áp dụng với ngôn ngữ phức tạp như Rust
- Ngay cả khi thiết kế cuối cùng trở nên chuyên biệt cho Rust, tác giả vẫn cho rằng những gì học được trong quá trình đó là có giá trị
Tình trạng dự án và tài liệu công khai
- Krabby là một dự án rất lớn, và tác giả không chắc liệu nó có thể hoàn thành hay bản thân mình có phải là người phù hợp nhất hay không
- Dù vậy, niềm yêu thích đối với việc tối ưu mã và nâng cao độ hoàn thiện, cùng niềm vui khi viết mã tốt cho một mục tiêu mà tác giả cho là có giá trị, vẫn là động lực cho đến nay
- Mã nguồn được công khai tại kho krabby trên Codeberg
- Mục tiêu là đăng cập nhật tiến độ trên Fediverse ít nhất mỗi 1–2 tuần, và các bản cập nhật dài, đi sâu hơn sẽ được đăng trên cùng trang đó
- Người quan tâm có thể liên hệ qua email
-
Các bài viết tiến độ liên quan
1 bình luận
Ý kiến trên Lobste.rs
Có vẻ ai cũng muốn có giấy phép phù phiếm của riêng mình https://codeberg.org/bal-e/krabby/…
Giấy phép này cho phép sử dụng và chia sẻ miễn phí cho mục đích cá nhân, phi thương mại, nhưng phần mềm xây dựng dựa trên nó cũng phải được chia sẻ theo cùng điều kiện, và mục đích thương mại chỉ được dùng thử trong 30 ngày
Tôi thắc mắc liệu Codeberg có yêu cầu điều kiện libre/open source nghiêm ngặt đối với giấy phép dự án hay không. Tôi cứ nghĩ Codeberg chỉ host FOSS, nên điều khoản hạn chế dùng phi thương mại này khá bất ngờ, dù cũng có thể là tôi không theo kịp tình hình mới nhất
Rust là một hệ sinh thái rất lớn. Dự án này có vẻ dễ hơn một chút so với “tự làm một trình duyệt web”, nhưng hoàn toàn không hề dễ. Dù vậy, tôi đánh giá cao việc mục tiêu rất lớn
Xem krabby: motivations, có vẻ tốc độ là lý do chính của dự án này
Theo hiểu biết của tôi về Rust, kiểm tra kiểu, borrow checking v.v. vốn đã rất nhanh, còn nút thắt cổ chai là code generation, trong đó một phần đáng kể liên quan đến LLVM hơn là bản thân Rust
Tôi tò mò không biết phía Cranelift dạo này tiến triển ra sao, và liệu có chồng lấn với các ý tưởng nhằm tăng tốc code generation hay không
Cá nhân tôi khá chắc rằng nếu nhìn toàn bộ pipeline biên dịch thì điều đó không hợp lý lắm. Cần có rlib chỉ chứa MIR, và cần một backend có thể tối ưu hóa toàn bộ thế giới mà không cần RAM vô hạn (bình luận này có nói đến)
“Codegen Unit” hoàn toàn là độ phức tạp phát sinh ngẫu nhiên
Đặc biệt, phần phân rã chi tiết của libraries và binaries có thể sẽ thú vị
LLVM không phải là thứ nhanh nhẹn gì, nhưng tôi nhớ là rustc cũng có xu hướng chuyển cho LLVM một IR phình to quá mức, điều này cũng chẳng giúp ích gì
Mục tiêu trung hạn của tôi, tức trong khoảng 5 năm tới, là
cargo check, nên tôi sẽ không đụng vào code generationDù vậy, tôi vẫn thấy còn rất nhiều dư địa tối ưu ở khả năng song song hóa tốt hơn, tách hot path của mã chẩn đoán, giảm công việc trùng lặp giữa kiểm tra kiểu và borrow checking, cải thiện memory layout của các cấu trúc dữ liệu cốt lõi, v.v.
Việc tôi quen thân với các nhà phát triển rustc và thường xuyên nghe họ nói về nhiều vấn đề trong codebase cũng giúp ích