Intentional Programming

Intentional Programming can be credited to Charles Simonyi, once a key figure in the Microsoft Organization. He proposes that the programmer can express intentions explicitly in their code, rather than implicitly via inadequate language features. These intentions become plug-and-play components in a Programming Language Implementation.

Intentional Programming was a research project at Microsoft Research until Spring 2001. It was led by Charles Simonyi, was very advanced, and was very "close to productization". The research project was cancelled by Microsoft, and its further development curtailed. It is still not Open Source. As of September 17, 2002, Simonyi had left Microsoft to found a startup called "Intentional Software Corporation" in Bellvue, WA. Mr. Simonyi left Microsoft with the right to use the intellectual property he developed and patented while working there. Simonyi's current company is intentsoft.com .

For newspaper article on the subject, see seattlepi.nwsource.com

Before jumping on the Intentional Programming bandwagon, please read Critique Of Intentional Programming.


As the best way to view

The idea of intents is that a representation of the 'intent' of the programmer should be the best way to store the code, and these 'intents' should also be 'viewable' in the language of your choice. In this system, source code as we know it today is just how you view and edit the intents.

Intentional Programming extends this idea by using intermediate language as the canonical representation of the code. You would be able to edit or view your intents in your choice of programming languages (assuming a translator is installed in the IP system). Support exists for C or C++ and with plans to add support for Eiffel.

"Intents", ultimately, are another high-level programming language with tools to automate the its writing and translation to lower-level languages, with an attendant loss of information and adding of noise in the process.

The Simonyi paper indicates that the loss need not occur, with intents corresponding to special indentation, blank lines, and other formatting conventions are possible. Conversion of legacy code to Intentional Programming format is one of the potential uses, however Intentional Programming would eventually be used as the preferred representation for all programs, so translation to/from other forms would not result in loss of anything.


Intentional Programming is not operating on source text. All code is stored in a database and the user will only see a text-like (but graphical layout) rendering of the information stored in that database. So there are no text indentation problems because no source text was involved. There is actually a focus on structural and graphical editing.

Intentional Software captures the tremendous LatentValue that is usually lost in the design and development process and makes it part of the software. Using Intentional Software the DomainKnowledge is captured, not lost. All stakeholders - programmers, DomainExperts and others - can have their DesignIntent clearly represented in code. This increases the quality and value of the software, primarily by making it easier to develop, maintain and change.



I suspect Intentional Programming and Refactoring Browser will converge at some point to make an Uber Tool that can refactor not only within a single language, but also from one language to another. The technology is getting there. There's an open source project starting that plans to have some basic IP style functionality: mozart-dev.sourceforge.net .

See Mozart Programming System (although this seems to be a different version).


Consider that some UML software already has round-trip capabilities (graphical model to automatic code generation for various written languages and from written languages to graphical model), it seems only a matter of time before one can simply write in one language...convert to UML...and then generate code from UML in whatever language one wants. That's if you don't "write" it in UML to start with. The pieces are all there, they just need better/more complete code generation and refactoring capability.


The Generative Programming Book has a whole chapter devoted to intentional programming. -- Arie Van Deursen


Informational Links :

A technical description of the latest design for the Transformation Engine of the Intentional Programming system: Oege de Moor, Intentional Programming. Lecture for the British Computer Society, February 2001. web.comlab.ox.ac.uk

Eric Van Wyk, Oege de Moor, Ganesh Sittampalam, Ivan Sanabria-Piretti, Kevin Backhouse and Paul Kwiatkowski. Intentional Programming: a host of language features. Technical report, Oxford University Computing Lab. web.comlab.ox.ac.uk

An interview with Charles Simonyi: www.edge.org

A Yahoo group, apparently dead: groups.yahoo.com

Microsoft Research Intentional Programming Video (2000): www.cse.unsw.edu.au

Microsoft Research Intentional Programming (archived version from 2001): web.archive.org -- Adam Sillye

Code Generation Network: www.codegeneration.net

Charles Simonyi in CGN (07/2004): codegeneration.net

The OOPSLA 2006 paper and presentation: www.intentionalsoftware.com


See original on c2.com