2009-04-18 20 views
13

Eclipse CDT cung cấp hai bộ chỉ mục cho mã C/C++ (Preferences> C/C++> Indexer). Có ai biết sự khác biệt chính xác giữa hai cái này không?Eclipse có hai trình lập chỉ mục C/C++ (nhanh & đầy đủ): sự khác biệt là gì?

Sự giúp đỡ tập tin là không chính xác khai sáng:

"CDT hỗ trợ sự đóng góp của indexers bổ sung, với 2 indexers được cung cấp cùng với mặc định CDT phát hành:

  • nhanh C/C++ Indexer: cung cấp khả năng lập chỉ mục nhanh nhất - cả hai khai báo và tham chiếu chéo thông tin. Đây là khuyến cáo người lập chỉ mục.

  • Full C/C++ Indexer: cung cấp thậm chí chính xác hơn indexing khả năng với chi phí của hiệu suất - cả hai tờ khai và thông tin tham khảo chéo "

có nghĩa là gì được hơn. chính xác: liệu nó có lập chỉ mục nhiều thứ hơn không và nếu có thì hãy làm gì?

+1

Vẫn còn trong trường hợp, trong Eclipse Kepler, có hai trình lập chỉ mục có sẵn không? Tôi không thấy hai ... có lẽ một người đã bị loại bỏ? – einpoklum

Trả lời

13

Đây là trích đoạn từ trang CDT mô tả cách phân tích cú pháp và lập chỉ mục của chúng (CDT/designs/Overview of Parsing). Nó đưa ra một mô tả khá tốt về những gì sự khác biệt là gì và ở đâu indexer nhanh có thể thất bại:

Parsing và giải quyết ràng buộc là một quá trình chậm , đây là một vấn đề vì người sử dụng mong muốn chỉnh sửa mã tính năng như nội dung hỗ trợ là nhanh. Vì lý do này, CDT lưu trữ thông tin ràng buộc trong bộ nhớ cache trên đĩa được gọi là “chỉ mục” hoặc “PDOM” (Mẫu đối tượng tài liệu kiên trì) theo số để có thể cung cấp các tính năng phản hồi nhanh chóng các yêu cầu của người dùng.

Xây dựng chỉ mục bao gồm phân tích cú pháp tất cả mã trong một dự án, giải quyết tất cả các ràng buộc và viết các ràng buộc đó vào chỉ mục. Chỉ mục là sau đó được cập nhật từng lần người dùng chỉnh sửa tệp.

Phiên bản cũ hơn của hỗ trợ CDT ba các chế độ lập chỉ mục khác nhau, nhanh chóng lập chỉ mục, lập chỉ mục đầy đủ và không có chỉ mục . Cài đặt mặc định là trình lập chỉ mục nhanh vì lập chỉ mục một dự án lớn có thể tốn thời gian quá trình . Sự khác biệt giữa các chỉ mục nhanh chóng và đầy đủ là trình lập chỉ mục nhanh sẽ bỏ qua các tệp tiêu đề đã được phân tích cú pháp một lần, trong khi trình chỉ mục đầy đủ sẽ luôn phân tách một tệp tiêu đề mỗi khi nó được bao gồm. Tuy nhiên, điều quan trọng là để hiểu rằng chỉ mục đầy đủ, mặc dù tên của nó, vẫn không hoàn toàn chính xác .

Khi tệp tiêu đề được bao gồm trong tệp nguồn , nó tuân theo bất kỳ macro nào đã được xác định tại điểm đó. Một số tiêu đề thư viện sử dụng macro kết hợp với tiền xử lý điều kiện (#ifdefs) cho một phần bao gồm tệp tiêu đề. Đôi khi tệp tiêu đề được bao gồm nhiều hơn một lần trong dự án, nếu các macro tiêu đề phụ thuộc vào khác nhau mỗi khi tiêu đề được bao gồm thì các phần khác nhau của tiêu đề có thể là được bao gồm trong các tệp nguồn khác nhau. Cả trình chỉ mục sẽ không chính xác trong trường hợp này bởi vì nó sẽ chỉ lập chỉ mục tiêu đề lần đầu tiên là gặp phải.

Trình đánh chỉ mục đầy đủ sẽ phân tích lại tiêu đề nó đã gặp phải, nhưng sẽ không lập chỉ mục lại chúng. Do đó, các tệp nguồn có tiêu đề có thể được phân tích cú pháp chính xác hơn, nhưng chính tiêu đề sẽ chỉ được lập chỉ mục một lần. Trình lập chỉ mục đầy đủ nhiều hơn chậm hơn trình lập chỉ mục nhanh vì phân tích cú pháp bổ sung, nhưng chỉ chính xác hơn một chút. Đối với lý do này chỉ mục Đầy đủ không được đề xuất là và đã bị xóa khỏi phiên bản CDT hiện tại.

Mỗi dự án có một PDOM được liên kết với nó. PDOM được lưu trữ trên đĩa dưới dạng tệp nhị phân phẳng. Chỉ mục sẽ chỉ lập chỉ mục các tiêu đề mà được bao gồm trong tệp nguồn, vì vậy nếu có tệp .h trong dự án không được bao gồm trong bất kỳ tệp .c hoặc .cpp nào thì bình thường nó sẽ không nhận được được lập chỉ mục. Tuy nhiên, có một cài đặt ưu tiên là để lập chỉ mục tất cả các tệp trong dự án .

+6

Tôi đã viết rằng mục nhập trang Wiki và đọc lại ở đây tôi đã nhận ra rằng nó sai. Trình lập chỉ mục đầy đủ không thực sự hoàn toàn chính xác và đã bị xóa khỏi phiên bản CDT hiện tại. Tôi đã cập nhật wiki và câu trả lời này là chính xác (và tôi đã kiểm tra kỹ với các nhà phát triển CDT khác để đảm bảo nó đúng). –

+1

@MikeKucera tất cả mọi người tôi biết ai sử dụng nhật thực sử dụng một phiên bản cũ để họ có thể nhận được các chỉ số đầy đủ, bạn có biết nếu nó sẽ bao giờ trở lại phiên bản hiện tại? –

+0

Chúng tôi thậm chí không gọi người lập chỉ mục còn lại là người lập chỉ mục 'nhanh' nữa, vì chỉ có một người lập chỉ mục trong nhiều năm nay chúng tôi mới bắt đầu gọi nó là 'người lập chỉ mục'. Nó đã nhận được nhiều cải thiện về độ chính xác và tốc độ gần đây. Ví dụ, người lập chỉ mục bây giờ sẽ lập chỉ mục một tệp tiêu đề nhiều lần nếu nó được bao gồm nhiều hơn một lần trong các ngữ cảnh khác nhau (tức là các tập hợp macro quan trọng khác nhau). Điều đó giúp bạn trở lại rất nhiều tính chính xác mà người lập chỉ mục đầy đủ cũ đã không có hình phạt hiệu suất rất lớn. Tôi khuyên bạn và bạn bè nên nâng cấp lên phiên bản CDT mới nhất. –

1

Tôi tin rằng nó luôn luôn phục hồi mọi tệp được tìm thấy/bao gồm mà không cần "lưu vào bộ nhớ cache". lý do nếu nội dung của các tập tin có thể phụ thuộc vào các định nghĩa tiền xử lý vì vậy nó luôn luôn được reparsed. Trình phân tích cú pháp nhanh giả định không có gì thay đổi kể từ khi tệp được gặp lần đầu tiên.

(nhưng tôi có thể là sai)

1

Không ai biết những gì là sự khác biệt chính xác là giữa hai?

Theo kinh nghiệm của tôi, khoảng 32MB đống.

Các vấn đề liên quan