# US 10,120,655 B2 · Seamless high performance interoperability between different type graphs that share a garbage collector

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 10,120,655 B2
- Document ID: US10120655B2
- Status: Granted
- Kind: B2
- Application number: 15/172,184
- Filed: 2016-06-03
- Published: 2017-12-07
- Granted: 2018-11-06
- Earliest claimed: 2016-06-03
- Assignees: Microsoft Technology Licensing, LLC
- Applicants: Microsoft Technology Licensing, LLC
- Inventors: David C. Wrighton; Scott D. Mosier; Patrick H. Dussud
- Web page: https://patentgrep.com/patent/US10120655B2

## CPC

- G06F 8/315: {Object-oriented languages}
- G06F 9/5022: {Mechanisms to release resources}
- G06F 12/0269: {Incremental or concurrent garbage collection, e.g. in real-time systems (G06F12/0261 takes precedence)}
- G06F 2212/1044: Space efficiency improvement
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

Multiple different type hierarchies can communicate in a high performance and seamless manner by sharing a GC and interface dispatch logic. A runtime environment can support multiple independent type hierarchies, each type hierarchy defined by the module which defines the root of a type graph and some other helper functionality. Code that uses the dispatch logic has to follow certain rules in order to maintain GC and type safety. Different types in disjoint type graphs can behave as if they were one type for cross type graph communication purposes.

## Claims

### Claim 1

A method comprising:
receiving by a processor of a computing device a call from a first function in a first module, the first module associated with a first type graph and defining a first type-equivalent interface;
making a static cross type space function call from the first function in the first module to a second module, the second module associated with a second type graph and defining a second type-equivalent interface, the first type graph and the second type graph are disjoint;
allocating by the second module an object of a type defined in the second type graph, the object implementing the second type-equivalent interface, wherein the first type-equivalent interface and the second type-equivalent interface have a same unique identifier;
returning the object to the first function, by making a static function call from the second module to the first module; and
making an interface call on the object, from the first module using the first type-equivalent interface, wherein the first type-equivalent interface call received by the object executes as if a call were made on the second type-equivalent interface.

### Claim 2 (depends on 1)

The method of claim 1, wherein:
the first module is an application runtime environment.

### Claim 3 (depends on 1)

The method of claim 1, wherein:
the second module is a high-level runtime environment.

### Claim 4 (depends on 1)

The method of claim 1, wherein:
the second module is a low-level runtime environment.

### Claim 5 (depends on 1)

The method of claim 1, wherein the first module defines the root of a type graph for a first type space and the second module defines the root of a type graph for the second type graph.

### Claim 6 (depends on 1)

The method of claim 1, wherein the first type-equivalent interface and the second type-equivalent interface share an identical memory layout.

### Claim 7 (depends on 1)

The method of claim 1, wherein the first type graph and the second type graph share a garbage collector.

### Claim 8 (depends on 1)

The method of claim 1, wherein a garbage collector manages lifetime of objects associated with the first type graph and the second type graph.

### Claim 9 (depends on 1)

The method of claim 1,
wherein the first type graph is associated with a first type space and the second type graph is associated with a second type space, and
wherein the first type space and the second type space are independent and share a same garbage collected heap.

### Claim 10 (depends on 1)

The method of claim 1, wherein the same unique identifier is an identical name.

### Claim 11

A system, comprising:
at least one processor and a memory;
wherein the at least one processor is configured to:
make a static cross type space function call from a first function in a first module to a second module, the second module associated with a second type graph and defining a second type-equivalent interface, the first module associated with a first type graph and defining a first type-equivalent interface, wherein the first type graph and the second type graph are disjoint;
allocate an object of a type defined in the second type graph, the object implementing the second type-equivalent interface, wherein the first type-equivalent interface and the second type-equivalent interface share a unique identifier;
return the object to the first function, by making a static function call from the second module to the first module; and
make an interface call on the object, from the first module using the first type-equivalent interface, wherein the first type-equivalent interface call received by the object executes as if a call were made on the second type-equivalent interface.

### Claim 12 (depends on 11)

The system of claim 11, further comprising: a runtime environment associated with the first type graph, the runtime environment supports at least one of a plurality of independent type hierarchies, the at least one independent type hierarchy defined by a module which defines a root of a type graph associated with the at least one independent type hierarchy.

### Claim 13 (depends on 11)

The system of claim 11, further comprising:
an application execution environment associated with the second type graph, wherein a type hierarchy of the second type graph is defined by a module which defines a root of the second type graph.

### Claim 14 (depends on 11)

The system of claim 11, wherein the first module and the second module share a common garbage collector.

### Claim 15 (depends on 11)

The system of claim 11, wherein the first type-equivalent interface and the second type-equivalent interface share a common memory layout.

### Claim 16 (depends on 11)

The system of claim 11, wherein the first type graph and the second type graph share a garage collector.

### Claim 17 (depends on 11)

The system of claim 11, wherein the unique identifier is an identical name.

### Claim 18 (depends on 11)

The system of claim 11, wherein the first type graph is associated with a first type space and the second type graph is associated with a second type space, and
wherein the first type space and the second type space are independent and share a common garbage collected heap.
