2 điểm bởi GN⁺ 2024-11-30 | 1 bình luận | Chia sẻ qua WhatsApp
  • Thành công và thất bại của Ninja

    • Khoảng 9 năm trước, tác giả đã giới thiệu Ninja, một hệ thống build tương tự Make. Ban đầu có phần ngượng ngùng, nhưng hiện nay nó đã được sử dụng rộng rãi.
    • Các dự án lớn sử dụng Ninja gồm có Chrome, Android và dự án Meson.
    • Ninja là dự án mã nguồn mở thành công nhất của tác giả; được giới thiệu vào năm 2011, chuyển giao quyền sở hữu vào năm 2014, và hiện đã được bàn giao cho người bảo trì thứ ba.
    • Tác giả đã học được rằng trong lập trình, kiến trúc còn quan trọng hơn việc viết mã, và các vấn đề xã hội còn quan trọng hơn cả kiến trúc.
  • Chi tiết kỹ thuật

    • Ninja là một hệ thống đơn giản thực thi các lệnh theo những yêu cầu đã cho.
    • Ninja nhận tệp ninja.build, kiểm tra thời gian sửa đổi của các tệp và chạy song song các lệnh cần thiết.
    • So với Make, Ninja có ít tính năng hơn trong ngôn ngữ build đầu vào và tập trung vào việc thực thi nhanh.
    • Ninja tối ưu việc so sánh đường dẫn bằng cách ánh xạ các đường dẫn tệp vào các đối tượng trong bộ nhớ.
  • Ghi chú về kiến trúc

    • Biểu diễn đồ thị của Ninja sử dụng đồ thị hai phía giữa tệp và lệnh để nắm bắt cấu trúc build tốt hơn.
    • Ninja sử dụng thêm dữ liệu phụ thuộc bổ sung để xử lý các phụ thuộc header C.
    • Ninja không phải là một tiến trình daemon thường trú và thực hiện công việc lại từ đầu ở mỗi lần chạy.
    • Trạng thái tệp đã được kernel lưu vào bộ nhớ đệm, nên hầu như không cần đệm lại trong không gian người dùng.
    • Ninja được thiết kế dựa trên quá trình build của Chrome và đang gặp các vấn đề về khả năng mở rộng ở những dự án quy mô lớn.
  • Ẩn dụ "assembler"

    • Ninja không triển khai các tính năng của nhiều hệ thống build khác nhau mà chỉ triển khai đồ thị hành động, để người dùng chọn các chương trình sinh khác.
    • Thiết kế này giúp Ninja vừa nhanh vừa linh hoạt.
  • Tầm quan trọng của mặc định

    • Theo mặc định, Ninja chạy các lệnh song song, nhờ đó thực hiện build song song an toàn hơn Make.
  • Tốc độ

    • Ninja tập trung vào hiệu năng build tăng dần trên các codebase lớn, điều này ảnh hưởng mạnh đến mức độ hài lòng của người dùng.
    • Ninja dùng ít CPU hơn nên cũng cải thiện hiệu năng build tổng thể.
  • CMake

    • Ninja được tích hợp tốt với CMake, và nhờ sự tích hợp này mà được dùng cho công việc với LLVM.
  • Hỗ trợ Windows

    • Ninja cũng hoạt động trên Windows, và nhiều người dùng đầu tiên là người dùng Windows.
  • Công việc liên quan

    • Thiết kế của Ninja được truyền cảm hứng từ blaze/bazel, hệ thống build của Google.
  • Bảo trì mã nguồn mở

    • Việc bảo trì mã nguồn mở không hẳn là thú vị, và đã có rất nhiều yêu cầu cũng như chỉ trích từ người dùng.
    • Tác giả muốn gây ấn tượng với các hacker đồng nghiệp thông qua phần mềm của mình.
  • Lời cảm ơn cuối cùng

    • Tác giả gửi lời cảm ơn tới các maintainer và contributor của Ninja.

1 bình luận

 
GN⁺ 2024-11-30
Ý kiến trên Hacker News
  • Có ý kiến cho rằng trong lập trình, kiến trúc quan trọng hơn việc viết mã, và các vấn đề xã hội còn quan trọng hơn cả kiến trúc

    • Đây được cho là cách diễn đạt rất hay cho suy nghĩ đã tồn tại từ lâu trong lòng họ
  • Ninja đóng vai trò lớn trong hệ thống build của Android

    • Ban đầu dùng makefiles, nhưng sau đó trở nên phức tạp hơn với hệ thống build khai báo tùy chỉnh tên là soong
    • Google đã phát triển kati để chuyển đổi Makefiles thành các tệp build của Ninja
    • Việc chuyển sang Ninja mất thời gian, nhưng sau khi chuyển xong thì chạy rất nhanh
  • Có ý kiến cho biết Google đã tiến hành nghiên cứu về độ trễ (latency), và hy vọng nghiên cứu này sẽ được công khai

  • Có ý kiến cho rằng khi dùng CMake, Ninja sẽ còn được sử dụng trong một thời gian nữa vì C++20 modules cần đến Ninja

  • Đã chuyển từ Ninja sang Samurai và cho biết mọi mặt đều được cải thiện

    • Họ cho rằng hệ thống build cần tính hash của mọi đầu vào và kiểm tra xem chúng có tồn tại trong registry hay không
  • Có ý kiến cho rằng cần có sự đánh đổi giữa độ chính xác, tính tiện dụng và hiệu năng, và phải lựa chọn một cách có chủ đích

    • Những công cụ hy sinh độ chính xác để đổi lấy tính tiện dụng có thể tạo ra một hệ sinh thái chính xác hơn
  • Có kinh nghiệm với hệ thống build, và cho rằng Ninja nhỏ đến mức có thể được triển khai bằng ngôn ngữ lập trình yêu thích của mình

    • Họ thắc mắc liệu có hướng dẫn từng bước nào để tự tạo hệ thống build của riêng mình hay không
  • Họ cho rằng cái tên Ninja rất hay, và có cách để làm nó nhanh hơn nữa

    • Giải thích rằng công cụ này cố ý không giữ lại trạng thái của lần chạy trước