Skip to content

Latest commit

 

History

History
1299 lines (846 loc) · 44.4 KB

ReleaseNotes.md

File metadata and controls

1299 lines (846 loc) · 44.4 KB

PLEXIL Release Notes

6.0 (in development)

This is a major release, with significant additions and many incompatible changes from the 4.x series releases. Some existing plans may work with recompilation. However, both plans and applications will likely need significant revision.

Highlights of this release:

  • The authoritative source code repository is now at GitHub. The previous SourceForge Git repository will be maintained as a mirror for the time being. However, users should switch to using GitHub at their earliest convenience.

  • A C++11-compliant compiler is required.

  • CMake build system support for the Executive is much improved.

  • A Mutex facility has been added to the PLEXIL language

  • Resource contention resolution has been reimplemented and unified.

  • The Application Framework API has been heavily revised.

Known bugs

Many of these are carryovers from the PLEXIL 4.6 release.

  • The Standard PLEXIL compiler does not correctly report the locations of errors detected in source files compiled with preprocessing (.plp files). As a workaround, the compiler script no longer deletes the intermediate .ple files generated by the preprocessor.

  • The PLEXIL Viewer GUI debugging environment remains alpha quality at best.

  • The Executive's XML parser module test suite was broken when the parser was modified from a 2-pass to a 3-pass algorithm. This should not directly affect users. However, it means some parser bugs may not be detectable at module test time.

Packaging

  • A new Git repository has been established at GitHub. This repository should be used in preference to the older SourceForge repository.

  • The pugixml package is now included as a Git submodule. Previously it had been part of the PLEXIL repository. Applications incorporating PLEXIL will need to update their build procedures to account for this.

  • All symbolic links have been removed from the source code repository. This should ease building PLEXIL on platforms such as Microsoft Windows Subsystem for Linux, or on file systems which do not implement POSIX symbolic link semantics.

Core PLEXIL (XML) language, schema, and XML processing tools

Incompatible changes

  • Resource acquisition and resource contention resolution have been extended and unified.
  • A new Mutex facility implements a simple Boolean mutex. This allows for explicit serialization of shared resources.

    The DeclareMutex element may appear within GlobalDeclarations and VariableDeclarations elements. The global declaration variant declares a globally visible Mutex, which can be referenced by multiple plans. The Node variant declares a Mutex visible only to that node and its descendants.

    The UsingMutex element can appear inside a Node element. The Node cannot transition from WAITING to EXECUTING unless the Mutex is available. Once a Mutex is acquired, the acquiring Node will hold the Mutex until it transitions to ITERATION_ENDED. No other Node can acquire the Mutex until it has been released.

    It is an error to recursively acquire a mutex which is already held by a containing node.

  • Resource contention resolution for Variables, Mutexes, and command Resources has been unified.

    In prior PLEXIL releases, Assignment variables and Command resources were handled independently of one another. If multiple Assignment nodes assigning to the same variable at the same priority were eligible to transition at the same time, the Executive would assert and crash. Command nodes could fail to acquire resources without the Command node failing. And there was no contention resolution between Assignment and Command nodes assigning to the same variable.

    Now, all 3 resource types are handled in the same fashion. Multiple nodes waiting on the same resource at the same priority will be executed in sequence, in an arbitrary order. No Node can transition to EXECUTING until all of its resources can be acquired.

  • The Priority element, formerly relevant only for variable assignments, now also applies to any node with a UsingMutex, and to Command nodes.

  • The ResourcePriority element for command resources has been removed. Use the Node Priority element in its place.

Other changes

  • The ResourceLowerBound element for command resources has been removed. The resource arbiter had never implemented the corresponding functionality, so this is unlikely to break any PLEXIL applications.

  • All PLEXIL schemas are now represented as XML Schema 1.1. This allows for a more compact representation.

  • A new schema validator supporting XML Schema 1.1 has been incorporated in the distribution. See the release 4.6 release notes for details.

  • Saxon Home Edition (HE) has been updated to release 11.4.

  • A more compact XML representation is in development, as are translators between the old and new representations.

Extended PLEXIL (XML) language, schema, and translator

  • The SynchronousCommand macro now implements a Checked option. See the release 4.6 release notes below for details.

  • Extended PLEXIL has been updated to properly handle the new Mutex elements.

Standard PLEXIL (C-like) language and compiler

  • Mutexes have been added to the Standard PLEXIL language:
  • The Mutex statement declares one or more mutexes. It can appear at the top level of a Standard PLEXIL file (adjacent to other global declarations), or within a Node.

  • The Using statement represents mutex acquisition, and references one or more pre-declared mutexes. It can only appear within a Node.

  • SynchronousCommand now implements a Checked option. See the release 4.6 release notes below for details.

  • The Standard PLEXIL compiler does a better job of recognizing superfluous braces, and generates more compact Core PLEXIL XML as a result.

Executive core and Universal Executive

External interfaces

  • External interfacing has been refactored. The former adapter-centered implementation has been replaced with a hander-centered implementation.

Standard interface library

  • The TimeAdapter has been refactored. The TimeAdapter class itself should now be largely platform-independent. Timer functions are delegated to a Timebase abstraction. Concrete Timebase implementations are included for the POSIX Advanced Timer API (most Linux distros), Grand Central Dispatch (macOS), and the older POSIX Itimer API (most other Unix-like platforms).

  • The UdpAdapter has been reimplemented. Instead of a listener thread per message, it now uses a single worker thread to handle incoming packets.

  • The IpcAdapter is deprecated, due to lack of maintenance of the CMU IPC package.

  • The Gantt chart facility has been removed from the PLEXIL distribution.

Executive internals

Plexil Viewer

Other tools

Examples

4.6d0 (in progress)

This is a major point release, with significant revisions. Old plans should continue to work without recompilation; however, recompilation is advised to take advantage of optimizations and bug fixes. Likewise, user-defined interfaces should be reviewed, and recoded if appropriate, for the new application framework APIs.

Known bugs

  • The Standard PLEXIL compiler does not correctly report the locations of errors detected in source files compiled with preprocessing (.plp files). As a workaround, the compiler script no longer deletes the intermediate .ple files generated by the preprocessor.

  • The PLEXIL Viewer GUI debugging environment remains alpha quality at best.

  • The Executive's XML parser module test suite was broken when the parser was modified from a 2-pass to a 3-pass algorithm. This should not directly affect users. However, it means some parser bugs may not be detectable at module test time.

Packaging

  • Plexil source code has been migrated from a Subversion repository at Sourceforge, to Git repositories at GitHub and Sourceforge. The GitHub repository will be the authoritative source going forward. The Sourceforge Git repo will be maintained as a mirror for an indefinite period. The old Subversion repo has long since been frozen.

  • Symbolic links have been removed from the source code tree. This was done to facilitate use on platforms such as Microsoft Windows Subsystem for Linux.

  • Support for the CMake build system has been added. This should simplify integration of the PLEXIL Executive into projects using this popular build system.

  • Both GNU autotools and CMake build systems now support building the C++ executive in both statically and dynamically linked configurations. Continuous integration now tests both build systems in both configurations at every commit.

  • make distclean at the top level of the PLEXIL distribution should delete all build artifacts, including GNU autotools-generated files. This can be useful when an existing checkout (Git clone) is updated, and incompatible changes have been made in the source tree or build system.

  • The C++ code base has been scanned by 'include-what-you-use' (https://github.com/include-what-you-use/include-what-you-use), and a number of #include statements have removed. Subsequent testing determined that include-what-you-use results are highly specific to the compiler, library, and OS environments in which it is run. Consequently a number of #include statements had to be restored to ensure portability. In the event that compilation fails because of missing #include statements, please send a report to [email protected], and include a description of the build environment.

Core PLEXIL (XML) language, schema, and XML processing tools:

  • The schemas.xml files which had been scattered across the Plexil distribution have been unified. The authoritative schemas.xml file is in the schemas directory. All others now refer to that authoritative copy. This resolves the conflicts between the various copies of this file.

  • The literal constants COMMAND_ABORTED, COMMAND_ABORT_FAILED, and COMMAND_INTERFACE_ERROR are now accepted as legal NodeCommandHandle values.

  • A new schema validator written in Python 3 has been integrated into the compiler and translator test suites. The new validator supports XML Schema Definition (XSD) 1.1. It replaces xmllint, which only supports XSD 1.0. The use of XSD 1.1 allows more flexibility in the definition of the Core and Extended PLEXIL XML schemas.

    The validator requires at least Python 3.5, and uses the open-source xmlschema package:

    https://github.com/sissaschool/xmlschema https://xmlschema.readthedocs.io/en/latest/

    The validator can be found at schemas/validator. See the README.md file in that directory for instructions.

  • The Python schema validator is no longer solely dependent on the venv and ensurepip packages; it now looks for either virtualenv or venv, and prefers virtualenv if both are found. This change was made for portability reasons; several major Linux distributions provide at best partial support for venv, despite it being part of the standard Python 3 library from release 3.5 on.

  • The XSD-to-RelaxNG converter has been updated to the most recent release.

  • Some minor issues in the schema files, discovered when the RelaxNG conversion was updated, have been fixed.

Extended PLEXIL (XML) language, schema, and translator

  • The SynchronousCommand macro now implements a Checked option. The wrapper NodeList node of a SynchronousCommand with the Checked option fails if the wrapped Command node fails. A bug in the Timeout option has also been fixed, and the schema amended to locate the Tolerance option inside the Timeout element. See the Extended PLEXIL schema (schema/extended-plexil.xsd) for the syntax, and the translator test suite for examples. Thanks to J. Bohren of Honeybee Robotics for the suggestion.

  • The Do macro implements a classic 'do-while' loop. The translator test suite has been extended with examples.

  • The Extended PLEXIL translator has been broken out into a number of smaller XSLT files for easier maintenance, and moved to the new directory schema/epx-translator.

  • The Saxon Home Edition XML processor used in the Extended PLEXIL translator, Standard PLEXIL compiler, and schema format translation has been updated to release 11.4.

  • The Extended PLEXIL schema previously did not comply with the XML Schema 1.0 specification. This has been corrected.

Standard PLEXIL (C-like) language and compiler

  • SynchronousCommand now implements a Checked option. See the description in the Extended PLEXIL section above. Thanks to J. Bohren of Honeybee Robotics for the suggestion.

  • A Do {...} While () loop has been added to Standard PLEXIL. The compiler test suite has been extended with examples.

  • LibraryNode has been added as a synonym for LibraryAction, by popular demand.

  • Backward compatibility has been improved for the If statement. The compiler now properly supports both modern (C-like) and backward compatible (If ... Then ... Elseif ... Else ... Endif) syntaxes. The Endif keyword, if present, is treated as a noise word; any trailing semicolon after Endif is also treated as a noise word. New Standard PLEXIL plans should use the C-like syntax.

  • The literal constants COMMAND_ABORTED, COMMAND_ABORT_FAILED, and COMMAND_INTERFACE_ERROR are now accepted as legal NodeCommandHandle values.

  • The Standard PLEXIL compiler now parses ISO 8601 date and duration syntax, and will complain about invalid Date or Duration literals.

  • Expressions of indeterminate type at compile time (e.g. Lookup of an undeclared state name) are now legal as Command name expressions. They will still generate a run time error if the expression does not return a String.

  • Minor improvement in optimization of trivially collapsible Nodes.

  • The Standard PLEXIL compiler can now generate either formatted or unformatted XML output. Unformatted is the default; formatted output is selected by the -p or --pretty-print command line option to the plexilc compiler driver.

  • The Standard PLEXIL compiler test suite no longer uses xmllint. It now uses the compiler's built-in output formatting instead.

  • The Standard PLEXIL compiler replaces the long-obsolete nanoxml Java library with Saxon Home Edition. All XML output from the compiler is now generated via Saxon. The translation from Extended PLEXIL to Core PLEXIL has also been integrated into the compiler, where it had previously been implemented in a separate script run as a post-processing phase.

  • The ANTLR 3 jar file has been updated to release 3.5.3.

  • Apache ant has replaced GNU make as the build tool for the Standard PLEXIL compiler.

  • A host of minor fixes have been made to the compiler and its test suite.

  • Many additional internal cleanups and improvements.

Executive core and Universal Executive

  • The literal constants COMMAND_ABORTED, COMMAND_ABORT_FAILED, and COMMAND_INTERFACE_ERROR are now accepted as legal NodeCommandHandle values.

  • The PLEXIL plan parser now does more thorough checking of the plan being loaded.

  • A serious bug in the plan parser was fixed.

Standard interfaces:

  • UUID generation for the IpcAdapter is now done using the POSIX standard randomness generator /dev/urandom. The old code depended on a third-party software package, ooid, which hadn't seen updates in years.

  • Utility adapter commands print() and pprint() now correctly send a command handle value of COMMAND_SUCCESS when they return. Previously this had been omitted, resulting in some plans failing to terminate after a print() or pprint() command.

  • The Dummy adapter has been removed; the behavior it implemented is now the default. References to it should be removed from interface configuration files.

  • LuvListener (the PLEXIL Viewer interface) should no longer print MARK at startup. A segfault bug has been fixed.

  • GanttListener is deprecated, and will be removed in a future release.

External interfaces:

  • The PLEXIL Application Framework has been completely overhauled, in a backward-compatible fashion. Interface adapters no longer have to dispatch on Command or Lookup names.

    The new API allows commands and lookups to be dispatched to handlers, functions or class instances which can be specialized to particular commands and lookups. Handlers can be registered to specific Command and Lookup names.

    Existing InterfaceAdapter specializations will continue to work in PLEXIL 4 series releases. However, the forthcoming PLEXIL 6 release will eliminate InterfaceAdapter::executeCommand(), InterfaceAdapter::lookupNow(), and related APIs, in favor of a handler-based API similar to the one introduced in this release.

  • The ExecListener API has one incompatible change. Was:

    void implementNotifyNodeTransition(NodeState prevState, Node *node) const;

    Now is:

    void implementNotifyNodeTransition(NodeState prevState, NodeState newState, Node *node) const;

    The rationale: Exec listeners were previously called to report node state transitions immediately after the transitions were performed, during the exec's micro cycle. The new state could be obtained directly from the node.

    Now, for efficiency reasons, node state transitions are batched and reported at the end of the macro cycle. By that time the state of the node may have changed multiple times. So it is now necessary to save and explicitly pass both old and new states to the listener.

  • New function ExecApplication::allPlansFinished() returns true when at least one plan has been started, and all plans which had been started have finished.

Executive internals:

  • Dynamic exception specifications have been removed from the C++ code, as they have been deprecated in the C++ language for some time.

  • The pugixml library is now incorporated as a Git submodule.

  • Various other internal cleanups.

Plexil Viewer:

  • The Viewer remains in an alpha quality state, due to lack of resources to thoroughly test and debug it. Bug reports are welcomed at [email protected].

Other tools:

  • The StandAlone Simulator has been reimplemented, and now supports more return types for Commands and Lookups. The updated simulator script format is documented in src/apps/StandAloneSimulator/README.md. An example using the new script format can be found in the directory src/apps/StandAloneSimulator/test.

  • The Plexilisp translator is deprecated, and will be removed in a future release.

  • The Plexilscript compiler now properly handles the delay operator.

  • Copyright notices have been added to all the Java files in the Plexilscript compiler.

  • The TestExec regression suite scripts are now all generated by the Plexilscript compiler. Previously, some of the .pst files in the test/TestExec-regression-tests/scripts directory were notional, and did not compile to the corresponding hand-generated .psx files.

  • Some long-unused plans and simulator scripts in the TestExec regression suite have been removed.

  • Many of the shell scripts in the distribution have been checked with the shellcheck static checker, and consequently many actual and potential bugs have been fixed. Most scripts which had previously required GNU Bash now use only POSIX standard Bourne shell features. These changes should improve portability to POSIX-compliant platforms which lack Bash, or which use an obsolete version of Bash. Thanks to 2020 summer intern Bryce Campbell, whose testing on Microsoft Windows Subsystem for Linux motivated this cleanup.

  • Many of the shell scripts no longer require PLEXIL_HOME to be set, and the plexil-setup.sh script to be sourced, prior to script execution. Instead, the scripts will make an educated guess about its value, and will report an error if the guess is wrong.

  • The file utilties/plexil-mode.el implements a Standard PLEXIL editing mode in GNU Emacs and compatible Emacs variants. It is based on the cc-mode package. This is an enhancement of a project started by summer 2020 intern Devin Wright.

Examples:

  • The new Checkpoint example introduces a capability for a PLEXIL plan to record its progress, and if execution is aborted, to pick up where it left off on a subsequent run. Thanks to summer 2020 intern Albert Kutsyy for this addition.

  • Both the visual display and the plans for the Robosim example have been improved. The new CaptureTheFlag plan, and the updated FindGoal plan, demonstrate the improvements nicely. Thanks to summer 2020 intern Bryce Campbell for this work.

  • Two examples of user-defined interfacing, sample-app and sample-app1, have been merged into one, simply named sample-app. Credit to summer 2020 intern Devin Wright for the merger.

  • Several of the examples previously did not work with the current version of the PLEXIL Executive. Most of them have been fixed. Several have been augmented with new scripts to run the examples, and/or with debug configuration files to make it clearer what the Exec is doing in the example.

Source code repository migrations

  • A new Git repository has been established at GitHub. This repository should be used in preference to the SourceForge repo.

  • A Git repository was established at SourceForge to replace the previous Subversion repository.

  • Subversion revision 5368, on 12 Jun 2020, was the last commit on the old SVN repository. The repository was set to read-only after that date.

4.5.0RC3 (17 Sep 2019, SVN revision 5117 of plexil-4 branch)

This is primarily a bug-fix release, with a small number of new features compared to 4.5.0RC2.

Packaging

Core PLEXIL (XML) language and schema

  • Implemented node state predicates Executing, Finished, Inactive, IterationEnded, NoChildFailed, Succeeded, and Waiting.

  • DeclareVariable and DeclareArray now accept variable references as well as literals as initial values.

Extended PLEXIL (XML) language and translator

  • Fix elseif construct to generate correct Core PLEXIL code.

  • New action CheckedSequence, with semantics identical to Sequence. The intent is to reimplement Sequence as UncheckedSequence in a future release.

  • Implemented node state predicates Executing, Finished, Inactive, IterationEnded, NoChildFailed, Succeeded, and Waiting.

Standard PLEXIL (C-like) language and compiler:

  • Building the compiler for Java 6 is no longer supported. Java 8 or newer is required.

  • New action CheckedSequence, with semantics identical to Sequence. The intent is to reimplement Sequence as UncheckedSequence in a future release.

  • Implemented node state predicates Executing, Finished, Inactive, IterationEnded, NoChildFailed, Succeeded, and Waiting.

  • DeclareVariable and DeclareArray now accept variable references as well as literals as initial values.

  • Added plexilpp script. plexilpp runs the C preprocessor on Extended Plexil code prior to compilation.

  • The plexilc script now recognizes .plp as Extended Plexil with preprocessor directives, and runs plexilpp on such files.

Executive core and Universal Executive:

  • Major improvements to XML parser. Reloading library nodes is now faster, as most checks are now done once at the first time a library is loaded.

  • Continued improvements in memory and CPU time usage.

Standard interfaces:

  • Refactored TimeAdapter.

  • Cleaned up word size confusion in UdpAdapter.

Executive internals and user-defined interfaces:

  • Refactoring of Exec internals to separate interfaces and implementations.

  • The expression parser now uses dispatch code generated by the gperf perfect hash utility. gperf is now a prerequisite for compiling the PLEXIL Executive from source

  • Improved compatibility with a variety of compiler versions.

  • Cleanup in autoconf files.

Plexil Viewer:

  • Fixed a couple of showstopper bugs which prevented users from running the Viewer.

Other tools:

  • Port most shell scripts from GNU Bash to portable POSIX (Bourne) shell syntax.

Examples:

  • Recompiled example plans to match changes in the PLEXIL language.

4.5.0RC2 (24 Aug 2018, SVN revision 5011 of plexil-4 branch)

This is a major evolutionary update, featuring improvements and fixes throughout.

Packaging:

  • The top-level Makefile's all target builds most of what the default target did previously. New target essentials builds only executables, translators, standard adapters and listeners, Plexil Simulator, and Checker. New target tools builds executables, translators, adapters and listeners, Plexil Simulator, checker, and Plexil Viewer. The default target is now tools.

  • Top-level Makefile no longer assumes gcc and g++ are the C and C++ compilers. Like most Makefile-based packages, the values of environment variables CC and CXX are used. If these are not bound, 'cc' and 'c++' are used by default. The development team routinely builds PLEXIL with a variety of gcc and clang (llvm) versions.

  • Most, if not all, GNU autotools-generated files have been removed from the Subversion repository. Likewise, most .plx files have been deleted from the examples directories. Both are easily regenerated from source when needed.

  • Distribution tarballs now include a number of prebuilt files: a configure script, along with the required autotools files; ExpressionMap.hh, generated by gperf; and Java jar files for the compilers, type checker, and PLEXIL Viewer.

  • Less verbose build process.

  • This release incorporates pugixml version 1.9 and Saxon Home Edition release 9.7.0.21.

Core PLEXIL (XML) language and schema:

  • New wildcards Any type and optional AnyParameters element in command and state declarations.

  • New command handle value COMMAND_INTERFACE_ERROR, returned when an interface adapter causes an error while processing a command.

  • New array accessor ArrayMaxSize.

  • Equal and NotEqual are now also implemented for arrays.

  • Schema files now incorporate DTD references.

Extended PLEXIL (XML) language and translator:

  • Tolerance for the Wait operator now defaults to the requested delay time (was 1 second).

  • Translator now generates Core PLEXIL XML output without indentation. This dramatically reduces the bulk of large plans. The xmllint utility, available on most platforms, can generate formatted output when required:

    xmllint --format myPlan.plx > myPlan-formatted.plx

Standard PLEXIL (C-like) language and compiler:

  • The compiler itself is now compiled to Java 1.6 bytecodes, to allow use on legacy platforms.

  • Output now incorporates the <Any> type and <AnyParameters> declarations added to the schema. We recommend you recompile any Standard Plexil plans.

  • Node-reachable semantics were made consistent with the executive's.

  • Optimization phase performs more optimizations.

Executive core and Universal Executive:

  • Many major bugs and memory leaks have been fixed.

  • Many non-fatal errors that used to halt the executive now warn instead.

  • Run-time type errors are now reported with "expected type X, but got type Y" messages.

  • More plan errors are detected at plan load time, so they won't crash the executive.

  • The Executive now parses and checks against global command and state declarations at plan load time.

  • LibraryNodeCall nodes can now reference the called node in conditions.

  • Executive working memory and plan parser stack usage have been reduced. Many additional speed and space optimizations have been implemented.

  • The source code takes advantage of C++11 features when available.

Standard interfaces:

  • Commanding via UdpAdapter has been made more robust.

  • The UtilityAdapter adds print() and pprint() commands.

  • The native time adapter has been made more robust. In particular, it fixes a missed-wakeup bug observed on macOS.

  • New Launcher adapter allows plans to load and run other plans, and query their status. See examples/launcher for a simple demonstration.

TestExec:

  • Initial states are no longer ignored when a LookupOnChange references them.

Executive internals and user-defined interfaces:

  • The LookupNames interface configuration element adds a TelemetryOnly attribute. LookupNow for these names will not call the adapter's lookupNow() method, but instead get values from the state cache.

  • The lookup state cache now stores all values received via InterfaceManager::handleValueChange(), whether or not the supplied state has ever been looked up before. This change was implemented to support TelemetryOnly.

  • Typedef abstractions Boolean, Integer, Real, and String have been defined in the PLEXIL namespace. User interface code should use these type names in preference to bool, int, int32_t, double, and std::string. This will help insulate user-defined interfaces from platform dependence and future changes to those abstractions.

  • Serialization and deserialization for PLEXIL data types has been implemented. This will be the basis of a new inter-application communication package in a future release.

Other tools:

  • There is a new analyzePlan command line executable. It reads in a plan file (and any referenced libraries), and prints a number of statistics about that plan.

  • A new Plexil decompiler, implemented as an XSLT script, converts Core PLEXIL XML to Standard Plexil (C-like syntax). Thanks to Ryan Adolf.

Plexil Viewer:

  • The Viewer has been rewritten to support multiple plan windows at once, consistent with the Universal Exec's ability to run multiple plans simultaneously. As this is a work-in-progress, we appreciate any reports of problems in the Viewer.

Examples:

  • Makefiles in the examples directories have been significantly cleaned up.

  • New Launcher adapter example in examples/launcher

  • The RoboSim GoalSearch1 plan now actually reaches its goal!

4.0.1 (17 June 2015; SVN revision 4357 of the plexil-4 branch)

  • The PLEXIL suite now builds "out of the box" on FreeBSD. Most tools work correctly, however IPC is not yet working on FreeBSD.

4.0.0 (15 June 2015; SVN revision 4336 of the plexil-4 branch)

  • Please see the README file for up-to-date build instructions.

  • The Executive core has been reimplemented for speed and memory safety.

  • Real-to-Integer conversion functions have been added.

  • The external interfacing API has changed.

  • The Standard PLEXIL compiler now has an optimization phase, which performs 'peephole' optimizations where possible.

  • Extended PLEXIL now translates to smaller Core PLEXIL plans in many instances.

  • Shell scripts plexil, plexilexec, plexiltest, plexilsim have been revised, with improved checking for free TCP ports to use with the PLEXIL Viewer.

  • The PLEXIL Viewer has been significantly improved. It now requires Java 8.

  • The PLEXIL Checker has been updated and significantly improved.

  • Tests and examples have been updated and cleaned up.

3.0 (March 14, 2014; SVN revision 3336 of the plexil-3 branch)

  • NOTE:

  • Please see the README file for up-to-date build instructions.

  • Please see the CAVEATS file, as this release has a bunch!

  • Significant improvement of PLEXIL Executive's performance (memory usage and speed).

  • Revamped build system, now based on GNU's autoconf and automake, to better support cross-platform builds.

  • Revamped directory structure of distribution.

  • Significant improvements to the Gantt Temporal Viewer.

  • Numerous miscellaneous bug fixes and enhancements.

2.5 (July 16, 2012; SVN revision 2851)

  • Added ExitCondition to PLEXIL nodes. This provides a clean way to deliberately terminate a plan. New outcome and failure type constants and variables were added to support ExitCondition. The new user syntax and Plexilisp have been updated to match.

  • Additional performance enhancements to the executive.

  • Completely revised node state transition diagrams. The diagrams now accurately reflect the exact behavior of the executive, which is also its specified semantics.

  • Assignment node execution and failure are better behaved. Failure of an Assignment node causes the variable's previous value to be restored (the old behavior was to assign UNKNOWN). Failing Assignment nodes always take priority over any eligible Assignment nodes on the same variable.

  • Minor improvements to the InterfaceAdapter API.

  • The PLEXIL_OPTIMIZED build flag is confirmed working. This flag can be used to improve runtime performance for time-critical applications. The PLEXIL_DEBUG and PLEXIL_OPTIMIZED flags can be used together for debugging purposes. See makeinclude/standard-defs.make for details.

  • Cleaned up a number of compiler warnings in the C++ source code.

2.0 (May 4, 2012; SVN revision 2762)

IMPORTANT NOTE: This release has several features that are not compatible with 1.x based PLEXIL applications. 1.7.1 is the latest version of PLEXIL available prior to 2.0. It reflects the state of PLEXIL's SVN trunk prior to February 6, 2012, and is available on this SVN branch:

https://plexil.svn.sourceforge.net/svnroot/plexil/branches/plexil-1.7.1

Please note that the Core PLEXIL XML representation has not changed. Old .plx files will continue to work unmodified in Plexil 2.0.

  • Completely revised user syntax: simpler, much more compact. The old syntax is no longer supported, however, at present you can compile your Plexil code using Plexil version 1.x and run the output (.plx files) in 2.0.

  • Significantly faster PLEXIL Executive, with major speedups in XML parsing (see below), construction of internal representations, and execution proper.

  • The TinyXML parser has been replaced by pugixml, which proved 20x faster in our testing. This was a major contributor to the improved performance of the executive.

  • New, simpler interfacing APIs.

  • The Plexil executive's behavior conforms more closely to its formal specification.

  • New arithmetic functions MOD, MAX, MIN.

  • Numerous bug fixes and enhancements throughout system.

1.7 (September 14, 2011; SVN revision 2471)

  • Added support for Android operating system

  • Refactored README file, added Versions file

  • New Gantt-style temporal viewer for executed plans

  • New UDP-based adapter for external communication

  • Signficant code refactoring and performance enhancements

  • Numerous bug fixes, minor enhancements, and better robustness throughout system

1.6 (December 2010, SVN revision 1959)

  • Plexil executive and interface
  • New "utility" interface adapter, which introduces built-in commands to PLEXIL. The first such commands are for printing from a plan (print, pprint).

  • Variable updates from command return values are now published (e.g. display in Plexil Viewer)

  • Plexil Viewer:
  • fixed and enhanced the Configuration Dialog

  • added an interface for selecting library plans

  • misc fixes and enhancements

  • Plexilisp:
  • added the SynchronousCommand (synchronous-command) form

  • revised the Wait form, adding a tolerance parameter

  • fixed bug in handling of newlines in strings

  • Plexil XML schemas
  • Added Wait and SynchronousCommand (user syntax to come in next release)

  • fixed XSD schema files to work with xmllint

  • added file locator attributes to aid in source debugging

  • added Relax NG versions of some schemas

  • Plexil syntax
  • A major revision of Plexil's user syntax is largely implemented in this release, though is still in a refinement and testing phase and not yet documented or officially supported.

1.5 (October 2010)

  • Extensively revised user manual
  • PLEXIL is now presented as a language of high level Actions, of which Core PLEXIL (nodes) is the executable subset. I.e. PLEXIL is now Core PLEXIL plus syntactic extensions (formerly called Extended Plexil). There are no changes to Core PLEXIL, and existing Plexil plans are fully compatible.

  • Changes to long-standing PLEXIL nomenclature:

  • "Universal Executive" is now "Plexil Executive"

  • "Extended PLEXIL" is now just "PLEXIL"

  • "LUV" is now "Plexil Viewer"

  • "Standalone Simulator" is now "Plexil Simulator"

  • Reorganized; many chapters expanded and corrected
  • New and refactored set of commands for Plexil related applications:
  • plexilexec starts the Plexil Executive, replacing run-ue

  • plexiltest starts the Test Executive, replacing run-te

  • plexilsim runs the Plexil Simulator in one step

  • plexil (formerly the Plexil translator) replaces luv

  • plexilc replaces the former plexil and is an all-purpose translator:

  • translates (standard) Plexil into XML

  • translates Test Executive simulation scripts into XML

  • translates Plexilisp files into XML

  • Enhancements to the Plexil Viewer
  • new Configuration Dialog to select Plexil application and its parameters

  • new Plexil logo

  • Plexil syntax improvements:
  • all-purpose Lookup form obviates need for LookupNow, LookupOnChange

  • OnCommand, OnMessage forms more consistent with other actions

  • uniform usage of colons in action bodies

  • Rewrote Plexil Simulator internals, fixing Mac OS issues

  • Plexilisp improvements:

  • Sequence forms can now contain any attributes, and also structured comments.

  • In command-with-return, reversed order of state name and return variable.

  • Greatly revised examples
  • New small, complete Plexil Executive application in src/apps/sample

  • new multiple-executive plan examples in plexil/examples/multi-exec

  • existing examples revised to use high-level actions where possible

  • New file extension requirements for Test Executive simulation scripts
  • Source files: .pst

  • Translated (XML) files: .psx

  • Numerous misc. fixes and enhancements throughout system

1.2.1 (August 2010)

  • IPC-related applications (Robosim, Standalone Simulator, and any user-created applications that use IPC) now work in Mac OS

  • Enhanced PLEXIL viewer (LUV):

  • Array variable assignments now shown; dynamic and expandable views

  • Current port displays in bottom right corner

  • Misc. minor redesigns and internal refactorings

  • Performance enhancements yielding a much faster executive

  • Revised startup scripts (new command line options)

  • Try form will no longer hang if no child succeeds

  • New summarize-plexil utility for producing a compact textual representation of a Plexil XML file

  • Misc enhancements, fixes, and refactorings throughout system

1.2 (June 2010)

  • Support for Ubuntu Linux

  • LUV (execution viewer) enhancements

  • multiple instances possible, one for each executive

  • automatically started, when requested, from run-ue and run-te scripts

  • Extended PLEXIL:
  • new all-purpose Lookup form

  • SkipCondition now handled correctly in sequences

  • OnCommand, OnMessage fully integrated

  • Allow string expressions, and arrays, as command arguments

  • Cleanup of TestExec regression tests

  • Cleanup of XML schemas

  • Revision of DriveToSchool example

  • Miscellaneous fixes throughout system

  • Reference manual revision

1.1 (April 2010)

  • Added signficant support and language features for inter-executive communication, with a new chapter on this feature. In particular, executives can send (and respond to) messages, commands, and state lookups amongst each other.

  • Greatly simplified the interfacing of the PLEXIL executive with external systems, with a new chapter on this. In particular:

  • universalExec executable replaces most UE application executables.

  • Interface adapters and exec listeners can be loaded dynamically from shared libraries at runtime, and no longer need to be built into the executable.

  • Interface manager now has getProperty() and setProperty() to allow communication of arbitrary data between the application, adapters, and listeners.

  • Exec listeners and exec listener filters' constructors are now called with a 2nd argument, a reference to the interface manager.

  • The LCM (Lightweight Communications and Marshalling) package has been completely replaced by CMU's IPC (Inter-Process Communication). The applications that formerly used LCM (standalone simulator, Robosim) now use IPC.

  • The run-ue script now runs universalExec, and a new run-te runs the Test Executive. Both can optionally run the PLEXIL static checker first.

  • The luv script can run either the TestExecutive (default) or UniversalExec.

  • New Plexilisp Emacs menus (courtesy of Robert Goldman at SIFT).

  • Numerous miscellaneous fixes, enhancements, and code refactorings across the entire system.

  • Much revision of the reference manual.

1.0

  • Revamped source code directory structure.

  • Replaced Perforce jam with make as the system's build tool.

  • Added a new application IpcExec, allowing multiple communicating executives.

  • Added CMU's "IPC" system to support IpcExec, and future planned applications.

  • Numerous small fixes and enhancements throughout the system.

Caveats:

  • Standalone Simulator may not work in Mac OS and some versions of Linux, due to errors in the LCM library. LCM is in the process of being replaced by IPC.

  • A PDF version of the user manual, normally included in the distribution, is not available; we are seeking a means to create one from the new wiki system used by Sourceforge.

0.91

  • Deprecated Function Call node.

  • Added jam executables in plexil/bin

  • Added support for testing node iteration outcome.

  • Extended Plexil: added Concurrence form; bug fixes

  • Plexilisp: added Wait, Concurrence; action forms can now contain nodes or node bodies; empty sequences are properly supported

  • XML schema updates

Caveats:

  • Standalone Simulator may not work in Mac OS and some versions of Linux, due to errors in the LCM library. The problem is being worked on.

0.90

  • New application framework, revised external interfaces, and simple test application using both. See the app-framework directory. The existing external interfaces are unchanged from the previous release, but are deprecated.

  • Standard Plexil no longer supports hyphenated variable names. Hyphenated variables may be supported in a future release.

  • Standalone simulator now supports telemetry and has a test executive.

  • New Extended Plexil language: schema, translator, examples.

  • Plexilisp has several new constructs and generates Extended Plexil

  • Refactoring of Plexil schemas.

  • New enhancements and bug fixes to the Luv Viewer.

  • Top level Makefile and simplified build and installation instructions.

  • Numerous small enhancements and bug fixes throughout code base.

0.84

  • new component: a standalone simulator for PLEXIL.

  • new component: static checker for PLEXIL.

  • added global declarations (for static plan checking) to schemas and Plexilisp

  • additional workshop slides

  • easier setup for Plexilisp

  • misc bug fixes and enhancements

0.83

  • critical bug fix for event processing

  • the Node Priority clause has been deprecated. It had semantic issues, and is not used in any known PLEXIL applications. Multiple assignments to the same variable occuring simultaneously results in a runtime error. At this stage, the Priority clause has only been removed from documentation and tests. It is still implemented, as an undocumented and unsupported feature. It may someday be removed from the implementation without notice. A better solution may be designed.

  • more documentation regarding concurrency in list nodes

  • added PLEXIL workshop presentations

  • significant revision of several UE reference manual chapters

  • PDF manuals now included in distribution

0.82

  • refactored universal-exec/Exec/test, creating new bin and apps directories

  • slightly simplified installation

  • added RoboSim example application and plans

  • reduced response time to external world events

  • support for 64-bit architectures

  • numerous minor fixes and enhancements

0.81

  • new syntax and translator for simulation scripts (standard-plexil/plexilscript)

  • numerous minor fixes and enhancements

0.80

  • first Sourceforge release