IP Library Granted Patent US 10,216,501
Granted Patent B2
US 10,216,501 · App. 15/168,990 · Granted Feb 26, 2019

Generating code in statically typed programming languages for dynamically typed array-based language

Inventors: Arnab De (Brighton, MA); Frederick M. Smith (Natick, MA); Denis Gurchenkov (Needham, MA)
Assignee: The MathWorks, Inc.
G06F8/51G06F8/437
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,216,501
App. No.
15/168,990
Granted
Feb 26, 2019
Kind
B2
Abstract

Described are methods, systems and computer-readable media storing instructions that when executed on one or more processors execute a process for generating second program code in a statically typed programming language from first program code in a dynamically typed programming language. The first program code contains or, when executed, generates or operates on a dynamically typed array. The second program code may be generated by classifying the dynamically typed array into one of multiple categories, such as homogeneous, heterogeneous, or another, based on the array contents, array usage, and/or user input, and generating the second program code in the statically typed programming language based on the classification(s).

Claims (49)

1. A method, comprising:

generating, by one or more processors, second program code in a statically typed programming language, from first program code in a programming language supporting dynamic typing, the first program code containing or, when executed, generating or operating on a dynamically typed array, the generating the second program code comprising:

classifying, by the one or more processors, the dynamically typed array into one of multiple categories, based on an array content, an array usage, or a user input, and

the multiple categories including a homogeneous category, a heterogeneous category, a table structure category, or a soft homogenizable category,

selecting, by the one or more processors, a translation rule for translating the dynamically typed array into a statically typed representation based on a category in which the dynamically typed array is classified,

a first translation rule being selected when the dynamically typed array is classified into a first category of the multiple categories, or

a second translation rule, different than the first translation rule, being selected when the dynamically typed array is classified in a second category, different than the first category, of the multiple categories; and

generating, by the one or more processors, the second program code in the statically typed programming language based on the selected translation rule.

2. The method of claim 1 , wherein the classifying comprises selecting one or more classification rules from a set of rules for application based on a performance preference for the second program code.

3. The method of claim 1 , wherein the classifying comprises selecting one or more classification rules from a set of rules for application based on a visual readability preference for the second program code.

4. The method of claim 1 , comprising assigning to the dynamically typed array a homogeneous or heterogeneous classification from user input that overrides any automated classification operations performed by the one or more processors.

5. The method of claim 1 , comprising generating an intermediate representation from the first program code and modifying the intermediate representation based on the classification.

6. The method of claim 5 , wherein generating the intermediate representation comprises:

generating a dynamically typed intermediate representation of the first program code;

transforming the dynamically typed intermediate representation into a statically typed intermediate representation; and

wherein generating the second program code comprises converting the statically typed intermediate representation into the second program code in a statically typed programming language.

7. The method of claim 1 , comprising determining constant indexing values for operations on the dynamically typed array.

8. The method of claim 1 , comprising converting a dynamically typed array into a statically typed intermediate representation including an array, a structure, or hash table data structure containing statically typed elements.

9. The method of claim 8 , comprising using constant propagation or constant folding to aid in converting the first program code operating on the dynamically typed array into the statically typed intermediate representation.

10. The method of claim 8 , comprising using function specialization to aid in converting the first program code operating on the dynamically typed array into the statically typed intermediate representation.

11. The method of claim 8 , comprising using loop unrolling to aid in converting the first program code operating on the dynamically typed array into the statically typed intermediate representation.

12. The method of claim 8 , comprising using type unification to aid in converting the first program code operating on the dynamically typed array into the statically typed intermediate representation.

13. The method of claim 1 , comprising analyzing the first program code to determine if index values used to index into the dynamically typed array are constant and remain constant during execution of the first program code, and using those index values that are constant to aid in the classifying.

14. The method of claim 1 , wherein the generating comprises determining a static data type for each dynamically typed array, then using the determined static data type to aid in generating the second program code.

15. The method of claim 1 , wherein the generating comprises applying type inference techniques to determine types for each dynamically typed array, and using the types in generating the second program code.

16. The method of claim 1 , wherein the second program code comprises a representation of the dynamically typed array, and when the second program is executed, the representation in computer memory does not contain any metadata.

17. The method of claim 1 , where the multiple categories include the homogenous category and the heterogenous category,

where the first category is the homogenous category and the first translation rule is selected when the dynamically typed array is classified into the homogenous category, and

where the second category is the heterogenous category and the second translation rule is selected when the dynamically typed array is classified into the heterogenous category.

18. A non-transient computer readable medium comprising program instructions, the program instructions comprising:

one or more instructions which, when executed by one or more processors cause the one or more processors to:

generate second program code in a statically typed programming language, from first program code in a programming language supporting dynamic typing, the first program code containing or, when executed, generating or operating on a dynamically typed array, the one or more instructions, when executed by the one or more processors to generate the second program code, cause the one or more processors to:

classify the dynamically typed array into one of multiple categories, based on an array content, an array usage, or a user input,

the multiple categories including a homogeneous category, a heterogeneous category, a table structure category, or a soft homogenizable category,

select a translation rule for translating the dynamically typed array into a statically typed representation based on a category in which the dynamically typed array is classified,

a first translation rule being selected when the dynamically typed array is classified into a first category of the multiple categories, or

a second translation rule, different than the first translation rule, being selected when the dynamically typed array is classified in a second category, different than the first category, of the multiple categories; and

generate, the second program code in the statically typed programming language based on the selected translation rule.

19. The non-transient computer readable medium of claim 18 , wherein the instructions further comprise instructions, which when executed by the one or more processors to generate the second program code, cause the one or more processors to:

analyze the first program code to determine if index values used to index into the dynamically typed array are constant and remain constant during execution of the first program code, and using those index values that are constant to aid in the classifying.

20. A computer-implemented system for generating program code, comprising:

one or more processors configured to:

generate second program code in a statically typed programming language, from first program code in a programming language supporting dynamic typing, the first program code containing or, when executed, generating or operating on a dynamically typed array, the one or more processors, when generating the second program code, are to:

classify the dynamically typed array into one of multiple categories, based on an array content, an array usage, or a user input,

the multiple categories including a homogeneous category, a heterogeneous category, a table structure category, or a soft homogenizable category,

select a translation rule for translating the dynamically typed array into a statically typed representation based on a category in which the dynamically typed array is classified,

a first translation rule being selected when the dynamically typed array is classified into a first category of the multiple categories, or

a second translation rule, different than the first translation rule, being selected when the dynamically typed array is classified in a second category, different than the first category, of the multiple categories; and

generate the second program code in the statically typed programming language based on the classifying.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jun 1, 2016
From: DE, ARNAB; SMITH, FREDERICK; GURCHENKOV, DENIS
To: THE MATHWORKS, INC.
Reel/Frame 038764/0010 →
Continuity (2)
Provisional Application 62171011 · Jun 4, 2015
Related Publication 20160357533A1 · Dec 8, 2016