Sr. Content Developer at Microsoft, working remotely in PA, TechBash conference organizer, former Microsoft MVP, Husband, Dad and Geek.
157544 stories
·
33 followers

Rethinking C++ Performance: Faster Code Navigation and GitHub Copilot Tools with Whole Codebase Indexing

1 Share

In large C++ codebases, your code understanding and navigation depend on quickly determining how symbols, declarations, definitions, and references are connected across your project.

In Visual Studio Insiders 18.9, the new whole codebase indexing (WCI) enhances the existing browse database via a deeper, more comprehensive indexing approach. This preview feature allows Visual Studio to access richer symbol information more efficiently in your C++ project, with faster lookups for core IntelliSense scenarios like Find All References and semantic file colorization. It also enables new experiences like CodeLens references for C++ , a highly requested productivity feature. The same symbol index supports the find_symbol tool, which gives Copilot faster access to symbol context, providing more responsive agentic suggestions.

In this blog, we discuss:

  • Faster file colorization and code navigation with WCI
  • Faster access to symbol-level context for GitHub Copilot tools
  • CodeLens for C++
  • Technical implementation details

Faster File Colorization and Code Navigation

Building code understanding features for C++ is uniquely challenging due to the language’s complexity, especially at scale in modern codebases. Whole codebase indexing (WCI) adds a deeper indexing approach designed for faster, more accurate C++ code navigation. For a deeper technical explanation, see the Technical Details section.

Prior to WCI, many code navigation features relied on a combination of information from the browse database and on-demand analysis of translation units to resolve C++ symbols.  Because this information often had to be computed at request time, navigation operations could take longer to complete and require additional time and resources. This was especially noticeable for repeated operations, as the same symbol information had to be recomputed every time. Now, deeper symbol information is stored in the database and continuously updated as you code, leading to faster, more efficient lookups.

While results vary between codebases and operations, we consistently found 2x or greater improvements for many code navigation and semantic colorization scenarios with WCI enabled.  These accumulate as repeated operations can continue using the same database, with the largest speedups often occurring in larger projects. In some scenarios, operations that used to take seconds to wait for, like file colorization, are now nearly instantaneous, creating a significantly more responsive editing experience.

With WCI enabled, Visual Studio enhances the C++ browse database in the background with richer symbol information. This information is indexed on demand on file open and persists between Visual Studio sessions, with the database expanding as you open new files and work across your codebase.  If the required data is not yet (or only partially) available, Visual Studio automatically falls back to the existing implementation. When this happens, all code navigation features continue to work, but without the performance gains from WCI.

The examples below show these improvements on two open-source codebases of different sizes: the smaller Bullet3 repository and the larger LLVM project. All testing was done with Visual Studio 2026 version 18.9.

In the two examples below, building the initial on-demand index required for these scenarios took approximately 22 seconds for Bullet3 (91 translation units indexed across 2 files) and approximately took 3.5 minutes for LLVM (136 translation units indexed across 5 files in the LLVM core project). These measurements are examples, actual indexing time and resources depends on the size and complexity of your codebase as well as the number of files opened at once.

The charts below show the average completion time for semantic file colorization and Find All References calls across both codebases with and without WCI enabled.

Graph, 414ms with bullet3 down to 9ms. 1156ms down to 19ms with llvm

graph, find all references (in seconds), 18s to 1s in bullet3, 134s to 69s L:LVM
Test environment: Microsoft Dev Box, AMD EPYC 7763 (8 physical cores / 16 logical processors @ 2.45 GHz), 64 GB RAM, running Windows 11 Enterprise. Results were collected across multiple benchmark runs and averaged for consistency.     

In many cases, like in LLVM above, the improvements are large enough that colorization no longer feels like a background operation. Instead, once the deeper semantic index has been created, the semantic colorization feels nearly instantaneous. For example, it only takes 0.2 seconds to colorize the PassBuilder.cpp file from Bullet3:

SidebySide WCI 3 1 sharp image
In the time it takes for the previous implementation (18.9) to colorize the file, 18.9 with WCI is able to colorize the file and shortly after also have CodeLens support available. Note that this entire gif is running at half speed (including the timer).

Faster access to symbol-level context for agentic suggestions

WCI also improves C++ agentic suggestions by giving Copilot faster access to rich, symbol-level context from your C++ codebase through the find_symbol tool. This tool is backed by language service protocol (LSP) symbol operations, and WCI’s expanded symbol index helps these operations locate relevant types, functions, declarations, and definitions across the codebase more quickly and directly.

copilot1 image

This deeper integration with Visual Studio’s C++ code intelligence helps Copilot spend less time searching for symbol information, making the full agentic loop quicker and more responsive. In larger codebases, especially when symbols have many reference locations, this helps C++ agentic suggestions execute faster and be more relevant than workflows that depend only on file search or language-agnostic code context.

copilot2 image

Faster Navigation via CodeLens for C++

WCI’s richer symbol information also enables new experiences in the editor. For example, enabling the “Enable CodeLens for References” sub-setting for WCI enables a highly requested capability: reference support for CodeLens in C++. Since this feature is currently in preview, it is off by default.

With WCI powering CodeLens, you can now see reference counts directly inline above your functions or symbols. These are available for any symbol indexed by WCI, with the full list of references accessible via a single click. Now, there’s no need to manually run “Find All References” or switch to a separate results window. Symbol usage, definitions, and declarations are also shown inline.

CodeLensforCpp image

Note, to use CodeLens for C++, your project also needs to have the CodeLens setting (Tools > Options > Text Editor > CodeLens) enabled.

Technical details

Traditionally, the browsing database tracks only declarations and definitions of symbols in a codebase, and is populated by the TagParser. The TagParser is optimized for speed, and does not expand includes or perform full name resolution. It is a different C++ parser than the one used in the IntelliSense engine, and that tradeoff for speed versus accuracy can result in ambiguities that need to be resolved during the operation by the IntelliSense engine.

In WCI, the database is expanded to track symbol usages as well, using the full capabilities of the IntelliSense engine. The result is more precise semantic information in the database, and the ability to use that data directly to serve the operations for semantic colorization and navigation across files, instead of having to wait for the IntelliSense engine to be initialized, which can have a higher latency cost.

The database now acts as a caching layer for the IntelliSense operations: it uses the database if a given file has been indexed, and if not, it falls back to the IntelliSense engine as before. Because that precise information might take more time and resources to compute, by default the files are progressively indexed on demand based on their usage. This allows the cost to be amortized over time, especially for large codebases. With a smaller codebase, consider enabling the sub setting “Parse all files in the solution ahead of time” to index all project files once on project open.

This model produces more predictable latency curve, with a lower average overall, but also fewer operations experiencing long tail latency, in cases where complex code constructs would take more time to process and delay the results, since that processing can now be non-blocking and reused more often.

A Few Things to Keep in Mind

  • Machines need to have a minimum of 4+ cores to use this process, which is the recommended minimum hardware requirement for Visual Studio 2026.
  • Building a symbol index with WCI for your project may take up additional processing and memory resources on your machine compared to using the previously.  To check the current status while indexing is in progress, look for a task notification in Visual Studio’s task manager called “Running deep C++ analysis for richer navigation”.
  • This is a preview feature that is gradually being rolled out to specific groups, so the setting might be already enabled on your machine.  If you want to enable it yourself, you can always navigate to the setting in the preview feature (Tools > Options  > Whole codebase semantic index for C++)

Try it today & tell us what you think

Try out this feature today in your own codebase by enabling the setting in the preview feature (Tools > Options  > Whole codebase semantic index for C++).

To check whether the setting has been enabled, navigate to Tools > Options > Languages > C/C++ > IntelliSense > Browsing & navigation > whole codebase semantic index > enable faster code navigation and colorization features (experimental).

This feature exists because of your feedback, and we will continue to improve. We would love to hear how this deeper indexing is working for you. Please share your thoughts by filling out this survey , commenting below, through Help > Send Feedback in Visual Studio, on Bluesky (@msftcpp.bsky.social) or on X (@VisualC). Thank you for your continued support!

To learn more: Configure IntelliSense Options for C and C++ – Visual Studio (Windows) | Microsoft Learn

The post Rethinking C++ Performance: Faster Code Navigation and GitHub Copilot Tools with Whole Codebase Indexing appeared first on C++ Team Blog.

Read the whole story
alvinashcraft
just a second ago
reply
Pennsylvania, USA
Share this story
Delete

Introducing Usage Limits for Pulumi Neo

1 Share

Pulumi Neo is an AI agent that takes on real infrastructure work, and it’s natural to want to hand it more and more. Usage limits give you control so you can do exactly that: set a monthly dollar limit, and Neo pauses when your organization reaches it.

How usage limits work

Your organization limit is a single monthly dollar amount covering all Neo usage across the org. To set one:

  1. In the Pulumi Cloud console, navigate to Settings → Billing & usage → Neo token usage.
  2. In the Manage token usage panel, enter an organization limit.
  3. Save your changes.

When usage reaches the limit, Neo pauses for the rest of the billing period and resumes automatically at the start of the next one. An Admin or Billing Manager can raise the limit to resume before then.

The Manage token usage panel, where an admin sets the organization’s monthly Neo limit and turns on email notifications.

Enforcement happens at a natural boundary in Neo’s work, so a task already in progress finishes its current step before pausing. As a result, usage can go a few dollars over the set limit.

Per-member limits and alerts

You can also set a separate limit for each member. A member is paused at whichever limit is smaller: their own or the organization’s. For example, a member with a $200 limit under a $150 organization limit pauses at $150, because the organization limit is smaller.

The per-member limits table, showing each member’s amount used and effective limit for the billing period.

Turn on Enable email notifications to get a heads-up before you reach the limit. Billing admins are alerted at 50%, 80%, and 95% of the organization limit, with a final notice at 100% when Neo pauses.

Get started

Set your usage limits and stay in control as your organization hands Neo more and more work. Usage limits are available today for organizations on a paid plan, and an Admin or Billing Manager can set them.

Read the whole story
alvinashcraft
15 seconds ago
reply
Pennsylvania, USA
Share this story
Delete

ASP.NET Core updates in .NET 11 Preview 6

1 Share

Here's a summary of what's new in ASP.NET Core in this preview release:

ASP.NET Core updates in .NET 11:

Read the whole story
alvinashcraft
41 seconds ago
reply
Pennsylvania, USA
Share this story
Delete

OpenAI may announce a ChatGPT smart speaker this year

1 Share

OpenAI's first device is set to be a smart speaker that lets you talk with ChatGPT, according to a report from Bloomberg. The device apparently won't have a screen, but will use a camera and additional sensors to "understand" your environment.

The report comes just days after Apple filed a lawsuit against OpenAI that accused the AI company of stealing hardware secrets. OpenAI, in a new statement on Tuesday, said that it is "not aware of any evidence that this complaint has merit."

Sources tell Bloomberg that OpenAI's device will also feature a rechargeable battery that will allow users to carry it with them. It will offer smart home contro …

Read the full story at The Verge.

Read the whole story
alvinashcraft
2 hours ago
reply
Pennsylvania, USA
Share this story
Delete

OpenAI hits 8 million Codex users — what developers need to know

1 Share
Sam Altman, OpenAI CEO

OpenAI launched GPT-5.6 last week and folded Codex into a unified ChatGPT desktop app. Since then, the company has been running flat out.

Early Tuesday, Tibo Sottiaux, engineering lead for Codex at OpenAI, mused on X that combined active users of Codex and ChatGPT Work might hit 8 million. The trajectory has been impressive, especially as the use of Anthropic Claude has grown so much in 2026. Codex had fewer than 1 million weekly active users in February but hit 5 million by early June. Then GPT-5.6 launched on July 9, and the numbers accelerated sharply — 6 million by July 12, 7 million roughly 24 hours later, and 8 million by Sunday.

That’s a growth curve most enterprise SaaS products never see in a lifetime, let alone in five months.

What broke at launch

OpenAI merged the standalone Codex app into the ChatGPT desktop app, launched ChatGPT Work as a new agentic mode for knowledge workers, and began sunsetting the Atlas browser — all in a single day.

According to the company, demand surged almost immediately, with traffic roughly doubling OpenAI’s previous peak within 48 hours. The sudden influx exposed several scaling issues. In a detailed thread published on July 12, Sottiaux outlined the team’s response, which included optimizing inference to increase capacity by about 10% per subscriber, reducing the context window from 372,000 to 272,000 tokens after the larger limit created unintended billing issues, rolling back experimental reasoning-effort settings (internally known as “juice” values), and patching overly aggressive multi-agent behavior at the highest reasoning levels.

OpenAI also temporarily removed the five-hour usage cap for Plus, Business, and Pro subscribers — a move that amounts to the most generous access the product has offered since launch.

Community reactions were split between those who read the context window rollback as a stealth downgrade and those who credited Sottiaux for explaining the operational trade-offs publicly. OpenAI CEO Sam Altman weighed in with what amounted to a positioning statement against competitors who, in his framing, treat users with contempt.

Competitors respond to the surge

Within hours of OpenAI announcing its 7 million user milestone, Anthropic extended its Claude Fable 5 promotional pricing through July 19 and bumped Claude Code’s weekly usage limits by 50%. Whether one caused the other is unknowable, but the overlap gives us plenty to speculate about.

Since Thursday, GPT-5.6 Sol has risen to second on Arena’s agent leaderboard after 7,800 real-world agentic sessions, and many developers now see OpenAI as the leader in AI coding again.

Cost per task matters

Developers judge systems by the cost of completing a task. Cognition, for example, reported that its Devin Fusion product, powered by Fable 5, can be cheaper per completed task than Anthropic’s pricier Opus 4.8 because better delegation reduces unnecessary work. In 81% of Fable-led runs, the lead model never edits code. The takeaway is that a more expensive model can still lower overall costs if it avoids wasted work.

In 81% of Fable-led runs, the lead model never edits code.

The harness is becoming the product

OpenAI’s decision to merge Codex, ChatGPT Work, and its built-in browser into a single desktop app reflects that shift. The same is true of its plugin architecture, which connects the app to Slack, Google Drive, SharePoint, CRMs, and calendars. OpenAI is turning it into a workspace that sits atop the tools people already use.

Anthropic has moved in a similar direction with Claude Cowork, which developed after the company saw users already using Claude Code for far more than software development.

Usage caps remain the bottleneck

Right now, the problem remains the usage cap. Even with the five-hour limit lifted, Codex and ChatGPT Work are forced to share a single weekly pool. If you run a heavy Sol Ultra session with multi-agent orchestration, you’ll burn through that allowance incredibly fast. (Sottiaux is aware of the headache and says a fix is in the works).

In the broader race, OpenAI has the sheer gravity of 900 million weekly users and killer benchmark scores. Anthropic still holds a massive amount of developer goodwill thanks to premium code quality and enterprise-friendly pricing. And for the DIY crowd, open-source stacks running GLM 5.2 or Kimi K2.7 look better than ever if you want to trade a little speed for data control. Coding agents and knowledge work are multiplying fast, and we haven’t even hit the weekend yet.

Coding agents for coding and knowledge work are multiplying fast, and we haven’t even hit the weekend yet.

The post OpenAI hits 8 million Codex users — what developers need to know appeared first on The New Stack.

Read the whole story
alvinashcraft
2 hours ago
reply
Pennsylvania, USA
Share this story
Delete

Package Status

1 Share

Every package has a set of status flags describing its current health and availability. These can be queried via the Package.Status property.

A package may report more than one status value at a time if multiple conditions apply.

Package Status Groups

The various states fall into three groups:

  • NeedsRemediation
    • DependencyIssue
    • LicenseIssue
    • Modified
    • Tampered
  • NotAvailable
    • DataOffline
    • Disabled
    • PackageOffline
  • Servicing
    • DeploymentInProgress

NeedsRemediation

Status values in the NeedsRemediation group indicate that the package is in a bad or broken state and must be repaired before it can be used.

  • Tampered indicates that the package contents have been modified in a manner consistent with malware. Anti-malware products typically set this status.
  • Modified indicates that the package contents have changed for reasons other than malware (for example disk corruption or unintended administrative modification).
  • DependencyIssue indicates that the package itself is intact, but one or more of its dependencies are unavailable or in a broken state. For example, if a Framework package is marked Tampered, any Main packages depending upon that Framework will report DependencyIssue.

NotAvailable

Status values in the NotAvailable group indicate that Windows has the package installed, but it cannot be used at this time.

  • PackageOffline indicates that the package’s install location resides on removable media that is no longer present.
  • DataOffline indicates that the user’s ApplicationData for the package resides on removable media that is no longer present.
  • Disabled indicates that the package has been explicitly disabled and should not be used. Administrators may use this to block access to a package, and complex installers may set this to temporarily disable a package during servicing operations.

Servicing

Status values in the Servicing group indicate that the package is currently undergoing a deployment operation, such as servicing, repair, or update.

Checking Package Status

Windows checks a package’s status before using it. For example, when activating an application, Windows verifies the package’s status before activation and blocks activation if the package is not usable.

The PackageStatus.VerifyIsOK() method returns false if one or more status flags are preventing usage. Individual properties can be queried to determine the specific reason(s) why the package cannot be used at this time.


Get-AppxPackage surfaces this information via its Status output property, for example:

PowerShellPS C:\> Get-AppxPackage *calc*

Name   : Microsoft.WindowsCalculator
...
Status : Ok

If the status is not Ok, PowerShell repors one or more blocking conditions instead.

The post Package Status appeared first on Inside MSIX.

Read the whole story
alvinashcraft
2 hours ago
reply
Pennsylvania, USA
Share this story
Delete
Next Page of Stories