- Buz là một fork ở giai đoạn đầu, bắt đầu từ commit ngay trước khi Bun được viết lại bằng Rust, đang được phát triển với mục tiêu trở thành bản thay thế tương thích dựa trên Zig mới nhất
- Toàn bộ build graph, bao gồm cả mã nguồn vendored của JavaScriptCore, đã được chuyển sang
build.zig, đồng thời áp dụng một số patch nhỏ cho Zig để đạt được build tăng dần dưới 1 giây - Dù đã đưa vào các test cho tính năng mới và bản sửa lỗi của Bun phiên bản Rust, vẫn còn nhiều test thất bại, nên dự án cần tiếp tục bám sát các tính năng upstream và thay đổi của JavaScriptCore
- Đã loại bỏ hơn 11.000 dòng mã không được sử dụng và sửa nhiều lỗi trong quá trình hiện đại hóa một số phần triển khai theo hướng dựa nhiều hơn vào thư viện chuẩn Zig
- Dự án chưa thể dùng cho production; mục tiêu dài hạn là giảm nợ kỹ thuật bằng cách kết hợp LLM với sự giám sát của con người, rồi tạo ra một codebase dễ bảo trì ngay cả khi không có LLM
Mục tiêu dự án và trạng thái phát triển
- Buz là một fork đang được phát triển dựa trên commit cuối cùng trước khi Bun được viết lại bằng Rust
- Tập trung vào việc trở thành một lựa chọn thay thế tương thích với Bun, đồng thời xây dựng codebase gọn gàng hơn trước
- Dự án đang ở giai đoạn rất sớm nên chưa sẵn sàng để dùng trong production
- Buz được công bố nhằm tránh trùng lặp công sức phát triển, trong bối cảnh một dự án Bun dựa trên Zig tương tự đã được công khai trên Ziggit
- Vào thời điểm công bố, tác giả vẫn chưa xem xét dự án đó
Port sang Zig mới nhất và build tăng dần
- Bun đã được port sang Zig upstream hiện tại, đồng thời áp dụng một số patch nhỏ cho Zig để hỗ trợ rebuild tăng dần
- Toàn bộ build graph, bao gồm mã nguồn vendored của JavaScriptCore, được tích hợp vào
build.zig - Cấu hình này rút thời gian build tăng dần xuống dưới 1 giây, giúp chu kỳ phát triển lặp nhanh hơn
- Dự án bao gồm submodule Zig
masterđã áp dụng patch build tăng dần - Ở thời điểm đó, dự án cũng có thể build bình thường với commit Zig upstream
2b1c663
Test tương thích và theo dõi upstream
- Các test được thêm vào Bun phiên bản Rust đã được đưa sang, trong đó có nhiều test kiểm chứng tính năng mới và bản sửa lỗi
- Hiện vẫn còn nhiều test chưa pass, nên cần tiếp tục bắt kịp Bun upstream
- Song song với việc duy trì tương thích tính năng, dự án cũng dọn dẹp mã và giảm nợ kỹ thuật
- Các thay đổi của JavaScriptCore cũng cần được theo dõi liên tục
Dọn dẹp và hiện đại hóa codebase
- Đã loại bỏ hơn 11.000 dòng mã hoàn toàn không được sử dụng trong Bun
- Một số mã được viết lại và hiện đại hóa, tăng mức sử dụng thư viện chuẩn Zig
- Trong quá trình dọn dẹp và hiện đại hóa, nhiều lỗi cũng được sửa cùng lúc
- Codebase Bun hiện tại có quy mô khoảng 600.000 dòng, và để đạt trạng thái gọn gàng, dự án cho rằng cần viết lại khá nhiều subsystem
Sử dụng LLM và chính sách đóng góp
- Dự án dự định sử dụng LLM rộng rãi để dọn dẹp mã cũ phức tạp, đồng thời áp dụng sự giám sát của con người và các thực hành phát triển tốt hơn
- Cho đến khi đánh giá codebase đã đủ gọn gàng, dự án sẽ không nhận đóng góp do con người trực tiếp viết
- Ưu tiên giảm nợ kỹ thuật và viết mã Zig theo phong cách idiomatic, với mục tiêu trong vài tuần hoặc vài tháng có được một codebase có thể là bản thay thế tương thích cho Rust Bun 1.4.0
- Dự án kêu gọi sự hỗ trợ từ các nhà phát triển có thể sử dụng Sol hoặc Fable
- Về dài hạn, mục tiêu là tạo ra một codebase dễ bảo trì ngay cả khi không có sự trợ giúp của LLM, đồng thời nâng cao năng lực Zig trong quá trình phát triển
1 bình luận
Ý kiến trên Hacker News
Hiện tại biên dịch gia tăng của Zig vẫn chưa hỗ trợ aarch64 và vá binary cũng chỉ khả dụng với linker trên Linux, nhưng việc hỗ trợ các nền tảng chính có vẻ chỉ là vấn đề thời gian
Việc một đội một người đạt được build trong 1 giây cho thấy build chậm là hệ quả của thực hành phát triển cẩu thả, và việc dành thời gian cho fork là một sự phân bổ tài nguyên hoàn toàn sai lầm
Rốt cuộc có vẻ là sẽ ra lệnh nhiều hơn, hoặc ra lệnh tốt hơn. Cấu trúc mã cũng có vẻ là vấn đề sở thích; hôm qua tôi đã có một cuộc trò chuyện kỳ quặc với một người bạn cứ khăng khăng rằng để xử lý một HTTP request cần bốn tiến trình backend
Tôi cho rằng thời đại con người can dự ngay từ đầu chỉ là một giai đoạn tạm thời
Tôi tự hỏi liệu đây có phải chuyện thường gặp trong các dự án lớn mà chỉ là tôi không biết hay không
Không rõ đó là mã hiển nhiên như
if (false) { dead_code(); }, hay là mã về mặt dispatch động thì có thể gọi nhưng về logic thì không thể được gọi. Nếu là trường hợp trước thì 1,8% là cao, nhưng nếu là trường hợp sau thì có thể thấp; cũng có nhiều dự án tích tụ mã trên thực tế gần như sẽ không bao giờ chạy phía sau các feature flag cũMột lượng nhỏ mã chết như tiện ích đơn giản hoặc mã được sinh ra có thể để lại cũng không sao, nhưng đôi khi việc loại bỏ lại kéo theo các đợt xóa và đơn giản hóa dây chuyền
Nói nghiêm ngặt thì đó không phải mã chết, nhưng khi dọn một abstraction nhỏ bị sai, các cơ hội dọn tiếp theo mở ra liên tiếp, và cuối cùng chỉ còn phần mềm làm đúng những việc nó được dự định làm. Codebase có xu hướng phình to theo thời gian, nên với quy mô của Bun, điều đáng ngạc nhiên hơn là họ chỉ tìm được 11.000 dòng
Ở pha tick, tính năng được thêm nhanh để tạo ra một phiên bản đúng nhưng cực kỳ bừa bộn; ở pha tock, kết quả được tiêu hóa và dọn dẹp để cải thiện hiệu năng, khả năng bảo trì và mức độ dễ vỡ trước thay đổi
Thường thì sau khi dùng vibe coding tạo một app chạy được trong một ngày, người ta dành một tuần để biến nó thành dự án có thể tiếp tục thêm tính năng mà không sụp như nhà bằng lá bài. Trước AI cũng tương tự, nhưng lập trình viên chuyên nghiệp có mô hình tinh thần mạnh hơn về hệ thống và tốc độ làm việc chậm hơn, nên sự chuyển pha không đột ngột đến mức này
Các mô hình coding có xu hướng mạnh là chọn lối tắt phá vỡ đóng gói hoặc sao chép mã không nên bị trùng lặp
Trong dự án lớn, bạn không thể chờ vài phút mỗi lần chạy test hoặc kiểm tra lỗi ngữ nghĩa, nên thời gian build rõ ràng là nút thắt
Không phải vì tôi cực kỳ ủng hộ AI, mà vì như một dạng nghệ thuật khái niệm hay thí nghiệm, xem hai dự án tiến hóa khác nhau ra sao chắc sẽ thú vị
Liên kết: https://ziggit.dev/t/cruller-buns-zig-runtime-continued-on-z...
Thảo luận HN: https://news.ycombinator.com/item?id=49017344
https://nubjs.com
Kết hợp các công cụ theo từng mục đích cũng không có vấn đề, nhưng thật tiện khi mọi vấn đề được giải quyết ngay ở trạng thái mặc định. Bundler của Bun cũng có runtime API, nên cùng tiến trình phục vụ asset có thể bundle trực tiếp trong bộ nhớ mà không cần phối hợp với bundler bên ngoài hay ghi file tĩnh ra đĩa