Evolution Grammar & Terminology

Introduction
Terminology
Symbol Translation


Introduction

Evolution's feature set is extremely rich and introduces many innovative concepts and new methods of viewing source code that may not be familiar to users of traditional source control systems. The ionForge web site contains resources to help you make the most of your tool.

In an effort to be as clear as possible without language getting in the way of understanding, we developed a grammar and standard syntax to represent concepts in a very regular manner and then adopted it throughout this site and product documentation.


Terminology
  • Productions - See the full resource on Productions.

  • Parent/Child - We use these terms in the traditional sense, in a manner similar to a file system directory tree. The difference is that a Production can be a child of many parents simultaneously.

  • Archetype/Reflection - Used to describe the members of a unidirectional relationship. The reflected object is the archetype, and the object being synchronized with the archetype is the reflection. Note that an object can be an archetype and a reflection at the same time. An object can also be the archetype for many reflections, but can only be the reflection for a single archetype. Archetype to reflection is 1 to many.

  • Archetype/Clone - To avoid overusing the parent/child analogy and causing confusion, we use the term archetype to refer to the object being cloned, reflected, etc.

  • Symbol Translation
  • 'File names' - File names are enclosed within single quotes. For example 'file.h'

  • [Productions] - Productions are enclosed within square brackets. For example [Cookie Cutter]

  • {Objects} - An object is currently either a Production or a file. When referring to an abstract object without specifying which type, objects are enclosed in curly braces. For example {Object}

  • Reflections - Rather than constantly referring to "the reflection of", reflections are prefixed with r: and usually used in combination with one of the above. For example r:{Object}

  • Clone - Refers to the clone of an {Object}. For example c:'file.h'

  • Breaking Reflections - When a reflection relationship is broken, the act of the break is indicated by br:. For example br:[Cookie Cutter] means "breaks the unidirectional relationship between the reflection of the Production named Cookie Cutter and its archetype". The reflected Production which is now independent of its archetype is referred to as b:[Cookie Cutter]
  • This grammar is used liberally in the Reflections resource, which has greatly improved its readability.

    Statements can be directly translated:

    Creating {Object} in [Production] will also create r:{Object} in r:[Production]
    translates to
    Creating a file or Production in a parent Production will also create a reflection of the file or Production in any reflections of the parent Production.

    And then broken down by segment:
    Creating {Object}
    in [Production]
    will also create
    r:{Object}
    in r:[Production]
    Creating a file or Production
    in a parent Production
    will also create
    a reflection of the file or Production
    in any reflections of the parent Production.

    Finally here is a more complicated example:

    Creating c:[StlLibrary] in r:[CoreEngine] causes br:[CoreEngine] then creates c:[StlLibrary] in b:[CoreEngine]
    translates to
    Creating a clone of the Production called StlLibrary in a reflection of the Production named CoreEngine breaks the unidirectional relationship between the reflection of CoreLibrary and its archetype, then creates the clone of StlLibrary in the old reflection of CoreLibrary which was just broken.

    And then broken down by segment:
    Creating c:[StlLibrary]
    in r:[CoreEngine]
    causes br:[CoreEngine]
    then creates c:[StlLibrary]
    in b:[CoreEngine]
    Creating a clone of the Production named StlLibrary
    in a reflection of the Production named CoreEngine
    breaks the unidirectional relationship between the reflection of CoreLibrary and its archetype
    then creates the clone of StlLibrary
    in the old reflection of CoreLibrary which was just broken.