IP Library › Granted Patent US 10,860,338
Granted Patent B2
US 10,860,338 · App. 16/515,111 · Granted Dec 8, 2020

Type-constrained operations for plug-in types

Inventors: John Robert Rose (San Jose, CA); Brian Goetz (Williston, VT)
Assignee: Oracle International Corporation
G06F9/44526G06F8/437G06F9/4416G06F9/547
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 10,860,338
App. No.
16/515,111
Filed
Jul 18, 2019
Granted
Dec 8, 2020
Kind
B2
Examiner
VO, TED T
Art Unit
2191
USPC
717/124
Abstract

Techniques for performing type-constrained operations for plug-in types are disclosed. A runtime environment encounters a request to perform a type-constrained operation that requires evaluating a type constraint associated with a particular plug-in type. The runtime environment lacks sufficient native instructions to evaluate type constraints associated with plug-in types. The runtime environment accesses a plug-in type framework to obtain a particular type descriptor instance associated with the particular plug-in type. The plug-in type framework is designated, prior to encountering any request to perform the type-constrained operation, for obtaining type descriptor instances which define constraints on plug-in types, to an extent that any such constraints exist. The particular type descriptor instance defines a particular type constraint that does not match any single built-in type. The runtime environment performs the type-constrained operation, which comprises using the particular type descriptor instance to evaluate the particular type constraint associated with the particular plug-in type.

Claims (62)

1. A non-transitory computer readable medium comprising instructions which, when executed by one or more hardware processors, cause performance of operations comprising:

encountering, by a runtime environment, a request to perform a type-constrained operation that requires evaluating a type constraint associated with a particular plug-in type,

wherein the runtime environment comprises native instructions capable of evaluating type constraints associated with a system of built-in types supported by the runtime environment, and

wherein the runtime environment lacks sufficient native instructions to evaluate type constraints associated with plug-in types defined outside of the system of built-in types;

accessing, by the runtime environment, a plug-in type framework to obtain a particular type descriptor instance associated with the particular plug-in type,

wherein the plug-in type framework is designated, prior to encountering any request to perform the type-constrained operation, to obtain type descriptor instances for the runtime environment,

wherein the type descriptor instances define, to the runtime environment, constraints on plug-in types to an extent that any such constraints exist, and

wherein the particular type descriptor instance defines a particular type constraint that does not match any single built-in type in the system of built-in types; and

performing, by the runtime environment, the type-constrained operation, wherein performing the type-constrained operation comprises using the particular type descriptor instance to evaluate the particular type constraint associated with the particular plug-in type.

2. The medium of claim 1 , wherein the plug-in type framework is designated natively, upon initialization of the runtime environment.

3. The medium of claim 1 , wherein the particular type constraint is a wildcard constraint that is broader than any single built-in type.

4. The medium of claim 1 , wherein the particular type constraint is a combination constraint that is constrained by two or more built-in types.

5. The medium of claim 1 , wherein the plug-in framework comprises an application programming interface (API) that is used by one or more sets of plug-in code to implement operations for evaluating type constraints associated with one or more plug-in types.

6. The medium of claim 1 , the operations further comprising:

validating a use of the plug-in type, based at least in part on a symbolic name associated with the plug-in type, without loading the plug-in type.

7. The medium of claim 1 , wherein the type descriptor instance is a metaobject associated with the particular plug-in type, wherein the particular plug-in type corresponds to an overlay of a built-in type in the system of built-in types without modifying or extending a type hierarchy associated with the built-in type.

8. The medium of claim 7 , wherein the operation of the type descriptor instance comprises calling one or more operations of the built-in type.

9. The medium of claim 1 , wherein accessing the plug-in type framework to obtain the type descriptor instance comprises:

obtaining a type descriptor string associated with the particular plug-in type;

calling, using at least part of the type descriptor string as an argument, a bootstrap method associated with the particular plug-in type; and

responsive to calling the bootstrap method, receiving the type descriptor instance.

10. The medium of claim 9 , wherein the bootstrap method is capable of generating a plurality of type descriptor instances corresponding, respectively, to a plurality of plug-in types.

11. The medium of claim 9 , wherein the type descriptor string comprises one or more grammar productions that extend a base grammar, wherein the base grammar is sufficient to represent type descriptor strings for the system of built-in types.

12. The medium of claim 9 , the operations further comprising:

verifying type safety of code, based at least in part on the type descriptor string in raw symbolic form without evaluating the bootstrap method.

13. The medium of claim 12 ,

wherein a part of the type descriptor string specifies a built-in type, selected from the system of built-in types, on which a particular set of operations is valid,

wherein the type descriptor string as a whole specifies the particular plug-in type that, when loaded, supplies one or more constraints with respect to the particular set of operations, and

wherein verifying type safety of the code is performed without evaluating the one or more constraints.

14. The medium of claim 1 , wherein the type-constrained operation comprises one or more of:

determining whether an object can be cast as the particular plug-in type,

determining whether an object is an instance of the particular plug-in type,

casting an object as the particular plug-in type,

generating an array of objects of the particular plug-in type, and

obtaining a handle to a method of the particular plug-in type.

15. The medium of claim 1 , wherein the plug-in type represents a function that produces additional plug-in types, combined with an array of objects acceptable to the function.

16. The medium of claim 1 , wherein the plug-in type is a reference type or a value type.

17. The medium of claim 1 , the operations further comprising:

receiving, by the runtime environment, a runtime error responsive to calling the one or more operations of the type descriptor instance, wherein the runtime error indicates a failure of the type constraint associated with the particular plug-in type; and

handling, by the runtime environment, the runtime error.

18. The medium of claim 1 , wherein the type descriptor instance implements type-specific operations only for the particular plug-in type.

19. A system comprising:

at least one device including a hardware processor;

the system being configured to perform operations comprising:

encountering, by a runtime environment, a request to perform a type-constrained operation that requires evaluating a type constraint associated with a particular plug-in type,

wherein the runtime environment comprises native instructions capable of evaluating type constraints associated with a system of built-in types supported by the runtime environment, and

wherein the runtime environment lacks sufficient native instructions to evaluate type constraints associated with plug-in types defined outside of the system of built-in types;

accessing, by the runtime environment, a plug-in type framework to obtain a particular type descriptor instance associated with the particular plug-in type,

wherein the plug-in type framework is designated, prior to encountering any request to perform the type-constrained operation, to obtain type descriptor instances for the runtime environment,

wherein the type descriptor instances define, to the runtime environment, constraints on plug-in types to an extent that any such constraints exist, and

wherein the particular type descriptor instance defines a particular type constraint that does not match any single built-in type in the system of built-in types; and

performing, by the runtime environment, the type-constrained operation, wherein performing the type-constrained operation comprises using the particular type descriptor instance to evaluate the particular type constraint associated with the particular plug-in type.

20. A method comprising:

encountering, by a runtime environment, a request to perform a type-constrained operation that requires evaluating a type constraint associated with a particular plug-in type,

wherein the runtime environment comprises native instructions capable of evaluating type constraints associated with a system of built-in types supported by the runtime environment, and

wherein the runtime environment lacks sufficient native instructions to evaluate type constraints associated with plug-in types defined outside of the system of built-in types;

accessing, by the runtime environment, a plug-in type framework to obtain a particular type descriptor instance associated with the particular plug-in type,

wherein the plug-in type framework is designated, prior to encountering any request to perform the type-constrained operation, to obtain type descriptor instances for the runtime environment,

wherein the type descriptor instances define, to the runtime environment, constraints on plug-in types to an extent that any such constraints exist, and

wherein the particular type descriptor instance defines a particular type constraint that does not match any single built-in type in the system of built-in types; and

performing, by the runtime environment, the type-constrained operation, wherein performing the type-constrained operation comprises using the particular type descriptor instance to evaluate the particular type constraint associated with the particular plug-in type,

wherein the method is performed by at least one device comprising a hardware processor.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jul 19, 2019
From: ROSE, JOHN ROBERT; GOETZ, BRIAN
To: ORACLE INTERNATIONAL CORPORATION
Reel/Frame 049800/0820 →
Continuity (3)
Provisional Application 62699810 · Jul 18, 2018
Provisional Application 62801552 · Feb 5, 2019
Related Publication 20200026530A1 · Jan 23, 2020