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.

      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
      2015.04.06-Antkiewicz-Inheritance-of-group-cardinality.ppsx

      Wednesday, May 13, 2015

      Clafer, ClaferIG, ClaferWiki, ChocoSolver, and ClaferChocoIG 0.3.10 Released

      by Michał Antkiewicz, updated on May 13, 2015

      The Clafer compiler, Alloy-based instance generator, and wiki 0.3.10 are released on Hackage (clafer, claferIG, claferwiki). The Choco-based instance generator and multi-objective optimizer 0.3.10.1 is also released. Binary builds are available from Clafer Tools - Binary Distributions.

      We also updated Clafer mode for Emacs.

      For details of changes see
      EDIT (May 1, 2015):
      We are planning to release the web tools soon. This will be the first web tools release since 0.3.6.1!

      EDIT2 (May 13, 2015):

      The binaries now contain a HotFix release 0.3.10.1 of the Choco-based backend.

            Monday, March 30, 2015

            Clafer, ClaferIG, ClaferWiki, ChocoSolver, and ClaferChocoIG 0.3.9 Released

            by Michał Antkiewicz

            The Clafer compiler, Alloy-based instance generator, and wiki 0.3.9 are released on Hackage (clafer, claferIG, claferwiki). The Choco-based instance generator and multi-objective optimizer 0.3.9 is also released. Binary builds are available from Clafer Tools - Binary Distributions.

            We also updated the plugin for Sublime Text 2/3.

            For details of changes see

            UPDATE: On Mar 30, 2015, we have updated the release of the chocosolver and ClaferChocoIG projects and uploaded new binaries. The chocosolver now implements the modulo division (reminder) function. Both now produce output consistent with ClaferIG --useuids --addtypes. The option --prettify is equivalent to having --useuids and not having --addtypes in ClaferIG.

              Saturday, March 7, 2015

              Clafer Tools in Sublime Text 2/3

              by Michał Antkiewicz

              Clafer Tools get new and improved integration with Sublime Text 2/3 (release 0.3.9), providing the following features:
              • Syntax highlighting of keywords, operators, comments, and integer and string literals
                • including the behavioral Clafer extension
              • Compilation <CTRL>+b
              • Instance generation (with simple scope inference) using
                • Alloy-based instance generator <CTRL>+i, g, a
                • Choco-based instance generator <CTRL>+i, g, c
                • Z3 SMT-based instance generator <CTRL>+i, g, s
              • Clafer binaries are now in a separate folder Packages/Clafer-Bin, so that they are not removed with every update of the Clafer Tools Sublime package.
              The package Clafer Tools 0.3.9 is now an official Sublime Text package available from the central package repository.  To install, follow the instructions in the README.

              Tuesday, January 27, 2015

              Clafer, ClaferIG, ClaferWiki, ChocoSolver, and ClaferChocoIG 0.3.8 Released

              by Michał Antkiewicz

              The Clafer compiler, Alloy-based instance generator, and wiki 0.3.8 are released on Hackage (clafer, claferIG, claferwiki). The Choco-based instance generator and multi-objective optimizer 0.3.8 is also released. Binary builds are available from Clafer Tools - Binary Distributions.

              Major changes include:
              • Allowed having both super and reference parts of a clafer declaration. See pull request.
              • Changed the intersection operator from & to ** to be consistent with ++ and --.
              • Prepared for module system and behavioral Clafer extension.
              • Fixed bugs in HTML and Graph generators.
              • Replaced soft constraint (...) with assertion assert [...]. Soft constraints were never supported in any backend.
              • Phased out Alloy4.1. Alloy 4.2 is now used by default as a compiler mode, for output validation, and instance generation in ClaferIG.
              • The claferwiki.sh script can now run the wiki from sandbox when given the parameter --sandbox.
              For detailed changes see pull requests: Clafer, ClaferIG, ClaferWiki

              Tuesday, January 20, 2015

              Explaining Clafer Semantics by Example

              by Michał Antkiewicz

              Learning a new language from abstract formal descriptions is hard when lacking strong mathematical background. In the attached presentation, I explain the semantics of Clafer in a simple and intuitive, and yet precise way. I focus on individual language constructs, show small model snippets, and explicitly write down instances of these models as sets and relations. I also explicitly evaluate expressions to show the mechanics of the language. The main goal is to illustrate the application of the abstract semantic rules to concrete cases. This way of presenting the semantics of a modeling language is complementary to the formal presentations.

              PowerPoint Slide Show
              2015.01.19-Antkiewicz-Clafer-Semantics-By-Example.ppsx

              Thursday, January 15, 2015

              Behavioral Clafer 0.4.0 Preview Release

              by Michał Antkiewicz

              We are currently working on the implementation of an extension to Clafer for modeling the evolution of model instances over time: "behavioral Clafer". We published a preview release in Clafer Tools Binary Distributions.

              Here's an example model of a PowerWindow system, which includes a feature model, an architecture model, a state machine, and positive and negative execution scenarios. The page is a HTML rendering of the source code in Clafer done by the extended behavioral Clafer compiler. The page was manually edited to add headers explaining the parts of the model.