Compiler Cache Resilience via Semantic Import Graphs

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Traditional compilation caches are sensitive to changes in file names and paths, leading to unnecessary recompilation even when the content of source code files remains unchanged, and are also affected by changes in the dependency search path, which can invalidate the cache during system installation.

Innovation Solution

The system uses the semantic structure of source code file dependencies represented by an import graph to generate cache keys, making the compilation cache resilient to changes in file names and paths, and ignoring changes in the dependency search path unless they affect the semantic structure, allowing cached results to be reused.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Measurement precision

If traditional compilation cache uses file paths as cache keys, then cache lookup accuracy is improved, but cache resilience to file renaming/moving deteriorates

Engineering Contradiction:
Improvecache lookup accuracyVSAvoidcache resilience to file renaming
Core Design Contradiction:
Measurement precisionVSAdaptability or versatility

Solution Approach 1:

The patent extracts file path information from the cache key generation process and replaces it with import graph-based identifiers. By taking out the sensitive file path component and substituting it with semantic structure-based identifiers, the system maintains cache lookup accuracy while becoming resilient to file renaming and moving operations.

Inventive Principle:
Principle #2Taking out (Extraction)

Solution Approach 2:

The patent changes the parameter used for cache key generation from file paths (which are sensitive to renaming) to import graph identifiers (which are based on semantic structure). This parameter change allows the cache to remain valid even when file names or locations change, as long as the import relationships remain the same.

Inventive Principle:
Principle #35Parameter changes

2Reliability

If compilation cache invalidates on dependency search path changes, then cache correctness is improved, but compilation efficiency during installation deteriorates

Engineering Contradiction:
Improvecache correctnessVSAvoidcompilation efficiency during installation
Core Design Contradiction:
ReliabilityVSProductivity

Solution Approach 1:

The patent extracts dependency search path information from the cache invalidation criteria. By removing the search path from the set of factors that trigger cache invalidation, the system maintains cache correctness for semantic changes while avoiding unnecessary invalidation during installation when search paths change but import graphs remain unchanged.

Inventive Principle:
Principle #2Taking out (Extraction)

Solution Approach 2:

Instead of invalidating the cache when search paths change (the traditional approach), the patent inverts the logic by maintaining the cache unless the semantic structure (import graph) actually changes. This inversion allows the cache to survive installation processes while still ensuring correctness when source code semantics change.

Inventive Principle:
Principle #13The other way round (Inversion)

3Measurement precision

If compilation cache uses detailed file information as cache keys, then cache hit accuracy is improved, but sensitivity to unnecessary changes deteriorates

Engineering Contradiction:
Improvecache hit accuracyVSAvoidsensitivity to filename changes
Core Design Contradiction:
Measurement precisionVSObject-affected harmful factors

Solution Approach 1:

The patent extracts filename and file path information from the cache key generation process, retaining only the semantic structure (import graph) and file content. This extraction eliminates sensitivity to filename changes while preserving the ability to detect actual source code modifications through content hashing.

Inventive Principle:
Principle #2Taking out (Extraction)

Data Source

PatentUS10613843B2Compiler caching based on semantic structure
Publication Date: 2020.04.07 MICROSOFT TECHNOLOGY LICENSING LLC
  • US10613843B2 patent drawing
  • US10613843B2 patent drawing
  • US10613843B2 patent drawing

AI summary

Methods, systems, and apparatus, including computer programs encoded on computer storage media, for how a build system uses import graphs to maintain a current compilation cache and determine when compilation targets should be recompiled. A request is received to compile a compilation target. A plurality of files are identified that are used to build the compilation target. An import graph that represents import dependencies among the files used the build the compilation target is generated for the compilation target. The import graph is traversed to assign a respective identifier to each node in the import graph. A cache key is generated from data representing import relationships represented by the import graph and data representing contents of files used to build the compilation target. If the cache key is invalid or does not exist, compiling the compilation target.