ฉันไม่สามารถบอกได้ว่าอัลกอริทึมใดถูกใช้โดยการใช้งานใด ๆ แต่ฉันสามารถคาดเดาได้ Trieเป็นโครงสร้างข้อมูลที่เป็นประโยชน์มากสำหรับปัญหานี้: IDE สามารถรักษา Trie ขนาดใหญ่ในหน่วยความจำทั้งหมดของสัญลักษณ์ในโครงการของคุณมีบางข้อมูลเมตาพิเศษที่แต่ละโหนด
เมื่อคุณพิมพ์อักขระตัวอักษรจะเดินไปตามเส้นทางในสาม ลูกหลานทั้งหมดของโหนด trie เฉพาะคือความสำเร็จที่เป็นไปได้ จากนั้น IDE ก็ต้องกรองสิ่งที่เหมาะสมในบริบทปัจจุบัน แต่จะต้องคำนวณให้มากที่สุดเท่าที่จะทำได้ในหน้าต่างป๊อปอัปการเติมแท็บ
การเติมแท็บขั้นสูงเพิ่มเติมจำเป็นต้องมีสามแบบที่ซับซ้อนมากขึ้น ตัวอย่างเช่นVisual Assist Xมีคุณลักษณะที่คุณต้องพิมพ์ตัวพิมพ์ใหญ่ของสัญลักษณ์ CamelCase เท่านั้นเช่นหากคุณพิมพ์ SFN จะแสดงสัญลักษณ์ให้คุณเห็นSomeFunctionName
ในหน้าต่างการเติมแท็บ
การคำนวณ trie (หรือโครงสร้างข้อมูลอื่น ๆ ) จำเป็นต้องมีการแยกวิเคราะห์รหัสทั้งหมดของคุณเพื่อรับรายการสัญลักษณ์ทั้งหมดในโครงการของคุณ Visual Studio จัดเก็บสิ่งนี้ไว้ในฐานข้อมูล IntelliSense ซึ่งเป็น.ncb
ไฟล์ที่จัดเก็บไว้ข้างโปรเจ็กต์ของคุณเพื่อที่จะไม่ต้องแยกวิเคราะห์ทุกอย่างทุกครั้งที่คุณปิดและเปิดโปรเจ็กต์ของคุณอีกครั้ง ในครั้งแรกที่คุณเปิดโปรเจ็กต์ขนาดใหญ่ (เช่นคุณเพิ่งซิงค์ตัวควบคุมแหล่งที่มาของฟอร์ม) VS จะใช้เวลาในการแยกวิเคราะห์ทุกอย่างและสร้างฐานข้อมูล
ฉันไม่รู้ว่ามันจัดการกับการเปลี่ยนแปลงที่เพิ่มขึ้นอย่างไร อย่างที่คุณบอกเมื่อคุณเขียนโค้ดมันเป็นไวยากรณ์ที่ไม่ถูกต้อง 90% ของเวลาและการแยกวิเคราะห์ทุกครั้งที่คุณไม่ได้ใช้งานจะทำให้ CPU ของคุณเสียภาษีเป็นจำนวนมากเพื่อผลประโยชน์เพียงเล็กน้อยโดยเฉพาะอย่างยิ่งหากคุณกำลังแก้ไขไฟล์ส่วนหัวที่รวมอยู่ใน ไฟล์ต้นฉบับจำนวนมาก
ฉันสงสัยว่า (ก) จะทำการแยกวิเคราะห์เฉพาะเมื่อคุณสร้างโปรเจ็กต์ของคุณจริง ๆ (หรืออาจจะเป็นเมื่อคุณปิด / เปิด) หรือ (ข) มันจะทำการแยกวิเคราะห์เฉพาะบางประเภทโดยที่มันจะแยกวิเคราะห์โค้ดในบริเวณที่คุณเพิ่ง แก้ไขในรูปแบบที่ จำกัด เพียงเพื่อให้ได้ชื่อของสัญลักษณ์ที่เกี่ยวข้อง เนื่องจาก C ++ มีไวยากรณ์ที่ซับซ้อนอย่างโดดเด่นจึงอาจทำงานผิดปกติในมุมมืดหากคุณใช้ metaprogramming เทมเพลตจำนวนมากและอื่น ๆ