Statically Extensible Interface Types for Dynamic Plugin Type Checking

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Static type systems face challenges in extending component capabilities at compile time, as they struggle to maintain a consistent view of types that evolve at runtime, limiting the ability for types to evolve post-distribution and constraining program development tooling.

Innovation Solution

The introduction of statically extensible interface types allows for the extension of static types using additional declarations during compilation, merging initial declarations with static type extensions from multiple sources to create an extended type, enabling static type checking and supporting dynamic plug-ins while allowing for error detection and handling.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Reliability

If static type systems are used to ensure type safety at compile time, then type checking reliability is improved, but the ability to extend types at runtime is lost

Engineering Contradiction:
Improvetype checking reliabilityVSAvoidtype extensibility
Core Design Contradiction:
ReliabilityVSAdaptability or versatility

Solution Approach 1:

The patent implements static type extensions that allow type definitions to be extended at compile time through extension declarations. This enables the type system to adapt and grow new capabilities while maintaining static type checking, resolving the contradiction between type safety and extensibility.

Inventive Principle:
Principle #15Dynamics

Solution Approach 2:

The patent performs preliminary merging of type declarations and extensions during compilation. By pre-computing the merged type information before runtime, the system enables runtime type extensibility while maintaining compile-time type safety through static checking of the extended types.

Inventive Principle:
Principle #10Preliminary action

2Adaptability or versatility

If types are extended using multiple declarations from different sources, then adaptability is improved, but complexity of merging declarations increases

Engineering Contradiction:
Improvetype extension capabilityVSAvoiddeclaration merging complexity
Core Design Contradiction:
Adaptability or versatilityVSDevice complexity

Solution Approach 1:

The patent introduces an intermediary merging process that combines type declarations from multiple independent sources. This intermediary step reconciles overlapping and conflicting declarations, managing the complexity of merging while enabling adaptable type extensions from various sources.

Inventive Principle:
Principle #24Intermediary (Mediator)

Solution Approach 2:

The patent segments type declarations into separate extension units that can be independently defined and then merged. This segmentation allows the complex merging process to be broken down into manageable pieces, reducing overall complexity while maintaining adaptability.

Inventive Principle:
Principle #1Segmentation

3Reliability

If static type checking is performed on extended types, then type safety is improved, but compilation time increases

Engineering Contradiction:
Improvetype safetyVSAvoidcompilation time
Core Design Contradiction:
ReliabilityVSLoss of time

Solution Approach 1:

The patent performs preliminary merging of type declarations during compilation, creating a consolidated view of extended types before type checking. This preliminary action organizes the type information in advance, making the subsequent static type checking more efficient despite the complexity of extended types.

Inventive Principle:
Principle #10Preliminary action

Data Source

PatentUS9563412B2Statically extensible types
Publication Date: 2017.02.07 MICROSOFT TECHNOLOGY LICENSING LLC
  • US9563412B2 patent drawing
  • US9563412B2 patent drawing
  • US9563412B2 patent drawing

AI summary

Statically extensible types allow a static type system to model the behavior of dynamic object model extension in dynamic runtime systems. Static types that model dynamically extended types can be extended using additional declarations in the same compilation. Declarations for a particular type can come from multiple independent sources which can have been defined at multiple points in time. Extension declarations can use the same syntax as the initial type declaration. Hence presence of one or more declarations for the same type in a compilation can indicate that the type has been extended. These features allow static type checking of dynamic plug-ins to be supported using statically extensible types. Declarations and extension declarations for a type can be merged together to create an extended type that enables different processing paths and dependencies.