**Lint** là một thuật ngữ trong khoa học máy tính, dùng để chỉ một công cụ phân tích mã tĩnh được sử dụng để đánh dấu các lỗi lập trình, lỗ hổng, lỗi về phong cách và các cấu trúc khả nghi trong mã nguồn. Thuật ngữ bắt nguồn từ một tiện ích Unix dùng để kiểm tra mã nguồn ngôn ngữ C. Các chương trình thực hiện các chức năng này được gọi là "linter".

Lịch sử
-------

Năm 1978, trong khi gỡ lỗi văn phạm yacc cho ngôn ngữ C và giải quyết các vấn đề tương thích liên quan đến việc đưa hệ điều hành Unix lên máy 32-bit, Stephen C. Johnson, một nhà khoa học máy tính tại Bell Labs, đã nghĩ ra thuật ngữ "lint". Thuật ngữ được mượn từ từ "lint" trong tiếng Anh có nghĩa là xơ vải, bởi vì công cụ mà ông viết có tác dụng như một cái bẫy xơ vải trong máy sấy quần áo, thu gom các sợi xơ thừa mà vẫn giữ nguyên vẹn phần vải nguyên vẹn. Năm 1979, lập trình lint lần đầu tiên được sử dụng bên ngoài Bell Labs trong phiên bản thứ bảy của Unix.

Trải qua nhiều năm, có nhiều phiên bản lint đã được phát triển cho phần mềm biên dịch các ngôn ngữ C và C++. Mặc dù các phần mềm biên dịch hiện đại có những chức năng tương tự lint, các công cụ kiểu lint cũng đã nâng cao khả năng của chúng, chẳng hạn như PC-Lint của Gimpel ra mắt làn đầu năm 1985, được sử dụng để phân tích mã nguồn C++, vẫn được mở bán cho đến ngày nay.

Tổng quan
---------

Trong bài báo gốc vào năm 1978, Johnson đã trình bày lý do của ông khi tạo ra một chương trình riêng để phát hiện lỗi, khác biệt với chương trình mà nó phân tích: "...tự bản chất việc có hai chương trình là điều tốt..." [bởi vì chúng tập trung vào những thứ khác nhau, do đó cho phép lập trình viên] "tập trung vào một giai đoạn của quy trình lập trình chỉ trên các thuật toán, cấu trúc dữ liệu và tính chính xác của chương trình, và sau đó với sự trợ giúp của lint, họ có thể cải tiến thêm các đặc tính mong muốn về tính tổng quát và khả năng tương thích".

Các phiên bản linter tiếp theo
------------------------------

Các công cụ phân tích mã kiểu Lint cũng có thể thực hiện phân tích tương tự như trình biên dịch tối ưu, nhằm tạo ra mã chạy nhanh hơn. Mặc dù các trình biên dịch hiện đại đã tích hợp nhiều chức năng từng có trong Lint, nhưng các công cụ kiểu Lint cũng đã phát triển để phát hiện nhiều cấu trúc khả nghi hơn, bao gồm "cảnh báo về lỗi cú pháp, sử dụng biến chưa khai báo, gọi các hàm đã ngừng sử dụng, quy ước về khoảng cách và định dạng, sử dụng sai phạm vi, chuyển giao ngầm trong lệnh switch, thiếu header bản quyền, [và]... các tính năng ngôn ngữ nguy hiểm".

Các công cụ kiểu lint đặc biệt hữu ích cho các ngôn ngữ động như JavaScript và Python, vì trình biên dịch của các ngôn ngữ này thường không áp dụng nhiều quy tắc nghiêm ngặt trước khi thực thi, nên các linter cũng có thể được sử dụng như các công cụ gỡ lỗi đơn giản để các tìm lỗi thông thường (ví dụ: lỗi cú pháp) cũng như các lỗi khó tìm như heisenbugs. Các công cụ kiểu lint thường phân tích tĩnh mã nguồn trước khi thực thi để tìm kiếm lỗi tiếm ẩn.

Một số công cụ như Eslint cho phép tự động sửa các quy tắc. Mỗi quy tắc được định nghĩa kèm theo một phép chuyển đổi, giúp ngăn chặn quy tắc đó bị kích hoạt. Các quy tắc về phong cách thường đi kèm với tính năng tự động sửa. Khi chạy công cụ lint ở chế độ 'fix all' (sửa tất cả) trên một tập tin chỉ vi phạm các quy tắc về định dạng, nó sẽ hoạt động giống như một công cụ chuyên dùng để định dạng mã nguồn.

Xem thêm
--------

* Splint (công cụ lập trình)
* Danh sách công cụ phân tích mã tĩnh

Tham khảo
---------

1. 1 2 3 4  Johnson, Stephen C. (25 tháng 10 năm 1978). "Lint, a C Program Checker". *Comp. Sci. Tech. Rep*. Bell Labs: 78–1273. CiteSeerX 10.1.1.56.1841. Bản gốc lưu trữ 23 tháng 1 năm 2022.
2. ↑  "UNIX is free!". lemis.com. 24 tháng 1 năm 2002.
3. ↑  Broderick, Bill (23 tháng 1 năm 2002). "Dear Unix enthusiasts" (PDF). Caldera International. Bản gốc (PDF) lưu trữ 19 tháng 2 năm 2009.
4. ↑  "About SublimeLinter". *The SublimeLinter Community, revision 1cecc79c*. Truy cập 29 tháng 3 năm 2020.
5. 1 2  Morris, Richard (1 tháng 10 năm 2009). "Stephen Curtis Johnson: Geek of the Week". *Red Gate Software*. Truy cập 19 tháng 1 năm 2018.
6. ↑  "PC-lint Plus | Static Code Analysis for C and C++". *PC-lint Plus* (bằng tiếng Anh). Truy cập ngày 24 tháng 2 năm 2024.
7. ↑  "Arcanist User Guide: Lint". *Phabricator*. Truy cập 19 tháng 1 năm 2018.
8. ↑  "ESLint - Customizable JavaScript linting tool (1)". *theCodeCampus* (bằng tiếng Anh). 9 tháng 6 năm 2015. Truy cập 21 tháng 4 năm 2019.
9. ↑  Jones, Nigel (1 tháng 5 năm 2002). "How to Use Lint for Static Code Analysis". *Barr Group*.

Đọc thêm
--------

* Darwin, Ian F. (1991). *Checking C Programs with Lint: C Programming Utility*. United States: O'Reilly Media. ISBN 978-0937175309.
* "LINT(1)". *FreeBSD General Commands Manual (FreeBSD 11.2)*. 23 tháng 3 năm 2015.