Friday, November 20, 2015

Backend Compatibility Matrix

by Michał Antkiewicz

We usually first implement new language features in one backend (e.g., Alloy) and add support to the other backend later. The result is that different backends support different language features.

Therefore, we have created Backend Compatibility Matrix, which provides versions in which support for a given feature was added to Alloy-based and Choco-based backend.

Tuesday, November 3, 2015

Clafer Tools Released

by Michał Antkiewicz, updated on Nov 03, 2015

This is a simultaneous release of all Clafer Tools.

Binary builds are available from Clafer Tools - Binary Distributions.

Clafer compiler, release pull request (0.4.2), hotfix (
  • added CheatSheet and generated syntax documentation clafer.pdf.
  • Added minimum and maximum of a set operators min and max.
  • Changed syntax of objectives to << minimize ... >> and << maximize ... >>. The old syntax << min ... >> and << max ... >> still works but it is now deprecated.
  • Changed precedence of if/then/else so that nested expressions do not need to be in parens. See issue #73.
  • Implemented ability for top-level abstract clafer to extend a nested abstract clafer #67. See test case.
  • Added generation of assertions for Choco.
  • Added validation with Choco and GraphVis to -v.
  • Use Haskell stack.
Alloy-based instance generator, release pull request (0.4.2), hotfix (
Choco-based instance generator and multi-objective optimizer, release pull request (0.4.2), release pull request (

  • Many optimizations
  • Improved symmetry breaking
  • Restore strategies "smaller" and "larger"
  • New command line options: time, noprint, dataFile
  • Ported to the latest Choco3/develop
Claferwiki, release pull request (0.4.2), hotfix (
ClaferToolsUICommonPlatform, release pull request (0.4.2).
  • Added excluding variants in the feature and quality matrix, issue #23.
ClaferMOOVisualizer, release pull request (0.4.2).
  • Added excluding variants in the feature and quality matrix, issue #23.
ClaferConfigurator, release diff (0.4.2).
  • Added excluding variants in the feature and quality matrix, issue #23.
ClaferIDE, release diff (0.4.2).

ClaferToolsST, release diff (0.4.2), release commit

Tuesday, October 27, 2015

Example: Directed Graph Reachability in Presence of Variability

by Michał Antkiewicz, updated on Oct 27, 2015

With the features recently introduced to Clafer 0.4.1 (nested abstract clafers and reference refinement, see Clafer 0.4.0 PowerPoint Slide Show, and Alloy and Choco escapes), we can now conveniently model directed graphs in Clafer and express constraints such as node reachability in a graph by escaping to Alloy.

On Oct 26, 2015, I gave a talk on the topic. Slides in PPSX. Slides in PDF.

The talk was based on the wiki page

Directed Graph Reachability in Presence of Variability

on Clafer Model Wiki shows an example.

Friday, October 2, 2015

Clafer Cheat Sheet and Syntax Documentation

by Michał Antkiewicz

Clafer has a formal grammar from which the lexer and parser are generated. I published two new language reference resources: 
  • Syntax documentation (pdf), which is also automatically generated from the grammar
  • Clafer cheat sheet, which is written manually based on the grammar to provide additional commentary and type information, while sacrificing the formality of the grammar.
All these resources, as of this posting, cover Clafer 0.4.1 and they will be updated with each release. They are also referenced from the page Documentation.

Monday, September 21, 2015

Clafer Web Tools 0.4.1 Released

by Michał Antkiewicz

The release 0.4.1 of the web tools is the first major release since!

This release wouldn't be possible without the hard work of Eldar Khalilov who took on a difficult task of switching the tools from the old XML format to the new JSON format of the compiler's intermediate representation.

The release includes compatibility with Clafer 0.4.1 and the new features of the language since and many functional and performance improvements (by both Alexandr Murashkin and Eldar Khalilov).

Tuesday, September 1, 2015

Clafer, ClaferIG, and ClaferWiki 0.4.1 Released

by Michał Antkiewicz

Clafer compiler, Alloy-based instance generator, and wiki 0.4.1 are released on Hackage (claferclaferIGclaferwiki). The release also includes the Choco3-based instance generator and optimizer 0.4.0, which; however, does not yet support the new features of the language.

Binary builds are available from Clafer Tools - Binary Distributions.

See the corresponding release 0.4.1 of the web tools.

Major changes include:
  • Fixed problems with automatic dereferencing, see leftAssocDeref.cfr, navAndDeref.cfr, and navAndDeref.als.reg.
  • Fixed type system problems. 
  • Added Alloy and Choco escapes, see escapes.cfr. Code in Alloy escapes is included at the beginning of the Alloy output, whereas, Choco escapes are included at the end of Choco output. 
  • Changed ref to dref. 
  • Added handling and deprecation warnings for deprecated ref and &; instead dref and ** should be used, see deprecated.cfr
  • Fixed bugs with incorrect addition of .drefs in arithmetic, see arithmetic.cfr
  • Fixed missing links bugs in HTML output. 
  • Added continuous integration with TravisCI.
For details, see Clafer Release 0.4.1 Pull Request.

Previous release Clafer, ClaferIG, ClaferWiki, ChocoSolver, and ClaferChocoIG 0.4.0 Released.

Tuesday, August 25, 2015

Tutorial: Variability Domain Engineering in Three Layers. A Train Station Layout Case Study in Clafer

by Michał Antkiewicz

On Aug 24, 2015, as part of the Domain-Specific Modeling Theory and Practice 2015 Summer School, Andrzej Wąsowski presented a 4-hour hands-on tutorial on Variability Domain Engineering using Clafer.

The tutorial is in the form of the Clafer Wiki Variability Domain Engineering in Three Layers. A Train Station Layout Case Study in Clafer. The tutorial follows the architecture of OMG's Common Variability Language (CVL) standard and it contains five parts:

  • Part 0: Introduction to Domain Engineering
  • Part I: Feature Modeling in Clafer
  • Part II: A DSL for Describing Track Layouts
  • Part III: A Layered Variability Model
  • Part IV: Domain Exploration using Synthesis

Wednesday, July 29, 2015

Clafer, ClaferIG, ClaferWiki, ClaferChocoIG 0.4.0 Released

by Michał Antkiewicz

Clafer compiler, Alloy-based instance generator, and wiki 0.4.0 are released on Hackage (clafer, claferIG, claferwiki). The release also includes the Choco3-based instance generator and optimizer, which; however, does not yet support the new features of the language.

Binary builds are available from Clafer Tools - Binary Distributions.

The Clafer 0.4.0 PowerPoint Slide Show summarizes the improvements included in this release.

Major changes include:
  • Fixed the grammar and extended the type system to properly support super types, primitive value reference types, complex reference types, primitive type reference refinements. See the test case mergeExpAndSetExp.cfr and a subset of the test case supported by Alloy mergeExpAndSetExpAlloy.cfr.
  • Added support for redefinition in Alloy-based IG. See redefinition.cfr test case.
  • Removed Alloy4.1 support. The mode -m=alloy means Alloy4.2 by default.
  • Removed XML mode (-m=xml). The JSON output (-m=json) is more comprehensive and it contains information about quality attributes and objectives.
  • Removed a redundant --noalloyruncommand option.
  • Added primitive type double and implemented primitive type coersions. See primitiveTypesAndCoersions.cfr test case.
  • Updated Clafer Tools for Sublime Text 2/3.
For detailed changes see pull requests: Clafer, ClaferIG, ClaferWiki, chocosolver, ClaferChocoIG.

Previous release Clafer, ClaferIG, ClaferWiki, ChocoSolver, and ClaferChocoIG 0.3.10 Released.

Tuesday, July 28, 2015

Accessing Clafer Models Programmatically

by Michał Antkiewicz, updated for Clafer 0.4.0

Since we ourselves translate Clafer into many output formats and use many different programming languages in the various tools (Haskell, Java, JavaScript, Python), we developed ways of accessing the compiler's intermediate representation (IR), which represents fully-resolved information about Clafer models. This way, the compiler does all the hard work and the downstream tools can access the model conveniently.

Wednesday, June 3, 2015

Inheritance of Group Cardinality

by Michał Antkiewicz

On April 06, 2015, I presented how inheritance of group cardinality was handled before 0.3.9, how it was fixed as of release 0.3.9, and what an alternative solution could be. The slides are available below. If you have a strong opinion about either solution, please drop me a line.

PowerPoint Slide Show