Patents by Inventor Brian Goetz

Brian Goetz has filed for patents to protect the following inventions. This listing includes patent applications that are pending as well as patents that have already been granted by the United States Patent and Trademark Office (USPTO).

  • Patent number: 9519468
    Abstract: Modular co-versioning may involve the creation of multi-version libraries that may include multiple versions of a class. A multi-version library may include a base version and one or more other versions each of which may correspond to a particular, respective version of a software development kit, runtime environment or software platform, according to various embodiments. At runtime, a multi-version library may be searched in order to load a version of a class that corresponds to the version of the currently executing runtime environment. If the multi-version library does not include a version of the class corresponding to the currently executing version of the environment/platform, a version of the class corresponding to a previous version of the environment may be loaded if found in the multi-version library. Alternatively, if no other version of the class is found, a base version of the class may be loaded from the multi-version library.
    Type: Grant
    Filed: February 13, 2015
    Date of Patent: December 13, 2016
    Assignee: Oracle International Corporation
    Inventors: Brian Goetz, Paul D. Sandoz
  • Publication number: 20160342397
    Abstract: The disclosed embodiments provide a system that facilitates the development and compilation of a software program. During operation, the system obtains a set of compilation units to be used in the software program and a version order associated with a programming language of the compilation units. Next, for each compilation unit from the set of compilation units, the system uses the version order to select a version of the programming language that is compatible with the compilation unit. The system then uses the version to compile the compilation unit.
    Type: Application
    Filed: July 29, 2016
    Publication date: November 24, 2016
    Applicant: Oracle International Corporation
    Inventors: Brian Goetz, Alexander R. Buckley
  • Patent number: 9489184
    Abstract: The disclosed embodiments provide a system that facilitates the development and compilation of a software program. During operation, the system obtains a set of compilation units to be used in the software program and a version order associated with a programming language of the compilation units. Next, for each compilation unit from the set of compilation units, the system uses the version order to select a version of the programming language that is compatible with the compilation unit. The system then uses the version to compile the compilation unit.
    Type: Grant
    Filed: December 30, 2011
    Date of Patent: November 8, 2016
    Assignee: ORACLE INTERNATIONAL CORPORATION
    Inventors: Brian Goetz, Alexander R. Buckley
  • Patent number: 9483242
    Abstract: Wholesale replacement of specialized classes may involve the ability to replace the auto specialization of a generic class may not be used at all and instead, a completely different, hand-written, class when the class is specialized for particular type parameterizations, according to some embodiments. The replacement class may have the same interface as the generic or auto specialized version, but it may have a completely different representation and/or implementation. A runtime environment may load the alternate version of the class, based on information identifying the alternate version, whenever the particular specialization is instantiated. The runtime may not have to load the generic or auto specialized version of the class when using the alternate version of the class.
    Type: Grant
    Filed: April 21, 2015
    Date of Patent: November 1, 2016
    Assignee: Oracle International Corporation
    Inventors: Brian Goetz, John R. Rose, Paul Govereau
  • Patent number: 9477450
    Abstract: While a runtime specializer may always be able to generate an automated specialized version of a generic class, in some cases an alternate form of user control over specialization may allow the use of automated specialization while also adding (or overriding) specialization-specific method implementations. In general, the set of members of a generic class may not change when the class is specialized. In other words, the same members may exist in the auto-specialized version as in the generic version. However, manual refinement of specialized classes may allow a developer to hand specialize a particular (possibly a better) representation and/or implementation of one or more methods of the specialized class.
    Type: Grant
    Filed: April 21, 2015
    Date of Patent: October 25, 2016
    Assignee: Oracle International Corporation
    Inventors: Brian Goetz, John R. Rose, Alexander R. Buckley
  • Publication number: 20160299831
    Abstract: A code analysis tool identifies a first and a second proposed code transformation (PCT) for respective expressions within a refactoring candidate section of source code, such that at least one PCT would result in an exercise of a target typing mechanism of the programming language being used. The determination of the data type of at least one of the expressions depends on the determination of the data type of the other. The tool generates a plurality of PCT combinations for the refactoring candidate section. In response to determining that a particular PCT combination meets acceptance criteria, a refactoring option which includes that PCT combination is recommended.
    Type: Application
    Filed: April 13, 2015
    Publication date: October 13, 2016
    Inventors: Maurizio Cimadamore, Brian Goetz
  • Patent number: 9465627
    Abstract: The disclosed embodiments provide a system that facilitates the compilation and execution of a software program. During operation, the system obtains a closure from source code for the software program. Next, the system characterizes a type of the closure based on a mutability of one or more variables captured by the closure. Finally, the system encodes the type into a compiled form of the closure to facilitate subsequent execution of the closure in a multithreaded environment.
    Type: Grant
    Filed: February 15, 2011
    Date of Patent: October 11, 2016
    Assignee: ORACLE INTERNATIONAL CORPORATION
    Inventors: Brian Goetz, Alexander R. Buckley
  • Publication number: 20160239279
    Abstract: Modular co-versioning may involve the creation of multi-version libraries that may include multiple versions of a class. A multi-version library may include a base version and one or more other versions each of which may correspond to a particular, respective version of a software development kit, runtime environment or software platform, according to various embodiments. At runtime, a multi-version library may be searched in order to load a version of a class that corresponds to the version of the currently executing runtime environment. If the multi-version library does not include a version of the class corresponding to the currently executing version of the environment/platform, a version of the class corresponding to a previous version of the environment may be loaded if found in the multi-version library. Alternatively, if no other version of the class is found, a base version of the class may be loaded from the multi-version library.
    Type: Application
    Filed: February 13, 2015
    Publication date: August 18, 2016
    Inventors: Brian Goetz, Paul D. Sandoz
  • Publication number: 20160202961
    Abstract: Generic method specialization represents the ability to specialize generic methods over various types. When implementing generic method specialization an annotated class file may include a generic method declaration that is annotated with specialization metadata indicating elements of the generic method to be adjusted during specialization. The annotated method may be usable directly as an erased method implementation (e.g., to load the method when instantiated with reference types) and may also be usable as a template for specialization. When a generic method is being prepared for execution, such as when it is first invoked during runtime, a specialization method generator function may be used to specialize the generic method based on the specialization metadata in the generic method declaration. The specialization method generator function may use the annotated generic method declaration as a template for specialization.
    Type: Application
    Filed: February 26, 2016
    Publication date: July 14, 2016
    Inventors: Brian Goetz, John R. Rose, Maurizio Cimadamore
  • Publication number: 20160011992
    Abstract: According to one technique, a virtual machine generates an object configured to provide secure access to memory through one or more memory fencing operations. Through the object, the virtual machine receives a call that indicates a memory location and specifies a particular memory fencing operation of the one or more memory fencing operations to perform with respect to the memory location. The virtual machine causes performance of the particular memory fencing operation with respect to the memory location.
    Type: Application
    Filed: April 7, 2015
    Publication date: January 14, 2016
    Inventors: PAUL SANDOZ, BRIAN GOETZ, JOHN ROBERT ROSE
  • Publication number: 20160011982
    Abstract: According to one technique, a virtual machine identifies a first instruction to create a variable handle instance, the first instruction including declaration information that identifies a type of receiver and a variable held by the receiver to which the variable handle instance is configured to provide access. If access to the variable is permissible, the virtual machine creates the variable handle instance comprising constrained functions configured to execute constrained operations on a memory location of the variable. The virtual machine identifies a second instruction that specifies a call to a particular constrained, wherein the second instruction specifies the receiver or is implicitly bound to the receiver. The virtual machine identifies a particular memory location where the instance of the variable is stored and performs the particular constrained function with respect to the particular memory location.
    Type: Application
    Filed: April 7, 2015
    Publication date: January 14, 2016
    Inventors: PAUL SANDOZ, BRIAN GOETZ, JOHN ROBERT ROSE
  • Publication number: 20150363174
    Abstract: In an approach, a virtual machine identifies, within a set of instructions, an instruction to load a constant; identifies, based on the instruction to load the constant, a first entry in a data structure that identifies a particular constant type of the one or more constant types, wherein the first entry specifies at least constant data and a first set of instructions for assembling a value or partial value from the constant data; executes the first set of instructions to assemble the value or the partial value from the constant data; and stores a particular value or a reference to the particular value onto a run-time data structure used to pass values or references between sets of instructions executing in a run-time environment, wherein the particular value is based on the value or the particular value assembled from the constant data.
    Type: Application
    Filed: May 29, 2015
    Publication date: December 17, 2015
    Inventors: JOHN ROBERT ROSE, BRIAN GOETZ
  • Patent number: 9195442
    Abstract: A system and method can support context-dependent expression compilation in a programming language environment. A compiler in the programming language environment can provide one or more context objects that operate to compile various context-dependent expressions in different programming contexts. Then, the compiler can use a said context object to derive a target type associated with a context-dependent expression, and use the context object to perform compatibility check for the context-dependent expression in the programming language environment.
    Type: Grant
    Filed: February 27, 2013
    Date of Patent: November 24, 2015
    Assignee: ORACLE INTERNATIONAL CORPORATION
    Inventors: Brian Goetz, Daniel Smith, Maurizio Cimadamore
  • Publication number: 20150331681
    Abstract: In one approach, a method comprises receiving one or more higher-level instructions specifying to assign a value of a particular value type to a particular container of a plurality of containers, wherein the plurality of containers represent a data structure for maintaining one or more variables during execution of a block of code, wherein at least two containers of the plurality of containers are different sizes; generating one or more lower-level instructions that assign the value to the particular container based on applying one or more assignment rules to the one or more higher-level instructions based on the particular value type and executing the one or more lower-level instructions.
    Type: Application
    Filed: April 29, 2015
    Publication date: November 19, 2015
    Inventors: JOHN ROBERT ROSE, BRIAN GOETZ, GUY STEELE
  • Patent number: 9170825
    Abstract: The disclosed embodiments provide a system that facilitates the development and execution of a software program. During operation, the system obtains, from the software program, a method call associated with one or more interfaces containing a virtual extension method. Next, the system resolves the method call by obtaining a method implementation corresponding to the method call from at least one of an inheritance hierarchy associated with the method call and the virtual extension method.
    Type: Grant
    Filed: April 21, 2011
    Date of Patent: October 27, 2015
    Assignee: ORACLE INTERNATIONAL CORPORATION
    Inventors: Brian Goetz, Alexander R. Buckley
  • Publication number: 20150301837
    Abstract: Structural identification of dynamically generated, pattern-instantiation classes may be utilized using structural descriptions. Instead of describing classes only by name, and using that name to locate that class, a class may be referred to by a generator function and arguments to the generator function. A structural description may specify the generator function and the parameters. In addition, a structural description of a class may be used as a parameter to a generator function specified by another structural description. A structural description may be used similarly to a class name for virtually any situation in which a class name may be used. Classes may be compared using their structural descriptions. For example, two structural descriptions may be considered to be the same class if they specify the same generator function and parameters.
    Type: Application
    Filed: March 17, 2015
    Publication date: October 22, 2015
    Inventors: Brian Goetz, John R. Rose
  • Publication number: 20150301809
    Abstract: Wholesale replacement of specialized classes may involve the ability to replace the auto specialization of a generic class may not be used at all and instead, a completely different, hand-written, class when the class is specialized for particular type parameterizations, according to some embodiments. The replacement class may have the same interface as the generic or auto specialized version, but it may have a completely different representation and/or implementation. A runtime environment may load the alternate version of the class, based on information identifying the alternate version, whenever the particular specialization is instantiated. The runtime may not have to load the generic or auto specialized version of the class when using the alternate version of the class.
    Type: Application
    Filed: April 21, 2015
    Publication date: October 22, 2015
    Inventors: Brian Goetz, John R. Rose, Paul Govereau
  • Publication number: 20150301840
    Abstract: The loading or operation of a specialized class may trigger the specialization of other classes. A compiler may be configured to recognize dependency relationships between generic classes and to describe the classes in terms of the type variables of the triggering types (e.g., the types and/or type parameterizations) that trigger the specialization of classes based on the specialization of a first class. A compiler may include information, such as structural references, indicating dependency relationships between classes when generating class files. Thus, the class file may include information indicating that a class extends a class resulting from applying a specialization code generator to an argument. Loading a first class may trigger the loading of a second class described by a structural description such that a specializer (and/or class loader) may apply the structural description to generate and load the second class for the particular parameterization.
    Type: Application
    Filed: April 21, 2015
    Publication date: October 22, 2015
    Inventors: Brian Goetz, John R. Rose, Alexander R. Buckley
  • Publication number: 20150301807
    Abstract: Generic classes may have more than one specializable type parameter and it may be desirable to specialize one or more of the type variables while not specializing others. The result of partial specialization may be one or more additional generic classes that are further specializable on the remaining type parameters. A runtime specializer may partially specialize a generic class to produce a partially specialized class and may subsequently further specialize the partially specialized class to generate a fully specialized class. Thus, rather than performing the specialization of a generic class all at once, such as by specializing Map<K, V> into Map<int, int> or Map<long, int>, one type parameter may be partially specialized, such as resulting in Map<K, int>, and then at some later time the remaining type parameter(s) may be specialized, such as to generate Map<int, int> or Map<long, int>.
    Type: Application
    Filed: April 21, 2015
    Publication date: October 22, 2015
    Inventors: Brian Goetz, John R. Rose, Alexander R. Buckley
  • Publication number: 20150301825
    Abstract: The domain of genericity of an existing generic class may be expanded to include not just reference types, but also primitive and value types even though some members of the existing class do not support the expanded genericity. A subdivided version of the class may be created that includes a generic layer including abstract versions of class members and a reference-specific layer that including non-abstract versions of class members that are abstract in the generic layer. The subdivided version of the class may also include information that indicates to which layer a class member belongs. Problematic methods (e.g., methods that have built-in assumptions regarding the domain of genericity) may be moved into the second, reference-specific, layer, thereby retaining compatibility with classes that currently instantiate or reference those methods, while still allowing use within the expanded domain of genericity.
    Type: Application
    Filed: March 17, 2015
    Publication date: October 22, 2015
    Inventors: Brian Goetz, John R. Rose