- Một công ty cung cấp dịch vụ cho hàng trăm triệu người dùng (không công khai) hiện đang sử dụng C và C++ trong các hệ thống cốt lõi
- Trong suốt năm 2023, họ đã thảo luận về việc nên chọn Rust hay Zig làm ngôn ngữ được áp dụng
- Các yếu tố cân nhắc chính:
- Khả năng tương tác với C
- Khả năng mở rộng về mặt kỹ sư (tuyển dụng, bảo trì, v.v.)
- Lựa chọn cuối cùng: Zig
- Họ chia sẻ quá trình ra quyết định này vì cho rằng nó cho thấy rõ "những yếu tố mà một công ty quy mô lớn cân nhắc khi mã nguồn chạy trên nhiều đích khác nhau và ảnh hưởng tới hàng trăm triệu người dùng"
Tầm quan trọng của khả năng tương tác với C
- Thư viện định viết lại có khả năng được sử dụng trên mọi nền tảng (web, di động, kính thực tế ảo, máy chơi game console, desktop, v.v.)
- Vì vậy, việc cung cấp C API và sử dụng thông qua FFI là cách duy nhất để đảm bảo có thể chạy trên mọi nền tảng
Các chủ đề thảo luận chính
Rust
- Vào thời điểm đó, Rust phổ biến hơn Zig hơn 25 lần (dựa trên khảo sát và subreddit)
- Đã duy trì trạng thái ổn định trong thời gian dài hơn
- Sự tài trợ từ giới công nghiệp dành cho Rust Foundation có vẻ ổn định
- LSP và trải nghiệm lập trình viên rất tốt
- Cargo: trình quản lý gói hàng đầu ngành
- An toàn bộ nhớ và "không có hành vi không xác định" (không hoàn toàn đúng, nhưng đã được nhắc đến trong thảo luận)
- Nếu muốn rời xa C++, Rust phù hợp hơn vì không có lỗi bộ nhớ và khả năng phát sinh hành vi không xác định
- Hỗ trợ SIMD trong phiên bản
nightly
- Hỗ trợ WASM mượt mà tương đương Zig
- Về hiệu năng, ngang ngửa Zig hoặc trong một số trường hợp "nhanh hơn đáng kể"
Khả năng tương tác với C của Rust:
- Rust có hệ sinh thái riêng rất phong phú nên tầm quan trọng của khả năng tương tác với C tương đối thấp hơn
- Khả năng tích hợp với các ngôn ngữ cấp cao như Python binding là rất tốt
- Có ý kiến cho rằng lợi ích của việc dùng Rust bù đắp được nhược điểm của việc phải cung cấp C binding
Zig
- Dễ học đối với lập trình viên có nền tảng C/C++ hoặc TypeScript
- Mang lại trải nghiệm lập trình thú vị cho các lập trình viên có nền tảng C
- Trình biên dịch Zig cũng có thể biên dịch C và C++, có lợi cho việc quản lý phụ thuộc và xây dựng thư viện C ABI
- Việc hỗ trợ nhiều nền tảng đích rất dễ dàng (
zig targets được đánh giá cao)
- Dễ viết phần mềm nhanh (hỗ trợ
Vector gốc, tận dụng SIMD, v.v.)
- Tương thích với các trình gỡ lỗi hiện có
- Hệ thống build rất tốt (cải thiện gấp 100 lần so với Makefile hiện có)
- Mức độ minh bạch tài chính cao của Zig Software Foundation
- Có thể port dần code C++ hiện có và "Zig hóa" nó
- Chắc chắn hơn trong việc giải quyết các vấn đề link/biên dịch cho mọi nền tảng đích
Kết luận
- Zig giúp giảm đáng kể thời gian và công sức cần thiết để port codebase hiện có cũng như đảm bảo khả năng tương thích trên mọi nền tảng
- Những yếu tố quyết định ngoài dự đoán:
- Độ dễ học và tuyển dụng có ảnh hưởng lớn hơn dự kiến (nghiêng về Zig)
- Trải nghiệm lập trình viên liên quan đến toolchain đóng vai trò quan trọng
- Trình biên dịch Zig và hệ thống build đã hỗ trợ rất nhiều nhờ khả năng tương thích với codebase hiện có
- Hệ sinh thái, cộng đồng và các đảm bảo về an toàn bộ nhớ của Rust có ảnh hưởng ít hơn dự kiến
10 bình luận
Tôi rất thích bài viết này! Trong lúc tìm hiểu về node, bun và deno, tôi thấy bun được viết bằng một ngôn ngữ lạ là zig nên đã tò mò không biết đó là ngôn ngữ gì, và bài này đúng là một màn làm quen rất hay!
Một vấn đề lớn của
ziglà khi mã do người dùng viết có lỗi lúc biên dịch, nó không cho biết chính xác vị trí hay thông tin về lỗi đó. Có vẻ như nó chỉ chỉ ra đến thư viện chuẩn.Xem qua các yếu tố cân nhắc, các điểm thảo luận và kết luận thì có vẻ ngay từ đầu đây đã không phải là môi trường cần đến Rust. Có ai từng thấy người giao đồ ăn chạy xe off-road để giao hàng chưa?
Dù đúng là phải phát triển bằng ngôn ngữ native, nhưng nếu không phải là tác vụ quá quan trọng về bộ nhớ thì chọn bên nào thuận tiện hơn cho phát triển mới là hợp lý. Chuyện này thì cũng đâu đến mức phải tranh luận suốt cả một năm...
Nhắm đến hàng trăm triệu người dùng....
Không biết là công ty nào nhỉ. Có vẻ là một công ty không bị ràng buộc bởi những thủ tục mang tính hình thức như chứng chỉ/xác thực... ghen tị quá...
Mỗi năm tôi lại xem qua Zig một lần, và có vẻ gần như năm nào cũng có breaking change ;; Hơn nữa, ngay trong bản thân ngôn ngữ cũng chưa có sẵn thư viện cho queue hay truyền message giữa các thread, nên so với độ trưởng thành của Rust thì có lẽ vẫn còn một chặng đường khá dài. Tất nhiên, nếu người dùng rất thạo các OS API thì có thể đó không phải là vấn đề lớn…
Rust phổ biến hơn Zig tới hơn 25 lần, nhưng xem ra tuyển dụng thì Zig lại có lợi thế hơn.
Có lẽ là vì lý do ở mục số 1: các lập trình viên có nền tảng C/C++ hoặc TypeScript có thể học dễ dàng.
Mang lại trải nghiệm lập trình thú vị cho các lập trình viên có nền tảng C
Dễ viết phần mềm nhanh hơn (hỗ trợ Vector gốc, tận dụng SIMD, v.v.)
Gợi nhớ cảm giác khi lần đầu học Python
Khi thấy Bun được phát triển bằng ngôn ngữ Zig, tôi từng thắc mắc vì sao lại là Zig; nhờ một bài viết so sánh rất hay với Rust mà giờ tôi đã hiểu. Mà nói đi cũng phải nói lại, có vẻ như ngôn ngữ C thực sự sẽ trường tồn mãi mãi.