-
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
Ý 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
Ninja đóng vai trò lớn trong hệ thống build của Android
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
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
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ọ cho rằng cái tên Ninja rất hay, và có cách để làm nó nhanh hơn nữa