Intentional programming

A programmer builds a WYSIWYG-like environment supporting the schema and notation of business knowledge for a given problem domain (such as productivity applications or life insurance).

The environment can operate on these intentions and assist the user to create semantically richer documents that can be processed and executed, similar to a spreadsheet.

Tight integration of the environment with the storage format brings some of the nicer features of database normalization to source code.

Redundancy is eliminated by giving each definition a unique identity, and storing the name of variables and operators in exactly one place.

More radical visualizations include showing statement lists as nested boxes, editing conditional expressions as logic gates, or re-rendering names in Chinese.

Loops that extend across many lines, or pages, can become very difficult to understand, notably if the original programmer uses unclear labels.

Since most programming languages represent the source code as plain text, objects are defined by names, and their uniqueness has to be inferred by the compiler.

In code that spans several pages – or, for globally visible names, multiple files – it can become very difficult to tell what symbol refers to what actual object.

By contrast, in an IP system, all definitions not only assign symbolic names, but also unique private identifiers to objects.

This means that in the IP development environment, every reference to a variable or procedure is not just a name – it is a link to the original entity.

Having a unique identity for every defined object in the program also makes it easy to perform automated refactoring tasks, as well as simplifying code check-ins in versioning systems.