Skip to content

Commit

Permalink
Migration guide almost complete
Browse files Browse the repository at this point in the history
  • Loading branch information
Gohla committed Mar 1, 2016
1 parent 39bb195 commit 627709c
Show file tree
Hide file tree
Showing 7 changed files with 140 additions and 38 deletions.
Empty file removed _static/.gitignore
Empty file.
9 changes: 9 additions & 0 deletions _static/custom.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
/*code.docutils.literal {
color: #222;
background: #eee;
font-family: monospace;
}*/

.menuselection, .guilabel, .file, kbd {
background: #eee;
}
1 change: 1 addition & 0 deletions conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -373,3 +373,4 @@
def setup(app):
app.add_config_value('recommonmark_config', {}, True)
app.add_transform(AutoStructify)
app.add_stylesheet("custom.css")
File renamed without changes.
2 changes: 1 addition & 1 deletion source/langdev/manual/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ Language Development Manual
env/eclipse
env/intellij
project
configuration
config
144 changes: 118 additions & 26 deletions source/release/migrate/2.0.0.md

Large diffs are not rendered by default.

22 changes: 11 additions & 11 deletions source/release/note/2.0.0.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
# Spoofax 2.0.0
# Spoofax 2.0.0 Release Notes

Spoofax 2.0 is a complete rewrite of Spoofax which improves the architecture by separating Spoofax into the Spoofax Core API and implementations on top of that API, massively improves the language development workflow, and properly supports language composition.
Spoofax 2.0 is a complete rewrite of Spoofax which improves the architecture by separating Spoofax into the Spoofax Core API and implementations on top of that API, massively improves the language development workflow, and properly supports language extension.

See the corresponding [migration guide](../migrate/2.0.0.md) for migrating from Spoofax 1.5 to Spoofax 2.0.

## Architecture

The biggest change in Spoofax 2.0 is the architecture. Previously, Spoofax was built on top of the Eclipse and IMP platform, meaning Spoofax was not usable outside of the Eclipse platform. In Spoofax 2.0, all platform-agnostic functionality such as language management, parsing, analysis, transformation, and editor services, are implemented in Spoofax Core, which is a portable Java library with an API. This means that the Spoofax language workbench, and any language implementations made with Spoofax, can now be used by any application, platform, or framework in the Java ecosystem.
The biggest change in Spoofax 2.0 is the architecture. Previously, Spoofax was built on top of the Eclipse and IMP platform, meaning Spoofax was not usable outside of the Eclipse platform. In Spoofax 2.0, all platform-agnostic functionality such as language management, parsing, analysis, transformation, and editor services, are implemented in Spoofax Core, which is a portable Java library with an API. This means that the Spoofax language workbench, and any language implementations made with Spoofax, can now be used by any application, platform, or framework in the Java ecosystem.

## Integrations

We have integrated Spoofax Core with Eclipse, IntelliJ, Maven, and the command-line.

We support the Eclipse platform through a new plugin that integrates Spoofax Core as an Eclipse plugin. The new Eclipse plugin supports language development in Eclipse, and supports exporting languages made with Spoofax as an Eclipse plugin with full-fledged editor support. We have also performed a more faithful Eclipse integration than Spoofax 1.5 did. For example, we now use natures to enable Spoofax for a project, use the incremental builder framework to allow suspending automatic builds, and use Eclipse's menu system for builders instead of non-standard buttons. See the [migration guide](../migrate/2.0.0.md) for a full list of changes to the Eclipse plugin compared to Spoofax 1.5.
We support the Eclipse platform through a new plugin that integrates Spoofax Core as an Eclipse plugin. The new Eclipse plugin supports language development in Eclipse, and supports exporting languages made with Spoofax as an Eclipse plugin with full-fledged editor support. We have also performed a more faithful Eclipse integration than Spoofax 1.5 did. For example, we now use natures to enable Spoofax for a project, use the incremental builder framework to allow suspending automatic builds, and use Eclipse's menu system for builders instead of non-standard buttons. See the [migration guide](../migrate/2.0.0.md) for a full list of changes to the Eclipse plugin.

IntelliJ is now also a supported platform through the Eclipse IntelliJ plugin. Languages can be developed in IntelliJ, and exported as IntelliJ plugins with full-fledged editor support.

Expand All @@ -26,21 +26,21 @@ Furthermore, anyone can make new integrations using the Core API.

There are several improvements to the language development workflow in Spoofax 2.0.

Almost all generated files are now generated to the `src-gen` directory of a language project. All required generated files are now (re)generated when building, so it is no longer necessary to commit generated files to source control. This results in much cleaner projects. Furthermore, the language build is now incremental, which speeds up the build in many cases.
Almost all generated files are now generated to the <span class='file'>src-gen</span> directory of a language project. All required generated files are now (re)generated when building, so it is no longer necessary to commit generated files to source control. This results in much cleaner projects. Furthermore, the language build is now incremental, which speeds up the build in many cases.

The bootstrapping process of meta-languages has been significantly improved by versioning languages. It is now possible to load multiple versions of the same language implementation into Spoofax. Meta-languages are bootstrapped by building them against baseline versions of the meta-languages. When a meta-language under development breaks, it is possible to revert back to a previous version to get things working again.

## Composition
## Extension

Spoofax 2.0 supports language extension on the source level, without the need to copy-paste files around. A dependency can be made from a language specification to another language specification, which then allows importing modules of the specification into the other.
For example, language extensions can depend on a base language and extend its concepts. Those extensions can be composed together with the base language specification into a new language specification that contains the base and extensions.

There is also limited support for dynamic extension, i.e. extension at the runtime level instead of the source level. A language implementation can be extended with new builders at runtime. This allows adding builders to existing language implementations, and supports separating the front-end and back-end of a language into multiple projects.

## License

The license has been changed from LPGLv2.1 to the Apache 2.0 license, to improve adoption of Spoofax. Any contributions made to Spoofax must be licensed under the Apache 2.0 license as well.

## Documentation



## Missing Features

A few features didn't make it to Spoofax 2.0, with the biggest one being completions.
Expand All @@ -49,6 +49,6 @@ Both syntactic and semantic completions were already very dodgy in Spoofax 1.5,

The Spoofax modelware component was not ported to Spoofax 2.0 since we do not have the knowledge to port this component.

Folding, realtime builders, and the eclipse.ini check are minor features that are not implemented in 2.0, but may be implemented in the future.
Folding, realtime builders, and the <span class='file'>eclipse.ini</span> check are minor features that are not implemented in 2.0, but may be implemented in the future.

A missing integration in Spoofax 2.0 is a Spoofax Gradle plugin, we are working on that integration for inclusion in a future version.

0 comments on commit 627709c

Please sign in to comment.