Deferring Software Component Loading via Metadata Annotations

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Existing software development technologies are limited in that nearly all implementation choices are fixed at compile time, preventing optimization based on user interaction or platform-specific information available at load time.

Innovation Solution

The method involves annotating software components with metadata in the source code, which is used to select and load specific components during load time based on defined criteria, such as user input or platform attributes, using custom class loaders and virtual machines.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Productivity

If implementation choices are fixed at compile time, then software can be compiled and loaded efficiently, but the software cannot be optimized based on user interaction or platform-specific information available at load time

Engineering Contradiction:
Improvesoftware loading efficiencyVSAvoidability to optimize based on runtime information
Core Design Contradiction:
ProductivityVSAdaptability or versatility

Solution Approach 1:

The patent applies dynamics by making the software component selection process adaptive rather than static. Implementation choices are deferred from compile time to load time, allowing the system to dynamically select which software components to load based on runtime conditions such as user interaction patterns and platform-specific information. This dynamic approach resolves the contradiction by enabling both efficient loading (through selective component loading) and adaptability (through runtime-based optimization decisions).

Inventive Principle:
Principle #15Dynamics

Solution Approach 2:

The patent uses preliminary action by preparing multiple implementation versions of software components during the compilation phase, annotating them with metadata that describes their characteristics and suitability for different platforms or usage scenarios. This preliminary preparation enables the load-time selection mechanism to efficiently choose the appropriate implementation without requiring full compilation of all possible versions, thus maintaining productivity while enabling adaptability.

Inventive Principle:
Principle #10Preliminary action

2Speed

If all software components are loaded at compile time, then the software is ready to execute immediately, but unnecessary components consume memory and processing resources

Engineering Contradiction:
Improvesoftware execution readinessVSAvoidmemory and processing resources consumed
Core Design Contradiction:
SpeedVSQuantity of substance

Solution Approach 1:

The patent applies the extraction principle by separating software components into different groups based on their likelihood of being needed. Highly probable components are loaded at compile time for immediate execution readiness, while less certain components are deferred to load time when runtime information becomes available. This extraction approach resolves the contradiction by loading only the necessary subset of components at each phase, optimizing both execution speed and resource consumption.

Inventive Principle:
Principle #2Taking out (Extraction)

Solution Approach 2:

The patent segments the software into multiple implementation versions or variants of components, each optimized for different platforms or usage scenarios. During load time, the system evaluates runtime conditions and selects only the relevant segments to load into memory. This segmentation enables the system to maintain execution readiness for critical paths while avoiding the resource overhead of loading all possible component variants simultaneously.

Inventive Principle:
Principle #1Segmentation

3Adaptability or versatility

If multiple implementation versions of software components are maintained, then the software can be optimized for different platforms, but the complexity of managing these versions increases

Engineering Contradiction:
Improveplatform-specific optimizationVSAvoidcomplexity of managing multiple versions
Core Design Contradiction:
Adaptability or versatilityVSDevice complexity

Solution Approach 1:

The patent creates a universal load-time selection mechanism that handles multiple implementation versions through a single unified process. The class loader evaluates platform-specific information and user interaction data using a common set of criteria to determine which component version to load. This universal approach reduces complexity by providing a single management interface for handling multiple versions, rather than requiring separate management systems for each platform or component type.

Inventive Principle:
Principle #6Universality (Multi-functionality)

Solution Approach 2:

The patent introduces metadata annotations as an intermediary layer between the multiple implementation versions and the loading mechanism. These annotations contain structured information about component characteristics, platform requirements, and selection criteria. The load-time selection process uses this metadata as an intermediary to automatically make informed decisions about which version to load, eliminating the need for complex manual management logic and reducing overall system complexity.

Inventive Principle:
Principle #24Intermediary (Mediator)

Data Source

PatentUS8843920B2Systems and methods for deferring software implementation decisions until load time
Publication Date: 2014.09.23 ADVANCED MICRO DEVICES INC
  • US8843920B2 patent drawing
  • US8843920B2 patent drawing
  • US8843920B2 patent drawing

AI summary

A software development method defers certain implementation details until load time. A programmer first annotates, in source code, a selected set of software components using metadata (such as Java-style annotations) that define one or more criteria—e.g., criteria relating to the state of the target hardware platform, the capabilities of the platform, or arbitrary user input. The annotated source code files are then compiled to create one or more intermediate code files (e.g., Java bytecode files). During load time of the resulting intermediate code files, one or more of the selected set of software components are loaded from the intermediate code files based on the criteria.