Imperative programming languages such as C, C++, Java and Python are the workhorses of software engineering, but by default generate code that runs on only a single CPU core. Pure functional languages such as Haskell can be automatically parallelized, but are difficult for the majority of programmers to use productively, as evidenced by the limited adoption of pure functional languages in production environments. This patent covers a new class of languages known as “lattice-based languages” that is a strict superset of the pure functional paradigm and a strict subset of the imperative paradigm, retaining both the automatic parallelization property of pure functional languages and the practical usefulness of imperative languages.
Integrated Development Environments (IDEs) facilitate the editing of program code by providing to a programmer facilities that go beyond direct editing of program source, such as mechanisms for understanding the relationship between parts of a program (e.g. cross-linking a symbol with its definition), transforming a program's source code in useful ways (e.g. allowing for all usages of a variable to be renamed in a single operation), and for integrating the debugging of a program at runtime with the same environment used to edit the source code before compiling and/or running the code. IDEs that display a program as text miss an opportunity to display program structure to a programmer in graphical form, however IDEs that use a purely graphical representation for program editing are difficult for programmers to reason about quickly. This patent covers an IDE that augments the text display of a program in a lattice-based language with a graphical display of data dependencies between expressions in the program.
Functional reactive programming has been used in spreadsheets and some programming systems to reduce the amount of computation required to compute a final result by caching or memoizing intermediate values, such that when a part of the spreadsheet or program is changed, only those things that depend upon that changed part (or things that depend on them) need to be recomputed. This patent extends the use of functional reactive programming to lattice-based languages, and covers the use of functional reactive programming in an IDE for lattice-based languages.