Skip to content

Commit

Permalink
Add concepts
Browse files Browse the repository at this point in the history
  • Loading branch information
Gohla committed Mar 1, 2016
1 parent 627709c commit 570ed13
Showing 1 changed file with 12 additions and 8 deletions.
20 changes: 12 additions & 8 deletions source/release/migrate/2.0.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,23 @@ To gather the required knowledge for migrating a language project, go through th

## Differences

### Terminology
### Concepts

language specification
Spoofax 2.0 introduces several new concepts and terminology.

language component
A *language specification* is the specification of a language using meta-languages.

language implementation
A *language specification project* specifies a *language component*. When the specification is compiled, the result is a component which can be loaded into Spoofax. A language component has specifications and implementations for parts of a language, such as its parser, pretty-printer, analysis, transformations, editor services, etc.

language
A component contributes these parts to a *language implementation*. Multiple components can contribute to the same language implementation, and components can contribute to multiple language implementations. In the most simple case, a single component contributes all parts of the language to a single implementation.

Language components can *depend* on other language components to depend on parts of a language. Currently, there are two kinds of dependencies: compile and source dependencies. A *compile dependency* on a language component is used to compile source files of that language component. For example, a compile dependency on NaBL will ensure that all <span class='file'>.nab</span> files are compiled into <span class='file'>.str</span> files.

A *source dependency* is used to depend on source files of a language component. Source dependencies are used to depend on libraries, for example to depend on a Stratego library for name and type analysis. They are also used compose multiple language components into a single language component, for example to do language extension.

language specification project
A *language* is the more abstract notion of a language. For example, the Java *language* has the JDK7 and JDK8 *implementations*, which each have front-end and back-end *components*.

end-user project
An *end-user project* is a project with programs of an end-user language, in contrast to a language specification project which has programs of meta-languages. For example, a Java project is a Java end-user project, whereas the JDK project is a language specification project.

### General

Expand All @@ -34,7 +38,7 @@ generated files

#### Projects

Language specification projects are no longer Eclipse plugins so that they can be used outside of the Eclipse platform as well.
Language specification projects are no longer Eclipse plugins, so that they can be used outside of the Eclipse platform as well.

##### Importing

Expand Down

0 comments on commit 570ed13

Please sign in to comment.