16 điểm bởi xguru 2024-06-24 | 10 bình luận | Chia sẻ qua WhatsApp
  • 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:
    1. Khả năng tương tác với C
    2. 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

  1. 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)
  2. Đã duy trì trạng thái ổn định trong thời gian dài hơn
  3. Sự tài trợ từ giới công nghiệp dành cho Rust Foundation có vẻ ổn định
  4. LSP và trải nghiệm lập trình viên rất tốt
  5. Cargo: trình quản lý gói hàng đầu ngành
  6. 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)
  7. 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
  8. Hỗ trợ SIMD trong phiên bản nightly
  9. Hỗ trợ WASM mượt mà tương đương Zig
  10. 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

  1. Dễ học đối với lập trình viên có nền tảng C/C++ hoặc TypeScript
  2. 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
  3. 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
  4. Việc hỗ trợ nhiều nền tảng đích rất dễ dàng (zig targets được đánh giá cao)
  5. Dễ viết phần mềm nhanh (hỗ trợ Vector gốc, tận dụng SIMD, v.v.)
  6. Tương thích với các trình gỡ lỗi hiện có
  7. Hệ thống build rất tốt (cải thiện gấp 100 lần so với Makefile hiện có)
  8. Mức độ minh bạch tài chính cao của Zig Software Foundation
  9. Có thể port dần code C++ hiện có và "Zig hóa" nó
  10. 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:
    1. Độ dễ học và tuyển dụng có ảnh hưởng lớn hơn dự kiến (nghiêng về Zig)
    2. Trải nghiệm lập trình viên liên quan đến toolchain đóng vai trò quan trọng
    3. 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ó
    4. 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

 
qpfjf56 2025-04-30

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!

 
ahwjdekf 2025-01-17

Một vấn đề lớn của zig là 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.

 
cosine20 2024-07-01

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...

 
[Bình luận này đã bị ẩn.]
 
botplaysdice 2024-06-24

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á...

 
bus710 2024-06-24

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…

 
tested 2024-06-24

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.

 
rlcks97 2024-07-01

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.

 
daejin 2024-06-24

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

 
tsboard 2024-06-24

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.