- Nhà sáng lập Bun, Jarred Sumner, đã commit hướng dẫn port Zig → Rust (PORTING.md) lên nhánh
claude/phase-a-port, qua đó công khai một thử nghiệm chuyển đổi ngôn ngữ quy mô lớn với sự hỗ trợ của tác nhân AI
- Việc port được chia thành Phase A (dịch thô logic theo từng file, không cần biên dịch) và Phase B (biên dịch thành công theo từng crate), với cách làm là cung cấp cho LLM khoảng 300 quy tắc ánh xạ kiểu và thành ngữ
- Chính Sumner đã nói trên Hacker News rằng "chưa hề quyết định rewrite, và rất có thể toàn bộ phần code này sẽ bị bỏ đi", nên ở thời điểm hiện tại đây vẫn là giai đoạn thăm dò mang tính thử nghiệm
- Trong cộng đồng, các yếu tố được nhắc đến gồm xung đột với chính sách cấm đóng góp bằng AI của Zig sau thương vụ Anthropic, việc Bun đã vận hành trên một bản fork của Zig, cùng các lợi thế an toàn của hệ sinh thái Rust
- Phần lớn PR được @robobun (bot AI) tự động tạo ra, sau đó CodeRabbitAI và Claude review, cho thấy một ví dụ về tính khả thi thực tế lẫn giới hạn của các đợt migration code quy mô lớn do AI dẫn dắt
Cấu trúc chính của hướng dẫn port (PORTING.md)
- Mục tiêu port là chuyển từng file Zig thành file
.rs trong cùng thư mục; ở Phase A, mục tiêu là tái hiện trung thực logic, còn việc có biên dịch được hay không thì không quan trọng
- Cấm dùng các crate async/I/O bên ngoài như
tokio, rayon, hyper, async-trait, std::fs, std::net — vì Bun tự sở hữu event loop và syscall riêng
- Cấm
async fn, mọi xử lý bất đồng bộ đều giữ nguyên mô hình callback + state machine như trong Zig
- Những phần chưa chắc chắn được đánh dấu bằng
// TODO(port):, còn các thành ngữ Zig liên quan hiệu năng được đánh dấu // PERF(port): để xử lý ở Phase B
Quy tắc ánh xạ kiểu và thành ngữ
- Cung cấp bảng ánh xạ hơn 50 kiểu dữ liệu như
[]const u8 → &[u8] (tuyệt đối không dùng &str), ?T → Option<T>, anyerror!T → Result<T, bun_core::Error>
defer x.deinit() → xóa rồi thay bằng impl Drop, errdefer → dùng scopeguard, comptime → chuyển thành const generic, const fn, macro_rules!
- Chuỗi được xử lý theo nguyên tắc dựa trên byte: cấm dùng
std::string::String hoặc &str, thay vào đó dùng &[u8]/Vec<u8> — vì Bun xử lý WTF-8 và byte tùy ý
@intCast → T::try_from(x).unwrap() (luôn kiểm tra), @truncate → x as T (wrapping có chủ ý), @bitCast → transmute; tài liệu cũng tổng hợp đối ứng Rust cho từng hàm dựng sẵn của Zig
Bản đồ crate và mô hình ownership
- Các namespace Zig như
@import("bun").X được ánh xạ 1:1 sang khoảng 30 crate Rust như bun_str, bun_sys, bun_jsc, bun_alloc
- Các crate AST/parser giữ nguyên arena
bumpalo::Bump, còn các crate khác dùng allocator mimalloc toàn cục, từ đó loại bỏ tham số allocator
- Ánh xạ ownership con trỏ gồm
bun.ptr.Owned → Box<T>, bun.ptr.Shared → Rc<T>, bun.ptr.AtomicShared → Arc<T>
Phản ứng cộng đồng (Lobsters·HN)
- Có nhiều ý kiến đặt câu hỏi "liệu họ có thật sự muốn chuyển sang Rust, hay đây là màn showcase cho LLM của Anthropic"
- Có suy đoán rằng xung đột giữa chính sách cấm đóng góp bằng AI của Zig và workflow phát triển lấy AI làm trung tâm của Anthropic có thể là bối cảnh phía sau, dù cũng có người tự nhận đây gần như chỉ là thuyết âm mưu
- Có cái nhìn hoài nghi về việc LLM có thể tuân thủ trung thành khoảng 300 quy tắc hay không — nhưng cũng có đánh giá tích cực rằng "~16k token thì khá vừa cho các sub-agent"
- Có nhận xét thú vị rằng cách làm tạo ra code chưa biên dịch được trước ở Phase A là hoàn toàn ngược với cách dùng coding agent thông thường
- Gánh nặng duy trì bản fork Zig của Bun, các thay đổi breaking diễn ra thường xuyên trong Zig, cùng rủi ro khi phụ thuộc sản phẩm cốt lõi vào một ngôn ngữ vẫn còn ở giai đoạn beta cũng được nhắc đến như động lực chuyển đổi
2 bình luận
Ý kiến trên Hacker News
Tôi làm ở Bun, và đây là nhánh của tôi
Nhìn chung, chủ đề này là một sự phản ứng thái quá. Có tới 302 bình luận về đoạn mã còn chưa chạy được, nhưng vẫn chưa có gì được xác nhận là sẽ viết lại, và cũng rất có thể toàn bộ đoạn mã này sẽ bị bỏ đi
Tôi muốn xem phiên bản chạy được sẽ trông như thế nào, cảm giác ra sao, hiệu năng thế nào, và việc làm cho nó vượt qua bộ test của Bun cũng như trở nên dễ bảo trì sẽ khó đến mức nào. Tôi muốn so sánh song song một phiên bản Rust và phiên bản Zig khả thi
Phần “khó đến mức nào để vượt qua bộ test của Bun và có thể bảo trì được” khá thú vị, vì đây là thời kỳ mà mỗi tháng lại xuất hiện thêm cơ hội để trừu tượng hóa hoàn toàn quá trình chuyển mã bằng agent, và tất cả đều dựa trên ngôn ngữ học
Nếu muốn tìm một ví dụ tương tự vừa thú vị vừa có phần giống thế, có thể xem vinext mà Cloudflare đã port từ Next.js vài tháng trước. Ban đầu có vấn đề thích nghi, nhưng giờ đã được dùng trong một số dự án production mà không gặp vấn đề lớn
[0] - https://github.com/cloudflare/vinext
Việc mọi người hỏi tại sao lại thêm xử lý ảnh hay webview vào JavaScript runtime trong khi vẫn còn các lỗi ảnh hưởng production bị bỏ mặc nghe có vẻ hoàn toàn hợp lý. Ví dụ, một trong những yếu tố chặn lớn nhất với chúng tôi là https://github.com/oven-sh/bun/issues/6608, được báo cáo từ năm 2023 nhưng đến 3 năm sau vẫn còn ảnh hưởng
Tham khảo thêm, lần gần nhất tôi dùng Bun thì tôi đã gặp vài lỗi ở những chỗ như Bun.write, kiểu lỗi mà Rust có lẽ đã giúp ích được
[0]: https://mastrojs.github.io/blog/2025-10-29-what-struggled-wi...)
Cuối cùng thì bất kể là ngôn ngữ hay công cụ nào, cứ chọn thứ phù hợp nhất với dự án và hoàn cảnh. Cá nhân tôi thấy thử nghiệm này rất thú vị và tò mò nó sẽ diễn tiến ra sao. Để viết Rust đúng phong cách thì cần thay đổi cách suy nghĩ, nên cũng đáng xem LLM sẽ thích nghi tốt đến mức nào theo thời gian
Hy vọng mã sẽ thanh lịch, không chỉ dễ bảo trì mà còn hướng tới tương lai và có hiệu năng tốt
Trong bối cảnh bài đang đứng top trên HN hiện tại là chuyện lo lắng cho Bun vì Anthropic mua lại Bun, thấy cái này khá thú vị. Bình luận top bên đó có không khí kiểu “Anthropic sẽ thử nghiệm trên codebase của họ chứ đội Bun sẽ không làm mấy thử nghiệm vibe coding như vậy đâu”
Thế nhưng những gì đang thấy lúc này lại giống như một công việc quy mô lớn được làm bằng vibe coding
Kết quả rồi thời gian sẽ trả lời, nhưng sẽ rất tốt nếu các maintainer của Bun giải thích họ đang làm gì ở đây và tại sao làm vậy
Có lẽ là cả hai một chút
Nếu đã có codebase sẵn để tham chiếu thì rất nhiều vấn đề của vibe coding sẽ giảm đi. Có sẵn một kiến trúc đang chạy tốt, và cũng có bộ test để đối chiếu
Trong một tháng, tôi đã đi từ con số 0 đến mức vượt qua hơn 95% bộ test của Postgres. Nếu Jarred là người đã tạo ra Bun thì có lẽ tiến độ còn nhanh hơn nhiều
[0] https://github.com/malisper/pgrust
Gần đây họ đề xuất một số công cụ nội bộ làm phần triển khai Rust chính thức cho Connect RPC. Đây là một bộ thư viện dựa trên Protobuf, nên cũng bao gồm Buffa, trình biên dịch Protobuf nền Rust mới
[0]: https://github.com/orgs/connectrpc/discussions/7#discussionc...
[1]: https://connectrpc.com/
[2]: https://github.com/anthropics/buffa
Nếu bạn là nhà đầu tư và muốn xem họ có dùng thời gian hiệu quả không thì tôi hiểu, còn ngoài ra thì tôi không rõ vì sao điều đó lại quan trọng với người khác
Thật thú vị khi thời thế đã thay đổi. Năm 2015, toàn bộ runtime Go, khi đó đã là một codebase khá trưởng thành, đã được bán tự động viết lại từ C sang Go. Một trong các maintainer đã tạo công cụ chuyển C sang Go nhắm vào tập con của C mà họ sử dụng, để mã tạo ra có thể biên dịch và cho cùng đầu ra, sau đó con người chỉnh sửa lại mã kết quả để nó Go hơn và tối ưu hơn
Giờ thì chỉ cần yêu cầu mô hình ngôn ngữ làm việc đó
Slide:
https://go.dev/talks/2015/gogo.slide#3
Cũng có một điểm tương đồng thú vị
Vì con người viết công cụ chuyển đổi, hiểu nó, kiểm thử nó và sửa lỗi cho nó, nên có thể tin cậy kết quả đó
Còn LLM thì không tất định. Nếu để nó chuyển độc lập 10 lần thì sẽ ra 10 kết quả khác nhau, và một số có thể khác rất nhiều. Không có cách nào để xác minh trừ khi mỗi lần đều rà soát lại toàn bộ
Điều đó không có nghĩa công cụ chuyển đổi tất định do con người làm là hoàn hảo hay không lỗi, nhưng rõ ràng có thể xây dựng được mức độ tin cậy cao hơn nhiều so với LLM
Commit được liên kết có vẻ không đủ thuyết phục để chống đỡ cho cái tiêu đề này. Có một nhánh nơi Claude đang đại tu mã Zig sang Rust trên diện rộng, và hiện tại là thêm 773.950 dòng và xóa 151 dòng
[0]: https://github.com/oven-sh/bun/compare/claude/phase-a-port
Vì tò mò về quy mô công việc, tôi đã lấy top 5 theo cloc
Language files blank comment code
Zig 1298 79693 60320 571814TypeScript 2600 67434 115281 471122
JavaScript 4344 36947 37653 290873
C++ 583 27129 19117 215531
C 111 21577 83914 199576
Có thể thành công nhưng theo cách chậm hơn: đi theo lịch sử commit git như một chuỗi checkpoint, áp dụng ý đồ vận hành của từng commit
Nếu làm vậy, tôi cũng muốn biết liệu có thể bỏ qua một số commit sửa lỗi cụ thể hay không, nhờ bản triển khai Rust tự nhiên tránh được vấn đề ngay từ đầu
Xét việc gần đây Bun/Anthropic từng phàn nàn về thời gian biên dịch của Zig — tức là PR tăng tốc biên dịch gấp 4 lần làm bằng vibe coding đã không được chấp nhận — thì việc định chuyển sang một ngôn ngữ có lẽ còn cho thời gian biên dịch dài hơn Zig gốc tới 4 lần trông như một bước đi khá “thú vị”
Tôi đã viết mã tương tự bằng Zig và C++, và biên dịch nguội thì C++ nhanh hơn nhiều lần, còn biên dịch tăng dần ở C++ thì gần như xong ngay
Theo tôi, lý do chính khiến dự án Rust biên dịch chậm là do lạm dụng dependency và lạm dụng metaprogramming trong mã
Zig không có nhiều đơn vị biên dịch riêng nên không thể song song hóa việc biên dịch
Tôi rất tò mò việc port bằng AI này sẽ kết thúc ra sao. Tôi đang tham gia vào nhiều dự án đang hoạt động, nơi ngôn ngữ hay framework đang cản trở dự án nhưng lại quá lớn để viết lại hoàn toàn chỉ bằng sức người
Với vibe coding bằng Rust, tôi thành công hơn so với ngôn ngữ động. Có cảm giác sự nghiêm ngặt của trình biên dịch Rust buộc agent AI tạo ra mã tốt hơn. Tôi cũng không chắc, có thể chỉ là vì tôi ít quen với Rust hơn nên thấy nó làm tốt hơn
Test harness là bắt buộc. Phải chạy test ở mỗi vòng lặp để chắc rằng không làm hỏng phần khác
Hiện tôi đang port TypeScript sang Rust và đã học được rất nhiều trong quá trình đó. Có thể xem công việc đang làm ở đây https://github.com/mohsen1/tsz/
Tôi có thể chia sẻ những điều đã học được
Cách tôi bù cho hạn chế không thể review chi tiết mã là bảo đảm test, integration test và end-to-end test bao phủ mọi thứ tôi quan tâm. Nếu không có vậy thì tôi không thể chắc rằng nó không bỏ sót chi tiết công việc
Tôi cũng cho nó chạy benchmark và stress test, rồi phân tích codebase để tìm các nút thắt tiềm ẩn. Sau khi phát hiện và sửa vài vấn đề thì mọi thứ tốt hơn hẳn. Cuối cùng, nếu bảo nó làm review phê phán, tìm cơ hội refactor, v.v. thì nó khá giỏi trong việc tạo danh sách những thứ cần sửa tiếp theo
Bảo nó chạy memory leak checker và công cụ phân tích tĩnh cũng là chiến lược tốt. Nếu số vấn đề tìm được theo các cách đó giảm xuống thì có lẽ mã cũng không quá tệ. Ít nhất là đã đạt tới một cực tiểu cục bộ nào đó
Việc không có review mã nghe khá kinh khủng, nhưng trong lập trình có AI hỗ trợ thì nó nhanh chóng trở thành nút thắt lớn nhất. Loại bỏ nút thắt đó đáng sợ thật, nhưng cũng nâng lượng mã có thể xử lý lên vài bậc. Trình biên dịch nghiêm ngặt và quản lý bộ nhớ nghiêm ngặt giúp loại bỏ một số loại lỗi nhất định
Trước đây tôi làm việc này với các ngôn ngữ mà tôi hiểu rõ. Nhưng khi bắt đầu xử lý các commit lớn hơn như chuyện thường ngày thì review trở thành vấn đề
Tôi nghĩ kiểu công việc trên codebase lớn như thế này sẽ còn ngày càng dễ hơn và tốt hơn theo thời gian. Vấn đề khó chịu chính trong loại kỹ thuật này là mô hình có xu hướng cố tình đi đường tắt, chỉ test đường đi hạnh phúc, và trì hoãn phần việc cốt lõi sang sau
Có vẻ nhiều mô hình bị thiên lệch để tiết kiệm token. Khá bực, nhưng cũng dễ khắc phục bằng prompt tiếp theo và test; và nếu mô hình được tinh chỉnh để hành xử tốt hơn ngay cả khi không có prompt bổ sung thì chuyện này sẽ bớt thành vấn đề hơn
Câu “có thể chỉ là vì tôi ít quen với Rust hơn nên thấy nó làm tốt hơn” thì đúng là cũng có thể thật
Tôi hy vọng Zig thành công, nhưng vì vẫn chưa lên 1.x nên các codebase lớn như Bun có lẽ sẽ gặp khó trong việc xử lý các thay đổi phá vỡ tương thích lớn
Ngoài ra Bun còn dùng một bản fork Zig https://x.com/bunjavascript/status/2048427636414923250?s=20
Tôi không hiểu sao họ không viết lại claude-code bằng Rust
Có vẻ Anthropic đã mua đội Bun vì claude-code dùng Bun, và có lẽ giờ muốn port Bun từ Zig sang Rust vì Rust “tốt hơn”. Nói cách khác, họ hẳn muốn làm claude-code “tốt hơn”, vậy mà lại đi đường vòng phức tạp như thế thì tôi không hiểu
Với năng lực LLM họ đang có, họ hẳn có thể viết thẳng claude-code bằng Rust để đạt trạng thái tốt nhất
Bun cũng rất dễ bị xem là một màn biểu diễn phục vụ marketing
Cho đến nay, phần lớn sự ấn tượng của claude/codex vẫn gắn với các ứng dụng được tạo ra bên trong ranh giới điều kiện của những thư viện sẵn có. Mô hình trực tiếp tận dụng những thành quả tuyệt vời mà con người đã xây dựng như Python,
requests,ffmpegNhưng tôi đang chờ đến giai đoạn con quái vật này vươn ra ngoài các ràng buộc đó — tức là tự viết lại, vá, đổi tên và dựng lại thư viện, DLL, binary. Khi điều đó xảy ra, thư viện sẽ tan chảy mất, còn ứng dụng sẽ nổi trên bãi cát rung lắc của một stack công nghệ hiệu quả hơn, an toàn hơn, tích hợp hơn nhưng hoàn toàn phi nhân tính
Xét về khả năng diễn giải hay bảo mật thì rõ ràng đây là ý tưởng đáng sợ, nhưng cũng khó mà quả quyết là nó không thể hoạt động, đặc biệt nếu có một nỗ lực tập trung và chuyên trách. Cũng chưa rõ việc slop hóa toàn diện khi máy móc viết lại hoàn toàn hàng chục năm phát triển nền tảng và gia tăng dần dần có nhất thiết loại trừ lẫn nhau với khả năng diễn giải hay không
Ý kiến trên Lobste.rs
Tham khảo thêm, Jarred Sumner đã nói trên HN về việc này như sau: anh ấy làm ở Bun, đây là branch của riêng anh ấy, và theo anh ấy thì thread này đang phản ứng thái quá với một đoạn mã không chạy được
Vẫn chưa chốt là sẽ viết lại, và khả năng toàn bộ đoạn mã này bị bỏ đi cũng rất cao
Ý của anh ấy là muốn xem phiên bản chạy được sẽ trông như thế nào, hiệu năng ra sao, độ khó để cho nó vượt qua test suite của Bun và có thể bảo trì thế nào, đồng thời muốn so sánh song song phiên bản Rust và phiên bản Zig khả thi
Cách diễn giải công nghệ kiểu đại chúng phần lớn thường dựa vào phản ứng tức thời
Ngay cả pull request thông thường của Bun cũng khá hỗn loạn: https://github.com/oven-sh/bun/pulls?q=is%3Apr+
Phần lớn là do @robobun tự động tạo ra, kiểm tra trùng lặp bằng GitHub Actions (dựa trên Claude), rồi được @coderabbitai và @claude review
Trong lúc đó CI vẫn đang hỏng, và @robobun cuối cùng còn tự đóng một phần PR của chính mình vì bị trùng với PR khác do chính nó tạo
Việc merge vào main thì con người vẫn làm
Tôi nhớ Bun từng được khen nhờ sự ám ảnh về hiệu năng của Jarred, nên không nghĩ họ lại để LLM tung hoành trong codebase đến mức này
Cái này thật vô lý
Nhìn vào phần “ánh xạ thành ngữ” thì
unsafexuất hiện dày đặc, có vẻ sẽ tạo ra rất nhiều đoạn mã không mang phong cách RustCách ánh xạ
@fieldParentPtr("field", ptr)trông đặc biệt thô bạoTuy vậy, có vẻ “phase A” về cơ bản là dịch từng dòng, rồi sau đó mới dùng prompt để refactor thành Rust tự nhiên hơn và dễ bảo trì hơn
Vấn đề là thiết kế ngôn ngữ có thể, và thực tế đúng là thường, đẩy mạnh hướng triển khai, nên rất dễ phát sinh những nút thắt sau này khó gỡ
Cuối cùng thì có lẽ viết lại thủ công theo kiểu truyền thống sẽ là con đường tốt hơn
Nhất là với mức tài trợ như Anthropic, một điểm tiện của AI là nó không biết mệt khi refactor đi refactor lại cùng một đoạn mã
Tách riêng chuyện migration, cách họ làm việc này đặc biệt thú vị
Trong
docs/PORTING.mdđược liên kết có khoảng 300 quy tắc porting, và có vẻ quá nhiều để bất kỳ LLM nào có thể “nhớ” hết và làm theo một cách trung thànhVì Anthropic sở hữu Bun nên lần porting này về cơ bản có ngân sách token gần như vô hạn; biết đâu họ còn định tung ra số agent tương ứng với
số file * số quy tắcđể “đảm bảo” mọi thứ đều được tuân thủHọ cũng chia quá trình porting thành hai giai đoạn: A là port thô từng file trong trạng thái cô lập và dự kiến compile sẽ hỏng, B là nối tất cả lại để compile được
Ở phase A, họ nói với agent rằng mã “không cần phải compile”, và yêu cầu chấm từng file đã port theo chất lượng đầu ra ở mức thấp/trung bình/cao
Thấp nghĩa là logic sai, trung bình là logic đúng nhưng không compile được, còn cao là logic đúng và có vẻ sẽ compile được
Cách này gần như đối lập hoàn toàn với kiểu coding agent mà tôi hiểu và đang dùng, nên tôi rất tò mò về kết quả
Theo cảm giác của tôi, nếu nói không cần compile tức là không đưa ra một “mục tiêu kết thúc” rõ ràng, thì kết quả sẽ trở nên rất khó đoán, và ở phase B có lẽ phải review cả một núi mã không đáng tin
Tôi grep nhanh thì trong 1279 điểm chất lượng đầu ra kiểu này có khoảng 3% là thấp, 80% là trung bình, 17% là cao
PORTING.mddài khoảng 16k token và tập trung vào nhiệm vụ chínhVới sub-agent mới thì không tệ, thậm chí có thể còn là mức lý tưởng
Tôi tự hỏi liệu họ thực sự muốn chuyển sang Rust, hay đây chỉ là một bài test LLM của Anthropic
Nếu Anthropic chuyển Bun, một trong những dự án nổi tiếng nhất của Zig, sang ngôn ngữ khác, thì đó sẽ là màn phô trương sức mạnh khá lộ liễu
Tất nhiên tôi không hoàn toàn tin vào giả thuyết đầy kịch tính này, cũng có thể đơn giản là họ muốn trình diễn sản phẩm bằng túi tiền rủng rỉnh của Anthropic
Trông khá thú vị
Tập quy tắc phải xử lý cùng lúc có vẻ không thể kiểm chứng nổi nếu không trải qua một chu kỳ review mã cực lớn
Token thì có thể rất nhiều, nhưng sau kiểu chuyển đổi này, việc xác minh mã có lẽ sẽ trở nên cực kỳ khó khăn
Nếu test cũng phải đi qua cùng một quy trình, thì tôi tự hỏi rốt cuộc điều gì còn lại làm tiêu chuẩn của sự thật
Dù vậy, xét như một thí nghiệm thì thật đáng nể
Nhìn vào tình hình của các dự án muốn hạ bệ Node.js, Deno có đưa ra vài cải tiến nhỏ như hệ thống quyền hạn hay hỗ trợ TypeScript mặc định, nhưng không làm thay đổi thế giới, và các tính năng này cũng đang được nhập ngược vào Node.js
Theo trải nghiệm của tôi thì DX không tốt hơn một cách có ý nghĩa, thậm chí đôi khi còn tệ hơn vì đã có những công cụ rất tốt như pnpm
Nó có thể nhanh hơn, nhưng trong phạm vi sử dụng của tôi suốt 5~6 năm qua, tôi hầu như không gặp vấn đề hiệu năng nào với Node.js
JSR cũng không tạo được làn sóng lớn, và thay vào đó cộng đồng làm ra npmx với trải nghiệm tốt hơn hiện nay
Tuy vậy, tôi khá thích standard library của Deno, ví dụ như
@std/collectionsBun thì có phạm vi quá rộng nên ngay từ đầu đã có nhiều dấu hiệu rủi ro, nhưng tôi vẫn lạc quan dè dặt vì Jarred có vẻ muốn mất bao nhiêu năm cũng được để làm ra runtime JS đa năng tốt nhất
Nhưng rồi sau khi bị Anthropic mua lại, thấy Jarred giờ làm khá nhiều ~~vibe coding~~ phát triển kiểu agent, rồi thêm tin vibe porting lần này nữa, thì dù chỉ là branch thử nghiệm tôi cũng càng chắc rằng đây không phải dự án mình sẽ dùng
Vì thế Node.js vẫn tiếp tục thống trị
Nói nghiêm túc thì TypeScript tích hợp sẵn và SQLite thật sự rất ấn tượng
Tôi không hoàn toàn phản đối AI; tôi thấy vibe coding các script Python nhỏ hay web app để giải một bài toán rất cụ thể thì vui và hữu ích
Nhưng với các dự án phức tạp có nhiều bộ phận chuyển động và có người dùng, niềm tin của tôi ngày càng được củng cố rằng “phát triển kiểu agent” ở quy mô lớn, dù có thể tạm thời tăng tốc làm tính năng, cuối cùng vẫn là lỗ ròng vì làm dự án kém ổn định và phình to ra
Tôi nghĩ ngay đến các ví dụ như VSCode, Cursor, mise, giao diện web của Perplexity
Làm một cái dropdown JS không giật lag khi cuộn khó đến thế sao
Tôi mong nhiều công cụ, thư viện và dự án lớn mà tôi phụ thuộc sẽ nhận ra điều này và áp dụng chính sách chống AI nghiêm ngặt hơn
Vì chúng đã tạo áp lực buộc Node phải tốt hơn
Ngày xưa Node còn từng cố tình không triển khai btoa
Nhưng cuối cùng có lẽ cả hai vẫn sẽ chỉ là chú thích bên lề
Đây đúng là đi sai hướng
Tôi chưa từng gặp một maintainer Rust nào đang duy trì dự án Rust cỡ trung, tức vài trăm nghìn dòng trở lên, mà hài lòng với khả năng mở rộng ở codebase lớn
Tôi thấy Rust đặc biệt tốt cho codebase lớn:
https://matklad.github.io/2023/03/28/rust-is-a-scalable-language.html
https://ferrous-systems.com/blog/rust-as-productive-as-kotlin/
Tuy nhiên để làm việc hiệu quả thì ít nhiều phải biết mình đang làm gì:
https://matklad.github.io/2021/09/05/Rust100k.html
Còn trong bối cảnh này, Zig so với Rust ra sao thì tôi không rõ lắm
TigerBeetle có cách thiết kế khá đặc thù
Tôi cũng biết vài trường hợp một chương trình Rust 20k dòng triển khai tính năng cốt lõi của một chương trình Go 300k dòng
Nên xét chặt chẽ thì không đúng hẳn với điều kiện bạn nêu ra
Nhưng trong phạm vi 10k~100k dòng, với tư cách maintainer tôi rất hài lòng với Rust
Kích thước này đủ nhỏ để chương trình giữ được trọng tâm, nhưng cũng đủ lớn để hiện thực một ý tưởng cốt lõi một cách trọn vẹn
Ở quy mô này, cả ngôn ngữ lẫn công cụ đều là tài sản lớn, ít nhất là theo trải nghiệm cá nhân của tôi
cargo-nextesthiện có 84k dòng mã Rust nếu bỏ qua comment và dòng trống, và với tư cách maintainer duy nhất, tôi cho rằng mình không thể viết nó bằng ngôn ngữ khác mà vẫn đạt tiêu chuẩn chất lượng cá nhânCó lẽ vì chuyện này: https://github.com/oven-sh/bun/issues/28001
Đây không phải vấn đề an toàn bộ nhớ theo thời gian