Adobe Systems Incorporated

Welcome to is the home of the Adobe Source Libraries (ASL).

ASL provides peer-reviewed and portable C++ source libraries. The libraries are intended to be widely useful, leveraging and extending both the C++ Standard Library and the Boost Libraries. is maintained by Sean Parent, Mat Marcus, and Foster Brereton.


Latest News

November 4, 2010 ASL - 1.0.43 Release

I've recently returned to Adobe as architect for mobile imaging applications. The Software Technology Lab remains a "virtual group." We have a collection of improvements, fixes, updates, and additions that we've gathered over the last year and a half since the last release. My hope is to simplify the process and the libraries to something more managable and to get back to more frequent releases. Suggestions welcome.

A huge thanks to Foster and Mat who have continued to contribute to the libraries. Thanks much for your continued support!


Highlights of this release include: ASL:

  • Updated projects to support Boost 1.44.0
  • Simplified move library. Removed move_sink and copy_sink in favor of always using RVO.
  • Added the "to" token ("->") to the lexer
  • Added support for hexadecimal numbers to the lexer (0xDEADBEEF, 0xffe0, etc.)
  • Removed gil from ASL (clients can use boost version instead)
  • Added support for gcc 4.5.0 with -std=C++0x.
  • Updated to Visual Studio 2010, older versions not supported.
  • Extended the dancing links algorithm to include colorized nodes; updated test cases as well.
  • gcc 4.2 and OS X 10.5 SDK support (deprecated function warnings selectively disabled).
  • Replaced of basic_sheet_t with sheet_t in layouts and associated Eve grammar updates.
  • New external_model_t with support for cell creation in Adam parser.
  • once.hpp fix (Thanks John (Eljay) Love-Jensen)
  • Added support for overriding the index operator in the virtual machine.
  • Miscellaneous bug fixes.
  • Property model library

Added support for multi-out relate terms. For example: --- logic: relate { x, y <== [a, b]; a, b <== [x, y]; } --- The rhs value must be an array with the same arity as the number of cells named on the left. A cell can appear more than once on the left so long as the term can be uniquely selected.

User supported libs (APL):

  • Binary file format debugger (bffd) submitted
May 13, 2009 ASL - 1.0.42 Release

Highlights of this release include:

  • Property model library (Adam)
    • Changed filters (self referential expression on an interface cell) so they aren't ignored when the cell is derived from a relate clause (see Release Notes for details).
    • Fixed issue introduced in 1.0.41 with incorrect poison set being calculated for invariants.
    • Reworked invariant cells they now behave more like output cells and can be refered to in expressions.
    • Updated the image_size example to demonstrate an ignored/disabled control (resample method when not resampling).
  • Some 64 bit fixes and cleanup.
  • Minor cleanup, performance improvements and bug fixes.
February 13, 2009 ASL - 1.0.41 Release

Highlights of this release include:


  • Property model library (Adam) - rewrote main solver
    • no longer uses exceptions as flow control.
    • fixed bug with initializers that refer to cells with define_expressions has causing the define_expressions to evaluate which could refer to cells which had not been declared.
    • exported get() member, it is now the client responsibility to wire sheet_t::get() to the variable lookup in the VM (this also allows the clients to hook the variable lookup for supporting custom variables). In the future the VM will be separated entirely from the property model library.
    • added some more error reporting including reporting duplicate cell names.
  • virtual machine library
    • removed the contributing buts which were tracked through calculations. The VM stack is now just a stack of any_regular_t.
    • removed the use of storing size_t in an any_regular_t in the VM (was breaking serialization among other things because size_t is not a C++ basic type on Win64).
  • any_regular_t
    • improved serialization by removing one heap alloc/dealloc per item serialized, also uses logN search for type instead of linear search.
      • removed the hack to handle size_t serialization on Win64.
    • serialization will now throw an exception when it encounters a type other than one of the 7 CEL types (it used to assert).
    • in debug builds, the version field of the any_regular_t vtable contains a short type name for debugging purposes only. See the wiki documentation.
December 23, 2008 ASL - 1.0.40 Release

I have left Adobe and will be pursuing other opportunities. This release is my first as an "external" opensource contributor. Please use my mmarcus <at> emarcus <dot> org address instead of my former address.


Highlights of this release include:


  • The pmeval (property model evaluator) interpreter is ready for general purpose use. It has been enhanced to allow flexible exploration and testing of property models. Commands include check assertions, print statements, update, reinitialize, and property model dumps (showing enablement, contributing/intent). pmeval can be built from source (all platforms, including cygwinand *N*X) or downloaded from sourceforge for Mac or Windows.
  • Property models can also be evaluated via an experimental web form-based interface to pmeval. The service, along with an intermediate property modeling tutorial is available through .
  • Rewrote enablement for the property model engine. Enabled status is set to a conservative approximation of enablement detection (erring towards enablement): it is set to false if a change to the cell cannot affect the output of a correct sheet, and true if it *may* effect the output.
  • Replaced monitor_active with monitor_enabled (conservative enablement, touch_set support). See the documentation for monitor_enabled in adam.hpp, and the calls to monitor_enabled in (APL's) widget_factory.hpp for details. (Note that it is incorrect to unconditionally pass NULLs to monitor_enabled. The bug will manifest as incorrect enablement behavior in the presence of touch sets in eve sheets.)
  • Fixed bug where interface cells appearing in a when clause condition were not contributing.
  • New papers and presnetations at
  • Patched boost to allow preservation of test targets (now the default).
  • Patched to serializes std::size_t on MSVC when compiling for 64 bit architecture.
  • Added qualification to binary_search algorithm to remove ambiguity.
  • Refactored pmeval, introduced (test-only) queryable_sheet_t. pmeval now supports multiple input files, sheet separate from commands, multiple simultaneous sheets.
  • Allow monitoring of invariants under monitor_value.
  • Improved release notes and build scripts for *N*X/cygwin

User supported libs (APL):

  • Updated widget factory so that widgets monitor_considered instead of monitor_active, to properly enable in presence of touch sets.
  • Fixed reveal widget bug
  • Update so that both stlab and internal adobe frameworks can leverage widget_factory.hpp; also rolled in updates from other teams within adobe

More News...

Copyright © 2006-2007 Adobe Systems Incorporated.

Use of this website signifies your agreement to the Terms of Use and Online Privacy Policy.

Search powered by Google