Static type checking across module universes

US9652207B2 · US · B2

Patent metadata
FieldValue
Publication numberUS-9652207-B2
Application numberUS-201313798088-A
CountryUS
Kind codeB2
Filing dateMar 13, 2013
Priority dateMar 13, 2013
Publication dateMay 16, 2017
Grant dateMay 16, 2017

How to read this patent

A practical reading order for non-experts. Skip the full description unless you need deep technical detail.

  1. Title

    What the patent document calls the invention.

  2. Abstract

    A short plain-language summary of the technical disclosure.

  3. Assignees and inventors

    Who owns or filed the patent and who is credited as inventor.

  4. Key dates

    Filing, priority, publication, and grant dates set the timeline.

  5. First independent claim

    The legal scope of protection — read this for what is actually claimed.

  6. CPC / IPC classifications

    Technology tags used to group this patent with similar filings.

  7. Citations and related patents

    Prior art links and similar publications in this corpus.

Abstract

Official abstract text for this publication.

Static type checking can be performed on types and values defined in modules in a system that dynamically composes programs from modules. The types and values do not share a global namespace. Each module defines its own module universe, disjoint from other modules. A language mechanism can establish a local name binding to one module within the content of another module. When type checking at compile time an environment can be established that corresponds to a runtime instance of the program. The static type system can be arranged to align with the runtime values, such that the names used to refer to objects at runtime are the same as the names used to refer to the types of those objects in the static type system. Aliases of a particular type are resolved to a known compile time description of the type.

First claim

Opening claim text (preview).

What is claimed: 1. A method comprising: receiving by a processor of a software development computer, program source code representing a plurality of modules that at runtime comprise a disjoint module universe, at least one module of the plurality of modules exists in a separate namespace from at least one other module of the disjoint module universe, wherein a module is a separately compiled and executed body of code; analyzing content of the program source code representing the plurality of modules; creating an environment wherein types and values from different disjoint module universes of a dynamically composing runtime system that dynamically composes software programs from at least one module of a plurality of modules of the different disjoint universe, are used to check the types of expressions described by imports and exports associated with the different disjoint module universe. 2. The method of claim 1 , further comprising: mapping type nomenclature in a static type system to value nomenclature in the dynamically composing runtime system. 3. The method of claim 1 , further comprising: using a language mechanism comprising an import statement to establish a local name binding to a first module of the plurality of modules within content of a second module of the plurality of modules. 4. The method of claim 1 , further comprising: using an explicit declarative import within a first module of the plurality of modules to give a locally scoped name to an entity defined in a second module of the plurality of modules. 5. The method of claim 1 , further comprising: arranging a static type system to align with values of the dynamically composing runtime system, such that a name used to refer to an object at runtime is identical to a name used to refer to a type of the object in the static type system. 6. The method of claim 1 , further comprising; performing type checking at compile time by establishing an environment that corresponds to a runtime instance of a plurality of runtime instances of a program. 7. A system comprising: at least one processor: a memory connected to the at least one processor: and a compiler component that causes the at least one processor to: perform static type checking in a static type system on a plurality of types and on a plurality of values defined in a plurality of modules, the compiler component executes with a runtime system that dynamically composes a software program from at least one module of the plurality of modules, the at least one module of the plurality of modules exists in a separate namespace from at least one other module of the dynamically composed software program, wherein a module is a separately compiled and executed body of code. 8. The system of claim 7 , further comprising: wherein at least one of the plurality of types is not a global type. 9. The system of claim 7 , further comprising: wherein at least one of the plurality of values is not a global value. 10. The system of claim 7 , further comprising: a compiler component that when loaded into the at least one processor causes the at least one processor to: use a language mechanism to establish a local name binding to a first module of the plurality of modules within content of a second module of the plurality of modules. 11. The system of claim 7 , further comprising: a compiler component that when loaded into the at least one processor causes the at least one processor to: map type nomenclature in the static type system to value nomenclature in the runtime system. 12. The system of claim 7 , further comprising: a compiler component that when loaded into the at least one processor causes the at least one processor to: perform type checking at compile time by establishing an environment that corresponds to a runtime instance of a plurality of possible runtimes of the program. 13. The system of claim 7 , further comprising: a compiler component that when loaded into the at least one processor causes the at least one processor to: determine runtime dependencies of a first module of the plurality of modules to at least a second module of the plurality of modules at compile time. 14. A device, comprising: at least one processor and a memory; the at least one processor configured to: receive by a processor of a software development computer, program source code representing a plurality of modules that at runtime comprises a disjoint module universe, at least one module of the plurality of modules exists in a separate namespace from at least one other module of the disjoint module universe, wherein a module is a separately compiled and executed body of code; analyze content of the program source code representing the plurality of modules; and create an environment wherein types and values from different disjoint universes are used to check type expressions using described imports and exports associated with the different disjoint module universes, the plurality of modules executing in a runtime system that dynamically composes software programs from at least one module of the plurality of modules. 15. The device of claim 14 , wherein the at least one processor is further configured to: arrange a static type system to align with runtime values of the disjoint module universe, such that a name used to refer to an object at runtime is identical to a name used to refer to a type of the object in the static type system. 16. The device of claim 14 , wherein the at least one processor is further configured to: perform type checking at compile time by establishing an environment that corresponds to a runtime instance of a plurality of possible runtime instances of a program. 17. The device of claim 14 , wherein the at least one processor is further configured: use a language mechanism to establish a local name binding to a first module of the plurality of modules within content of a second module of the plurality of modules. 18. The device of claim 14 , wherein the at least one processor is further configured to: predetermine dependencies between modules of the plurality of modules at compile time. 19. The device of claim 14 , wherein the at least one processor is further configured to: use a language mechanism comprising an import statement to establish a local name binding to a first module of the plurality of modules within content of a second module of the plurality of modules. 20. The device of claim 14 , wherein the at least one processor is further configured to: map type nomenclature in a static type system to value nomenclature in the dynamically composing runtime system.

Assignees

Inventors

Classifications

Patent family

Related publications grouped by family.

External sources

Frequently asked questions

Answers are generated from the same data shown on this page.

What does patent US9652207B2 cover?
Static type checking can be performed on types and values defined in modules in a system that dynamically composes programs from modules. The types and values do not share a global namespace. Each module defines its own module universe, disjoint from other modules. A language mechanism can establish a local name binding to one module within the content of another module. When type checking at c…
Who is the assignee on this patent?
Microsoft Technology Licensing Llc
What technology area does this patent fall under?
Primary CPC classification G06F8/437. Mapped technology areas include Physics.
When was this patent published?
Publication date Tue May 16 2017 00:00:00 GMT+0000 (Coordinated Universal Time) (B2). Legal status and post-grant events are not shown on this page.
What related patents are in patentsdb?
We list 8 related publications on this page (citations in our corpus or others sharing the same primary CPC).