Squid v0.3.0 Release Notes

Release Date: 2018-05-22 // almost 6 years ago
  • ๐Ÿš€ This pre-release of the Squid type-safe metaprogramming framework was focused on adding important features that were so far missing and consolidating existing ones, as well as aligning Squid's high-level interface with what was presented in our our POPL 2017 paper.

    Important new features:

    first-class variable: a more hygienic and convenient way of manipulating constructed and extracted bindings, a path-dependent-types-based alternative to the nominal system;

    cross-stage persistence: the ability to have code fragments capture references values in the current stage, to be used during later runtime compilation;

    ๐Ÿ‘ better support for context-unsafe metaprogramming: i.e., better support for programming without having to deal with contexts (using OpenCode[T] only), in a way that does not compromise the soundness of the rest of the system;

    โšก๏ธ compile-time code execution: the ability to compose and execute code at compile time, useful for communicating configurations to Squid macros in a reliable and uniform way โ€“ currently only used in StaticOptimizer, but will be used by the quasiquotes and by Squid macros in the future; for examples, see the tests;

    Other main changes and improvements:

    ๐Ÿ‘ Scala 2.12 support

    renaming of IR[T,C], IRType[T] and ir"..." to respectively Code[T,C], CodeType[T] and code"..." โ€“ and similarly for other types and functions; introduction of OpenCode[T] and ClosedCode[T] type synonyms;

    ๐Ÿ›  type extraction improvements using ranges, which finally fixes some frustrating match failures that were due to subtyping subtleties;

    โฑ reimplementation of the scheduling algorithm of SchedulingANF, removing the problems of the old (broken) one;

    ๐Ÿšš move to SBT 1.1;

    โž• addition of a LoggingOptimizer trait to facilitate dumping compile-time code optimization info;

    renaming of squid.lib.Var to squid.lib.MutVar to avoid confusion with the new Base#Variable datatype.