Intentional Programming

IntentionalProgramming can be credited to CharlesSimonyi, 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 ProgrammingLanguageImplementation?.

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 http://intentsoft.com/.

For newspaper article on the subject, see http://seattlepi.nwsource.com/business/87450_simonyi18.shtml

Before jumping on the IntentionalProgramming bandwagon, please read CritiqueOfIntentionalProgramming.


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.

IntentionalProgramming 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 IntentionalProgramming format is one of the potential uses, however IntentionalProgramming would eventually be used as the preferred representation for all programs, so translation to/from other forms would not result in loss of anything.


IntentionalProgramming 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.

UML (UnifiedModelingLanguage) has the potential to be precisely this. http://www.uml.org http://pigseye.kennesaw.edu/~dbraun/csis4650/A&D/UML_tutorial/what_is_uml.htm http://bdn.borland.com/article/0,1410,31863,00.html


I suspect IntentionalProgramming and RefactoringBrowser will converge at some point to make an UberTool? 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: http://mozart-dev.sourceforge.net/.

See MozartProgrammingSystem (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 GenerativeProgrammingBook has a whole chapter devoted to intentional programming. -- ArieVanDeursen


Informational Links :


See CritiqueOfIntentionalProgramming, SoftTyping, LanguageOrientedProgramming

EditText of this page (last edited June 28, 2013) or FindPage with title or text search