Tuesday, December 22, 2015

Clafer Tools 0.4.3 Released

by Michał Antkiewicz, Dec 22, 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.3).
  • added language feature with backend compatibility table,
  • added support for nested abstract clafers to Choco generator,
  • added checks for loops in inheritance hierarchy, issue 77,
  • fixed an issue with inheritance from a nested abstract clafer which itself has a superclafer, issue 78,
  • added min/max to Alloy generator, issue 79,
  • removed the unused and outdated python mode -m python,
  • fixed handling paths containing spaces in validation.
Alloy-based instance generator, release pull request (0.4.3).
  • revised help messages, issue 28,
  • fix instance output to look like the original model to allow copy/paste from instance to the model for example-driven modeling.
Choco-based instance generator and multi-objective optimizer, release pull request (0.4.3).
  • ported to the latest Choco3 version 3.3.3,
  • added support for nested abstract clafers,
  • added API for specifying ordering of clafers by giving priority branchingPriority([[a,b], [c,d], [e]]);,
  • improved performance, decreased solving time on a model from 247 minutes down to 9, see user's comment,
  • improved pretty printing of instances to harmonize with ClaferIG,
  • fixed multiplication/division and overflows handling,
  • fixed handling of zeroes in division.
      Claferwiki, release pull request (0.4.3).

      ClaferToolsUICommonPlatform.

      ClaferMOOVisualizer.

      ClaferConfigurator.

      ClaferIDE.

      ClaferToolsST, release diff (0.4.3).
      • fixed the problem with double quotes in tool path,
      • added a workaround for 32bit Java requirement on Windows for AlloyIG.

      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 0.4.2.1 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 (0.4.2.1).
      • 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 (0.4.2.1).
      Choco-based instance generator and multi-objective optimizer, release pull request (0.4.2), release pull request (0.4.2.1).

      0.4.2
      0.4.2.1
      • 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 (0.4.2.1).
      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 0.4.2.1.

      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 0.3.6.1!

      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 0.3.6.1 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.3

      Since we ourselves translate Clafer into many output formats and use many different programming languages in the various tools (Haskell, Java, JavaScript), 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.