US6981250B1
Expired / Lapsed
US
⏱️ 0.0 years remaining
System and methods for providing versioning of software components in a computer programming language
Assignee: Microsoft Technology Licensing LLC
•
Filing: 2001-07-05
•
Granted: 2005-12-27
•
Expires: 2021-07-05
Abstract
Abstract A system and methods for versioning software components in connection with a computer programming language are provided. In exemplary aspects, the versioning system makes use of intelligent defaults, provides a vehicle for unambiguous specification of developer intent and implements conflict resolution rules in connection with the versioning of software components. In another aspect, the versioning system bounds names at run-time, but does not bound offsets at compile-time.
Inventors
- 👤 Scott Wiltamuth
- 👤 Anders Hejlsberg
- 👤 Peter F. Sollich
- 👤 Bradley M. Abrams
Bibliographic Details
Application Number
—
Jurisdiction
US
Data Source
google_patents
Last Synchronized
2026-10-29 13:58
CPC Classifications
G; G06; G06F; G06F8/00; G06F8/70; G06F8/71; G06F9/00; G06F9/06; G06F9/44; G06F9/448; G06F9/4488; G06F9/449; Y; Y10; Y10S; Y10S707/00; Y10S707/99951; Y10S707/99952; Y10S707/99953; Y10S707/99954
Claims Analysis
Total Claims: 57
Claim 1
Independent Claim
136 words
A method for providing versioning support for at least one software component of an object-oriented programming language, the method operating on a computer and comprising: specifying programmer intent with regard to versioning of said at least one software component by assigning at least one keyword to said at least one software component, wherein said specifying of programmer intent includes providing a versioning-aware overload resolution method to locate a second method invoked by a first method invocation, wherein said versioning-aware overload resolution method includes: determining a type indicated by the first method invocation, checking un an inheritance chain until at least one applicable, accessible, non-override method declaration is found; performing overload resolution on a set of applicable, accessible, non-override methods declared for the type; and selecting the second method based on a performance of said overload resolution.
Claim 2
Independent Claim
136 words
A method for providing versioning support for at least one software component of an object-oriented programming language, the method operating on a computer and comprising: specifying programmer intent with regard to versioning of said at least one software component by assigning at least one keyword to said at least one software component, wherein said specifying of programmer intent includes providing a versioning-aware overload resolution method to locate a second method invoked by a first method invocation, wherein said versioning-aware overload resolution method includes: determining a type indicated by the first method invocation, checking un an inheritance chain until at least one applicable, accessible, non-override method declaration is found; performing overload resolution on a set of applicable, accessible, non-override methods declared for the type; and selecting the second method based on a performance of said overload resolution.
Claim 3
Dependent Claim
26 words
A method according to claim 1 , wherein said assigning said at least one keyword includes assigning at least one of virtual, new and override keywords.
Claim 4
Dependent Claim
39 words
A method according to claim 1 , wherein said assigning said at least one keyword to said at least one software component specifies programmer intent with regard to whether said at least one software component overrides another software component.
Claim 5
Dependent Claim
44 words
A method according to claim 1 , wherein said assigning said at least one keyword to said at least one software component specifies programmer intent with regard to whether said at least one software component is capable of being overridden by another software component.
Claim 6
Dependent Claim
39 words
A method according to claim 1 , wherein said assigning said at least one keyword to said at least one software component specifies programmer intent with regard to whether said at least one software component hides another software component.
Claim 7
Dependent Claim
48 words
A method according to claim 1 , wherein said at least one software component is at least one member of the object-oriented programming language and the object-oriented programming language is from one of the sources of origin identified by C#, FORTRAN, PASCAL, VISUAL BASIC, C, C++, and JAVA.
Claim 8
Dependent Claim
41 words
A method according to claim 1 , wherein said specifying of programmer intent includes assigning intelligent defaults to said at least one software component in the absence of assigning said at least one keyword to said at least one software component.
Claim 9
Dependent Claim
29 words
A method according to claim 7 , wherein when programmer intent is not fully specified, the compiler of the programming language produces a warning before assigning said intelligent defaults.
Claim 10
Dependent Claim
39 words
A method according to claim 7 , wherein said assigning of intelligent defaults includes assigning to said at least one software component the most limited form of accessibility, based upon a type of said at least one software component.
Claim 11
Dependent Claim
46 words
A method according to claim 7 , wherein by default, when said at least one software component is at least one method declaration with no accessibility modifiers appearing in the corresponding class, the at least one method declaration is defaulted to be private to that class.
Claim 12
Dependent Claim
21 words
A method according to claim 7 , wherein by default, said at least one software component is non-virtual, rather than virtual.
Claim 13
Dependent Claim
36 words
A method according to claim 1 , wherein for a virtual method invocation, said versioning-aware overload resolution method includes determining the second method based on a run-time type of an instance of the first method invocation.
Claim 14
Dependent Claim
36 words
A method according to claim 1 , wherein for a non-virtual method invocation, said versioning-aware overload resolution method includes determining the second method based on a compile-time type of a instance of the first method invocation.
Claim 15
Dependent Claim
24 words
A method according to claim 1 , wherein said versioning-aware overload resolution method includes bounding names at run-time, and not bounding offsets at compile-time.
Claim 16
Dependent Claim
41 words
A method according to claim 1 , wherein the overload resolution method prevents a base software component from breaking a functionality of a derived software component when versioning the base software component and such breaking is not intended by the programmer.
Claim 17
Dependent Claim
29 words
A method according to claim 1 , wherein said at least one software component is binary compatible with code utilizing other versions of said at least one software component.
Claim 18
Dependent Claim
29 words
A method according to claim 1 , wherein said at least one software component is source compatible with code utilizing other versions of said at least one software component.
Claim 19
Dependent Claim
17 words
A computer readable medium bearing computer executable instructions for carrying out the method of claim 1 .
Claim 20
Dependent Claim
16 words
A modulated data signal carrying computer executable instructions for performing the method of claim 1 .
Claim 21
Dependent Claim
13 words
A computing device comprising means for performing the method of claim 1 .
Claim 22
Dependent Claim
140 words
A computer readable storage medium having stored thereon a plurality of computer-executable modules written in au object-oriented programming language, the computer executable modules comprising: a versioning mechanism enabling a programmer to specify intent with regard to versioning of at least one software component by assigning at least one keyword to said at least one software component, wherein said specifying of programmer intent includes providing a versioning-aware overload resolution method to locate a second method invoked by a first method invocation, wherein said versioning-aware overload resolution method includes: determining a type indicated by the first method invocation, checking up an inheritance chain until at least one applicable, accessible, non-override method declaration is found; performing overload resolution on a set of applicable, accessible, non-override methods declared for the type; and selecting the second method based on a performance of said overload resolution.
Claim 23
Dependent Claim
140 words
A computer readable storage medium having stored thereon a plurality of computer-executable modules written in au object-oriented programming language, the computer executable modules comprising: a versioning mechanism enabling a programmer to specify intent with regard to versioning of at least one software component by assigning at least one keyword to said at least one software component, wherein said specifying of programmer intent includes providing a versioning-aware overload resolution method to locate a second method invoked by a first method invocation, wherein said versioning-aware overload resolution method includes: determining a type indicated by the first method invocation, checking up an inheritance chain until at least one applicable, accessible, non-override method declaration is found; performing overload resolution on a set of applicable, accessible, non-override methods declared for the type; and selecting the second method based on a performance of said overload resolution.
Claim 24
Dependent Claim
28 words
A computer readable medium according to claim 21 , wherein said assigning said at least one keyword includes assigning at least one of virtual, new and override keywords.
Claim 25
Dependent Claim
41 words
A computer readable medium according to claim 21 , wherein said assigning said at least one keyword to said at least one software component specifies programmer intent with regard to whether said at least one software component overrides another software component.
Claim 26
Dependent Claim
46 words
A computer readable medium according to claim 21 , wherein said assigning said at least one keyword to said at least one software component specifies programmer intent with regard to whether said at least one software component is capable of being overridden by another software component.
Claim 27
Dependent Claim
41 words
A computer readable medium according to claim 21 , wherein said assigning said at least one keyword to said at least one software component specifies programmer intent with regard to whether said at least one software component hides another software component.
Claim 28
Dependent Claim
50 words
A computer readable medium according to claim 21 , wherein said at least one software component is at least one member of the object-oriented programming language and the object-oriented programming language is from one of the sources of origin identified by C#, FORTRAN, PASCAL, VISUAL BASIC, C, C++, and JAVA.
Claim 29
Dependent Claim
43 words
A computer readable medium according to claim 21 , wherein said specifying of programmer intent includes assigning intelligent defaults to said at least one software component in the absence of assigning said at least one keyword to said at least one software component.
Claim 30
Dependent Claim
31 words
A computer readable medium according to claim 27 , wherein when programmer intent is not fully specified, the compiler of the programming language produces a warning before assigning said intelligent defaults.
Claim 31
Dependent Claim
41 words
A computer readable medium according to claim 27 , wherein said assigning of intelligent defaults includes assigning to said at least one software component the most limited form of accessibility, based upon a type of said at least one software component.
Claim 32
Dependent Claim
48 words
A computer readable medium according to claim 27 , wherein by default, when said at least one software component is at least one method declaration with no accessibility modifiers appearing in the corresponding class, the at least one method declaration is defaulted to be private to that class.
Claim 33
Dependent Claim
23 words
A computer readable medium according to claim 27 , wherein by default, said at least one software component is non-virtual, rather than virtual.
Claim 34
Dependent Claim
38 words
A computer readable medium according to claim 21 , wherein for a virtual method invocation, said versioning-aware overload resolution method includes determining the second method based on a run-time type of an instance of the first method invocation.
Claim 35
Dependent Claim
38 words
A computer readable medium according to claim 21 , wherein for a non-virtual method invocation, said versioning-aware overload resolution method includes determining the second method based on a compile-time type of an instance of the first method invocation.
Claim 36
Dependent Claim
26 words
A computer readable medium according to claim 21 , wherein said versioning-aware overload resolution method includes bounding names at run-time, and not bounding offsets at compile-time.
Claim 37
Dependent Claim
43 words
A computer readable medium according to claim 21 , wherein the overload resolution method prevents a base software component from breaking a functionality of a derived software component when versioning the base software component and such breaking is not intended by the programmer.
Claim 38
Dependent Claim
31 words
A computer readable medium according to claim 21 , wherein said at least one software component is binary compatible with code utilizing other versions of said at least one software component.
Claim 39
Dependent Claim
31 words
A computer readable medium according to claim 21 , wherein said at least one software component is source compatible with code utilizing other versions of said at least one software component.
Claim 40
Dependent Claim
130 words
An object-oriented programming language stored on a computer for producing computer executable modules, comprising a versioning mechanism enabling a programmer to specify intent with regard to versioning of at least one software component by assigning at least one keyword to said at least one software component, wherein said specifying of programmer intent includes providing a versioning-aware overload resolution method to locate a second method invoked by a first method invocation, wherein said versioning-aware overload resolution method includes: determining a type indicated by the first method invocation, checking up an inheritance chain until at least one applicable, accessible, non-override method declaration is found; performing overload resolution on a set of applicable, accessible, non-override methods declared for the type; and selecting the second method based on a performance of said overload resolution.
Claim 41
Dependent Claim
130 words
An object-oriented programming language stored on a computer for producing computer executable modules, comprising a versioning mechanism enabling a programmer to specify intent with regard to versioning of at least one software component by assigning at least one keyword to said at least one software component, wherein said specifying of programmer intent includes providing a versioning-aware overload resolution method to locate a second method invoked by a first method invocation, wherein said versioning-aware overload resolution method includes: determining a type indicated by the first method invocation, checking up an inheritance chain until at least one applicable, accessible, non-override method declaration is found; performing overload resolution on a set of applicable, accessible, non-override methods declared for the type; and selecting the second method based on a performance of said overload resolution.
Claim 42
Dependent Claim
32 words
An object-oriented programming language stored on a computer according to claim 38 , wherein said assigning said at least one keyword includes assigning at least one of virtual, new and override keywords.
Claim 43
Dependent Claim
45 words
An object-oriented programming language stored on a computer according to claim 38 , wherein said assigning said at least one keyword to said at least one software component specifies programmer intent with regard to whether said at least one software component overrides another software component.
Claim 44
Dependent Claim
50 words
An object-oriented programming language stored on a computer according to claim 38 , wherein said assigning said at least one keyword to said at least one software component specifies programmer intent with regard to whether said at least one software component is capable of being overridden by another software component.
Claim 45
Dependent Claim
45 words
An object-oriented programming language stored on a computer according to claim 38 , wherein said assigning said at least one keyword to said at least one software component specifies programmer intent with regard to whether said at least one software component hides another software component.
Claim 46
Dependent Claim
54 words
An object-oriented programming language stored on a computer according to claim 38 , wherein said at least one software component is at least one member of the object-oriented programming language and the object-oriented programming language is from one of the sources of origin identified by C#, FORTRAN, PASCAL, VISUAL BASIC, C, C×, and JAVA.
Claim 47
Dependent Claim
47 words
An object-oriented programming language stored on a computer according to claim 38 , wherein said specifying of programmer intent includes assigning intelligent defaults to said at least one software component in the absence of assigning said at least one keyword to said at least one software component.
Claim 48
Dependent Claim
35 words
An object-oriented programming language stored on a computer according to claim 44 , wherein when programmer intent is not fully specified, the compiler of the programming language produces a warning before assigning said intelligent defaults.
Claim 49
Dependent Claim
45 words
An object-oriented programming language stored on a computer according to claim 44 , wherein said assigning of intelligent defaults includes assigning to said at least one software component the most limited form of accessibility, based upon a type of said at least one software component.
Claim 50
Dependent Claim
52 words
An object-oriented programming language stored on a computer according to claim 44 , wherein by default, when said at least one software component is at least one method declaration with no accessibility modifiers appearing in the corresponding class, the at least one method declaration is defaulted to be private to that class.
Claim 51
Dependent Claim
27 words
An object-oriented programming language stored on a computer according to claim 44 , wherein by default, said at least one software component is non-virtual, rather than virtual.
Claim 52
Dependent Claim
42 words
An object-oriented programming language stored on a computer according to claim 38 , wherein for a virtual method invocation, said versioning-aware overload resolution method includes determining the second method based on a run-time type of an instance of the first method invocation.
Claim 53
Dependent Claim
42 words
An object-oriented programming language stored on a computer according to claim 38 , wherein for a non-virtual method invocation, said versioning-aware overload resolution method includes determining the second method based on a compile-time type of the instance of the first method invocation.
Claim 54
Dependent Claim
30 words
An object-oriented programming language stored on a computer according to claim 38 , wherein said versioning-aware overload resolution method includes bounding names at run-time, and not bounding offsets at compile-time.
Claim 55
Dependent Claim
47 words
An object-oriented programming language stored on a computer according to claim 38 , wherein the overload resolution method prevents a base software component from breaking a functionality of a derived software component when versioning the base software component and such breaking is not intended by the programmer.
Claim 56
Dependent Claim
35 words
An object-oriented programming language stored on a computer according to claim 38 , wherein said at least one software component is binary compatible with code utilizing other versions of said at least one software component.
Claim 57
Dependent Claim
35 words
An object-oriented programming language stored on a computer according to claim 38 , wherein said at least one software component is source compatible with code utilizing other versions of said at least one software component.
References Cited (Backward Citations)
US6282712B1
Cited
US5781730A
Cited
US5907704A
Cited
US5689711A
Cited
US5805899A
Cited
US5890176A
Cited
US6112024A
Cited
US5878432A
Cited
US6205465B1
Cited
US6226788B1
Cited
US6769124B1
Cited
US6442754B1
Cited
US6629316B1
Cited
US6385767B1
Cited
US6622302B1
Cited
USPTO Annuity & Maintenance Windows
| Annuity Stage | Window Opens | Payment Deadline | Surcharge Period Until | Estimated Fee | Status |
|---|---|---|---|---|---|
| 3.5 Years (Year 4) | 2008-12-26 | 2009-06-27 | 2009-12-27 | $2000.00 | Window Closed / Lapsed |
| 7.5 Years (Year 8) | 2012-12-26 | 2013-06-27 | 2013-12-27 | $3760.00 | Window Closed / Lapsed |
| 11.5 Years (Year 12) | 2016-12-26 | 2017-06-27 | 2017-12-27 | $7700.00 | Window Closed / Lapsed |