An alternative to SourceEditing is the idea that the core definition of a system should be held in a model and edited through projections.
To talk about this style of environment I find it handy to think in terms of multiple representations of the system:
- editable representation: what you edit in order to change the system.
- storage representation: the persistent record of the system definition.
- executable representation: what is executed to make the system run - the executable.
- abstract representation: used to manipulate and reason about system definition.
- visualization representation: a non-editable view of the system definition.
Source code combines the editable and storage representations. It executes the source by transforming the source into an executable representation either in one observable step (interpretation) or multiple steps via a compiler. In order to do this it usually transforms the source into an abstract representation as an intermediate step, but this abstract representation is transitory and only around during compilation. The source is seen as the core definition of the system.
With projectional editing the abstract representation is the is core definition of the system. A tool manipulates the abstract representation and projects multiple editable representations for the programmer to change the definition of the system. The tool persists the abstract representation in a storage representation, but this is entirely separated from any of the editable representations that it projects. The relationship to the executable representation is pretty much the same - the executable is produced through a series of transformations from the abstract representation.
An important difference between source and projectional editing environment is the split between persistent storage and editing. Projectional editing systems can choose any persistence mechanism that they choose, while source systems need to have some universal storage mechanism - which is why they are almost always text files.
The abstract representation may be edited through multiple projections, each projection can show a limited amount of the total information which isn’t tied to the actual structure of the abstract representation. Projectional editing thus usually displays a wider range of editing environments - including graphical and tabular structures - rather than just a textual form.