sarl

SARL Agent-Oriented Programming Language http://www.sarl.io

APACHE-2.0 License

Stars
137
Committers
15
sarl - Release 0.13.0 Latest Release

Published by gallandarakhneorg about 1 year ago

Major Changes

Number of major changes: 3

Transition from Java 8 to Java 17

Since the beginning of its life, SARL supports version 8 of Java.
However, Java has considerably evolved during the past decade; And the lastest long-time-support version of Java is 17.
New features have been added and enhancements have been made since Java 8.
These features and enhancements improve startup, performance, memory usage, and provide better integration with containers.
Moreover, the recent tools such as Eclipse and Xtext require to use at least the version 17 of Java to have benefits of the feature enhancements and bug fixes.

Consequently, the SARL development team as decided in 2021 to apply to SARL a transition from Java 8 to Java 17.
Moving from Java 8 to Java 17 was a significant amount of work (approximatively 18 months) and will apply major changes in all the SARL projects.

Version 0.13.0 requires Java 17 as a minimum requirement.

Many the modules and artifacts of SARL have change of their names to obtain a unified naming convention that is also compatible with those that must be used for Java modules.

Details: [1, 2, 3, 4, 5, 6, 7, 8, 9].

Novel SARL Project Structure

Since few years, contributors to SARL notify the high complexity of the SARL project structure.
It was almost impossible to compile a sub-project of SARL without downloading and compiling all the sub-projects.

The transition from Java 8 to Java 17 gives us the opportunity to rethink the structure of the SARL project and its sub-projects.
There is not any more a single project for all SARL (with its associated root pom file).
The SARL project is splitted into different sub-projects that may be compiled independently.
Each project is dedicated to a specific set of features and tools. These sub-projects are:

  • sarl-bom: Provide the Build-of-Material, i.e., a shared list of Maven dependency, for all the SARL sub-projects;
  • sarl-baseutils: Set of Maven artifacts that are independent of SARL but needed to build the SARL artifacts;
  • sarl-lang: Provides the language definition, the associated compiler (including the Maven plugin) and code formatting styles for different text editors;
  • sarl-sdk: Set of Maven artifacts that constitute the SDK for all the SARL developers;
  • sarl-apputils: Shared projects for building applications that are using a SARL compiler;
  • sarl-sre: SARL runtime environment (or SARL virtual machine);
  • sarl-docs: Tools and Doclet for the generation of the documentation, including the API documentation pages;
  • sarl-cli: Set of command-line tools (sarlc, sarldoc, janus...);
  • sarl-eclipse: Eclipse-based editor for SARL;
  • sarl-officialdoc: Markdown files of the official documentation of SARL.

Integration of a Goal-oriented Behavior in the SARL API

The SARL Standard Development Kit (SDK) includes a novel API dedicated to time-based goal-oriented behaviors.
Goal-Oriented Behavior (GOB) is a general term that covers any technique taking into account goals of the agents.
GOB is not supported by a single technique.
This new feature of the SARL API corresponds to a standard GOB that is used in video game applications.
This API equips the agents with an action selection mechanism to select the best action to be realized for archieving one of the agent goals.

Documentation: SARL website

Detailed Changes

1. SARL Language

1.1. SARL Language and Grammar

  • Enable the static modifier for the members of agent-oriented type declarations. [more details]
  • Add automatic variable converters from Object type to base/native types. [more details]

1.2. SARL Validator

  • When the unary minus operator and a call to an extension method are used in the same expression, the operational semantic of this expression may be not the one expected by the developper, e.g., -2.abs. In the example, according to the priorities of the SARL operators, it must be interpreted as -abs(2) == -2. However, some developper could misinterpret this expression as abs(-2) == 2. When this type of expression is found in the code, the SARL compiler generates a warning to notify the deveopper that he/she may have not coded the correct expression. [more details]

1.3. Java Model Inferrer

  • The detector of pure functions that is embedded in SARL may cause a stack-overflow error when it is analysis a recursive function. The code of the detector was rewritten to avoid this error. [more details]
  • Several null-pointer exception were fixed in the SARL compiler. [1, more details, 3, 4]
  • Do not generate import statements for types that are declared in the default package. [more details]

1.4. SARL Batch Compiler

  • Add an option for converting the warnings to errors. [more details]

2. SARL Development Toolkit (SDK)

  • Add in the SARL API an implementation of the time-based goal-oriented behavior that is used in video games. [more details]

3. SARL User Interface

3.1. Eclipse Products

  • Fixing the classpath containers of SARL and Janus for devel and release versions of the IDE. [more details]
3.2. Maven Integration in Eclipse
  • Fixing the m2e configurator to properly set the classpath for a SARL project. [more details]
  • Integration tests are usually coded in the source folder src/it. These folders are now supported by the SARL m2e plugin and automatically created. [more details]
3.3. Launching Configurations
  • Ensure that the classpaths that are used for launching an application in the Eclipse IDE contain unique bundle entries. [more details]
3.4. Preferences
  • When the SRE is preinstalled in the Eclipse IDE (as it is the case for Janus), the property page associated to this SRE must not allow to change the name and location of the SRE. A read-only editing page for the preinstalled SRE's properties has been included in the Eclipse products. [more details]
  • When the page for editing the SRE properties cannot be created, an error message is shown in a dialog box. [more details]
3.5. Wizards
  • In the dialog box that permits to create a SARL Maven project, the box "Create simple Maven project" is now selected by default. [more details]
  • When a SARL Maven project is created, the wizard creates by default the all folders for SARL code. [more details]
3.6. Other UI Components
  • The Xtext editor that is used for editing SARL code is extended to avoid null-pointer exception and the loose of the link between the SARL file and the editor. [1, 2]
  • Fixing the condition for enabling the popup-menu action dedicated to the transformation of a regular SARL project to SARL Maven project. [more details]
  • The Java package explorer is located in the bottom panel. [more details]
  • Add onboarding images in SARL perspectives. [1, 2]

4. External Contributions to SARL

  • An example of the usage of the new API dedicated to time-based goal-oriented behavior is introduced. [more details]

5. Janus Run-time Environment

  • Replace the Google Service Manager by a specific service manager. The Google Service Manager launches the services asynchronously with a thread that is not marked as daemon. This thread avoids the SRE to stop its run when no more agent is alive. For solving this problem, a simple service manager is implemented in the Janus SRE [more details]

6. Maven Tools

  • The maven-sarl-plugin is printing out a warning message when it does not detect a SRE inthe project classpath. This message notifies the developper that it is necessary to use a specific tool for launching the SARL program, e.g. janus or a launch configuration the Eclipse product. [more details]
  • Add an option for converting the warnings to errors. [more details]

7. Command-Line Tools

7.1. sarlc

  • Add current directory in the default classpath of sarlc. [more details]
  • Add an option for converting the warnings to errors. [more details]

7.2. sarldoc

  • Add current directory in the default classpath of sarldoc. [more details]

7.3. janus

  • Add current directory in the default classpath of janus and janusnode. [more details]

8. SARL Documentation

8.1. Documentation of the SARL SDK

  • Add a reference documentation for the time-based goal-oriented behavior that is usually used in video game agents. [more details]

8.2. Documentation of tutorials

  • Add tutorial for creating a runnable file for SARL application. [more details]
  • Add a tutorial for creating an agent that is deciding of the next actions using a time-based goal-oriented behavior. [more details]

8.3. FAQ

  • Update the FAQ for fixing the starting issue of the SARL product on MacOS. [more details]

8.4. Documentation Generators

  • Fixing the SARL doclet for being used on Java 17 platform. [1, 2]

9. Tools for SARL Contributors

  • The new Eclipse plugin developement framework, and Tycho, now enable the directly include Maven artifacts in the target platform. This feature allows to avoid the create of specific P2 repositories for artifacts that are not bundlified. The SARL P2 repository will disappear in short time. [more details]
  • Add a specific product for SARL contributors. This products includes standard SARL IDE, Eclipse RCP and Eclipse DSL tools. [1, 2]
  • With the introduction of the BOM project for SARL, all the constants accross the SARL projects becomes unified. They are used by Maven for injecting the values in the code or property files. [1, more details]
  • Write the information arguments (since, isRemoval) for all the Deprecated annotations. These information arguments were introducted in recent Java API. [1, 2]
  • Replace the use of the Maven plugin maven-bundle-plugin by bnd-maven-plugin. The first plugin is no more maintained. The second plugin provides more configurations features than the first plugin. [more details]
  • Upgrade major libraries:
sarl - Release 0.12.0

Published by gallandarakhneorg over 3 years ago

1. Major Changes

Number of major changes: 4.

1.1. Enable static and instance features in the parameters' default values

SARL allows you to specify a default value for a formal parameter of a function or a constructor.
When a default value is specified, it means that the caller of the action can skip passing a value for the corresponding argument. And, when the function is called, the default value is given to the skipped argument.

Up to the version 0.11 of SARL, the expressions that constitute the default values must reference static or constant expressions, and these features must not have border effect.

Since the version 0.12 of SARL, the first restriction is no more applied. Consequently, the default value expression could reference either static and instance features (1, 2). The constraint on the feature's border effects is still valid.

For example, the following code is valid in SARL:

agent A {

	var aField : int

	def aFunction(p : int = aField) {
	}

}

It means that the value of the p parameter is the value of the aField field when the aFunction function is invoked.

1.2. Add "abstract" into the modifiers for events

The abstract modifier is added into the list of the accepted modifiers for a SARL event (details). For example, the following code defines an abstract event with name A:

abstract event A

An abstract event is an event that cannot be instantiated, but it can be derived. When an abstract event is derived, the subtype usually provides constructors that are compatible with the super type's constructor.

1.3. Agent Error Handling

In SARL, as for the Akka actor framework, there is an important distinction between failures and validation errors:

  • A validation error means that the data of a command sent to an agent is not valid, e.g. an unexpected event according to a communication protocol. This should rather be modelled as a part of the agent protocol than make the agent throw exceptions.
  • A failure is instead something unexpected or outside the control of the agent itself, for example a database connection that brokes. Opposite to validation errors, it is seldom useful to model such as parts of the protocol as a sending agent very seldom can do anything useful about it.

In order to make the agent able to react to failures, the SARL API defines a specific event that is representing any failure or validation error that the agent could handle if it is interested by: Failure.
Each time an agent needs to be notified about a fault (into its agent tasks for example), an occurrence of this event type is fired in the internal context of the agent.

Several failure events are pre-defined in the SARL API:

  • AgentKillFailure: when the agent killing cannot be realized (the major cause of a killing failure is the fact that the agent to be killed contains sub-agents).
  • TaskFailure: when an agent task (managed by the Schedules capacity) has failed.

Also, the AgentKilled event has been updated in order to provide the cause of the agent's killing.

Finally, the SARL API provides tools for propagating failures in the hierarchy of agents, to the parents and to the children.

1.4. Agent Observation and Probing

The multi-agent system is composed of multiple elements, including agents, behaviors, contexts and spaces, but not limited to. Organizational models in multi-agent systems usually position agents as actors-observers within environments shared by multiple agents and organizational structures at different levels of granularity. Then, the agents may have the capacity to observe the environment and the other agents, without directly interacting with them. The observing agent is able to extract information from another agent or from a society of agents, that could be opaque according to a possible holonic architecture of the system.

Observation means that data or information could be extracted from the observed object without filtering from this latter. The observer is not intrusive from the agent point of view. In other words, the observed agent has no knowledge about the fact it is observed or not. In this case, it cannot adapt its behavior on its observation status.

An observation mecanism was defined into the Janus SRE. Since the version 0.12 of SARL, this observation mecanism is moved into the SARL SDK and transformed as an API that is independent to the SRE (1, 2, 3).
In the same set of commits, the naming service for the multiagent system components has been moved from the Janus SRE to the SARL DSK.

Because an agent is defined as an autonomous entity, the agent is supposed to be able to specify if a part of itself is observable or not, i.e. to specify the access rights to its fields.
The concepts of "observable" and "not observable" field are introduced in SARL 0.12 (1, 2).

This observability flag could be defined statically by annotating the observable field, or one of its enclosing type, with the @Observable annotation. The second method is to implement a dedicated agent skill implementing the capacity FieldAccessValidationCapacity that enables the agent to manage the access rights to its fields dynamically.

2. Other Changes

2.1. SARL Programming Language

2.1.1. SARL Language

a) Detection of pure functions
  • The following function names are considered as standard names for pure functions (1, 2): abs,acos, cos, asin, sin, atan, atan2, cbrt, ceil, compare, compareTo, cosh, empty*, exp, floor, hypot, log, log10, log1p, max, min, pow, random, rint, round, signum, signh, sqrt, tan, tanh, ulp.
  • The functions toString(JsonBuffer) was marked as pure but it has border effects. The Pure annotation is removed from the function (details).
b) Detection of immutable objects
  • SARL compiler knows that objects of specific types are immutables, i.e. they cannot be modified. This immutability of objects is used in order to determine if an code expression has border effects or not, and possibly generate an error message when a border effect cannot be accepted.
  • The following types have been added into the list of the immutable types (1, 2): Annotation, Boolean, Byte, Character, Clock, Double, Duration, Event, Float, Instant, Integer, LocalDate, LocalDateTime, Long, MonthDay, OffsetDataTime, OffsetTime, Pair, Period, Permission, Short, Year, YearMonth, ZoneDataTime, ZoneId, ZoneOffset.
  • Any type that is marked with the @Data annotation is implicitly considered as immutable (details).
c) Automatic object conversions
  • An Unique Universal IDentifier (UUID) may be represented by a string of characters or by an instance of the SARL/Java type UUID. The SARL compiler is able to do an automatic conversion from a string of characters to UUID, and from an UUID to a string of characters (details).
  • The SARL compiler is able to do an automatic conversion from a string of characters to a number and from a number to a string of characters (details).
d) Annotations of code
  • Add the annotation @SarlAsynchronousExecution into the language API in order to help the SARL editor to show up the calls to functions that are run asynchronously (details). This annotation has no effect at run-time by itself. It is only a marker for the SARL code editing purpose.
  • Replace the annotation @IssueOnCall by @ErrorOnCall, @WarningOnCall and @InfoOnCall (details). These annotations are used by the SARL compiler for generating an error, warning or information message when the annoted feature is invoked.

2.1.2. SARL Validator

  • Generate an error when a generic-type parameter is hiding another generic-type parameter (details).
  • Do not warn if a called feature on occurrence is considered as an immutable object (details).

2.1.3. Java Model Inferrer

a) Polymorphic event dispatching
  • Event dispatching mechanism is an internal tool that enables to reproduce the operational semantic of the on behavior units in a Java program. The original event dispatching mechanism (that becomes the default mechanism) is based on Java reflection. For each on behavior unit, an hidden Java method is generated. This method is called by reflection when an event should be dispatched.
  • Add a novel event dispatching mechanism based on polymorphic method calls (details). Hidden polymorphic functions are generated into the Java code in order to dispatch the event along the full object hierarchy. This new event dispatching mecanism is available into the API and could be activated into the Janus SRE configuration.
  • Add the hidden function '$isSupportedEvent' in the generated Java code (details). This function replies if the object contains a behavior unit for the given event that could be invoked with the polymorphic event dispatching mechanism.
b) Value casting
  • Generate a valid Java code when a null value is casted, e.g. null as Type (details).
c) Automatic annotations
  • Create the annotation @Injectable for types for which fields should be injected according to the inversion of control design pattern. This annotation is automatically added by the SARL compiler when the @Inject annotation is found into a type declaration (details). This annotation may be used by the SRE for managing the injection of the objects when it is needed.
d) Bug fixes
  • Do not generate the local/anonymous classes in the constructor code in order to avoid inconsitencies into the generated Java code (details).
  • Add a Java cast operator to the returned value of the synthetic functions for the default-valued parameters in order to avoid Java type conversion error (details).
  • Update the processor of the @Accessors annotation for adding the variadic parameter marker (...) to the setter functions when it has been found in an inherited prototype (details).
  • Avoid internal NPE into the JVM model inferrer (details).

2.1.4. SARL Core Library

  • Deprecate the function register in the Space type, and provide the functions registerStrongParticipant and registerWeakParticipant (details). These functions permit to make a difference between a strong participant and a weak participant. A space could be destroyed only if there is no more strong participants inside. If a space has only weak participants, it could be destroyed.
  • Rename the functions with the name getUUID to getID accross the entire API (details).
  • Major bug fix in the dynamic skill creator attached to the @DefaultSkill annotation (details). This creator generates a NPE whatever the capacity or skill.
  • The interface SREBootstrap provides tools for starting the SARL run-time environment programmatically. Several functions were added in this interface for starting the run-time environment as it is started from the command-line (details): setCommandLineArguments(String[]), startWithoutAgent(boolean).
  • Make cloneable the types Address and SpaceID (details).

2.1.5. SARL Formatter

  • Into the LaTeX style, add the macro \ignorespaces at the end of the macro\code (details).

2.1.6. SARL Batch Compiler

  • Since Java 11, the classpath is no more the single way for specifying the Java libraries to be loaded into the program. Indeed, the introduction of the Java modules in the Java specification causes the creation of a "module path". This module path specifies the list of the Java libraries that must be loaded as modules. In order to be used with a version of Java that is higher than or equal to 9, the SARL compilers (batch compiler and embedded in Eclipse) supports both the classpath and the module path, depending on the version of the Java execution framework that is used (details).

  • According to the SARL toolchain, the SARL compiler generates Java code. Then, this Java code is compiled by a standard Java compiler. Two major standard compilers are available: Eclipse compiler (a.k.a. ecl or Java Development Toolkit - JDT), and Oracle compiler (a.k.a. javac). Up to the version 0.11 of SARL, the JDT compiler is used by default. In order to prepare future move from the version 8 to the version 11 of Java, javac becomes the default Java compiler (details). Indeed, this compiler provides a complete support of the Java 11 (or higher) specifications.

  • Environment variables are now supported by the Maven-based batch compiler, a.k.a. maven-sarl-plugin (details):

    • maven.test.skip: it is an environment variable that is already know for Maven plugins. maven-sarl-plugin disables all the tests when this variable is set to true.
    • sarl.test.skip: same effect as maven.test.skip.
    • sarl.compile.skip: when this environment variable is set to true, maven-sarl-plugin does not run the JVM element generator, SARL validator on the SARL source code, and does not run the Java compiler on the generated Java code.
    • sarl.jvminferrer.skip : when this environment variable is set to true, maven-sarl-plugin does not run the JVM element generator, SARL validator on the SARL source code. The other components of maven-sarl-plugin are run, e.g. the Java compiler.
    • sarl.clean.skip: when this environment variable is set to true, maven-sarl-plugin does nothing at cleaning stage.

    All these environment variables must be defined from the shell command line, or with the -D option of the maven tool.

2.2. SARL Development Toolkit (SDK)

2.2.1. Agent Context

  • Add the function isRootContext() into the AgentContext type in order to determine if the agent context is the root context or not (details).

2.2.2. Agent Behaviors

  • The Behavior type permits to specify an agent behavior. The life-cycle of a behavior is enhanced in order to have callbacks when the behavior is installed into and uninstalled from its agent (details):
    1. Behavior construction: the construction function of the behavior is invoked in order to create the behavior in the computer memory.
    2. Behavior registration: the behavior is registered into the agent with one of the functions of the Behaviors capacity. Then, the protected function install() of the behavior itself is invoked.
    3. Behavior initialization: the on Initialize handlers of the behavior are activated.
    4. Behavior's life
    5. Behavior unregistration: the behavior is unregistered from the agent with one of the functions of the Behaviors capacity. Then, the on Destroy handlers of the behavior are activated.
    6. Behavior uninstallation: the protected function uninstall() of the behavior is invoked.
  • Add two wake functions for waking up a specific agent behavior that is passed as argument (details). These functions enable to provide an event to a specific behavior, and this event it provided neither to the other behaviors nor the agent itself.

2.2.3. Agent Skills

  • The Skill type permits to specify an agent skill. The life-cycle of a skill is enhanced in order to have a callback when a skill is installed into its agent (details). This callback function may be defined and provided by the SRE's implementation in order to react to the installation of a skill into an agent.

2.2.4. DefaultContextInteractions Capacity

  • In order to make easier the interaction between an agent and its parent agent, several functions are added (details): getDefaultParentID, getDefaultParentScope, emitToParent.

2.2.5. Lifecycle Capacity

  • Add the function spawnWithID(type, id, parameters) in the Lifecycle capacity in order to spawn an agent with a given identifier into the default context (details). This function complements the existing function spawnInContextWithID(type, context, id, parameters) that needs to give the receiving agent context and the identifier.
  • The killMe(cause) function takes the cause of the agent killing. Before SARL 0.12, this reason must be of type Throwable, that indicates the cause is an error. Since SARL 0.12, the cause of the killing becomes of type Object (details). It enables to provide a killing cause that is not an error from the computer programming point-of-view.

2.2.6. InnerContextAccess Capacity

  • Add the function getInnerDefaultSpace into the InnerContextAccess capacity (details). This function is an helper for obtaining the default space of the inner context of the agent.

2.2.7. ExternalContextAccess Capacity

  • Replace the returned value of the join function from boolean to AgentContext (details). The agent is now able to access the joined agent context directly after joining it.

2.2.8. Naming API

  • Move the naming API from the Janus SRE to the SARL SDK (details).
  • Add the support for the observability of fields (details). See the description of the major changes above for details.
  • Remove the NameScheme enumeration in order to add new schemes from API extensions (details).

2.2.9. Coding Style with the SARL SDK

  • Replace all the direct references to the implements of concurrent collections to equivalent interfaces (1, 2, 3).

2.2.10. New Modules

  • Create the module io.sarl.api.bootiquebase (details) that provides the abstract types for implementing a bootique-based application. Bootique is a library for launching and configuring an application.

2.3. SARL User Interface

2.3.1. UI Components

  • When a method call cannot be resolved and linked to a method implementation, an compilation error is output. The called method could be provided by a capacity that is not "used" in the SARL code. Add a quick fix that automatically adds the statement uses for the relevant capacities that are providing the missed method (details).
  • In the SARL editor, display with a specific style, the names of the functions that were marked as asynchronuous (1, 2). According to the specification of SARL, these functions are supposed to be run in parallel to their callers, e.g. emit an event. In order to help the editor to show up this specific status of these functions, they are annoted with the @SarlAsynchronousExecution annotation.
  • In the SARL editor, a code (mining) decoration that shows up the names of the formal parameters just before the values that are passed to a function call (details). For example, if the function f(a : int, b : String) is defined, and in your code you have the call f(5, "a"), then this call will be displaye by the editor as f(a:5, b:"a") in order to show the names of the arguments to you.
  • Display an error message when the code mining mecanism has crashed (details).
  • Fixing the NPE when accessing the Eclipse platform logger (details).
  • Deprecate the eclipse-slf4j module (details).

2.3.3. Eclipse Product

c) Launch Configurations
  • In the launch configuration of a SARL agent or a SARL application, the classpath provider was implemented for supported the classpath only. It is the standard mechanism for Java applications up to Java version 8. Since the version 9 of Java, modules are introduced, as well as a specific module-path for the specification of the modules' libraries. The previous implementation of the SARL classpath provider did not support the module-path. It is fixed in SARL 0.12 (1, 2, 3).
  • In the launch configuration of a SARL agent or a SARL application, a combo box is added in order to select the log level of the run application (details).
  • In the launch configuration of a SARL agent or a SARL application, a check box is added in order to enable or disable the printing out of the launching arguments on the Eclipse console (details).
  • In the launch configuration of a SARL agent or a SARL application, it is now possible to specify extra arguments for the Java Run-time Environment (details), in addition to the program arguments, and the SRE arguments.
  • Fixing the rendering bug in the main tab of the SARL launch configuration related to the wrong rendering of the parentheses (details).
  • The launch configuration window contains panels for configuring the application to be launched. The plugins and extensions of the SARL Run-time Environment may need to be configured. In order to inject specific configuration panels into the launch configuration, an Eclipse extension point is created (1, 2). This extension point could be implemented by SRE extensions for providing a configuration panel.
  • Automatic binding of the main launch configuration panel and the SRE selection panel (1, 2).
  • Update the SARL embedded runner able to use the -D definitions from the command-line (details).
b) Commands
  • Add the command "Generate Element Document" for adding a documentation for the selected element (details).
c) Preferences
  • Add check boxes for enabling and disabling the code mining components that add decorations in the SARL editor (details).
  • Change the label of the code mining components in the SARL preference window (details).
d) Other Changes
  • Enabling the support of JDK 12, 13 and 14 for the SARL users (details), i.e. the SARL products are updated in order to be run on these versions of the Java environment.
  • Provide programmatic tools for formatting the command-line options in the messages that are displayed in the Eclipse SARL product (details).
  • Update the launching script for MacOS in order to automatically detect and configure the Java environment (1, 2).
  • Update the Linux launching scripts to make them more robust to the different versions of the Linux environments (details).

2.4. Examples of SARL projects

2.4.1. Example code

  • Fixing the code of the boids and fireworks examples to follow the new space API (details).

2.4.2. JDK support

  • The JDK version of the user is injected into the pom files of the examples (details).
  • Ensure that the JDK used for creating the example projects is compliant with the minimum JDK for SARL (details).

2.4.3. JavaFX support

  • Ensure that JavaFX is included as dependencies when JDK is 11 or higher (details).

2.4.4. Windows OS support

  • The example wizard needs to find executable files (such as Maven) on the operating system in order to use them. The wizard code is refactored in order to search correctly the executable files on all the operating systems, and specifically on Windows OS (1, 2).

2.5. Janus Run-time Environment

2.5.1. Bug fixes

  • Major bug fix in the dynamic skill creator attached to the @DefaultSkill annotation (details). This creator generates a NPE whatever the capacity or skill.
  • Avoid NPE into the JUL formatter (1, 2).

2.5.2. Entity Creation

  • In relation with the @Injectable annotation that is supported by the SARL compiler, the Janus SRE is updated in order to inject objects when they are annoted with @Injectable. If they are not annoted, the objects are created without injection in order to obtain a faster run (details).
  • Remove the interface BuiltinCapacitiesProvider (details).

2.5.3. Context Service

  • Refactor the context service by putting back the locks in order to avoid issues related to the parallel execution of the service (1, 2).

2.5.4. Executor Service

  • The prototype of the neverReturn function is changed in order to make its argument mandatory (details).
  • Fire an occurrence of the TaskFailure event when a background task has thrown an exception (details).
  • Add implementation of the toString function for the executor services (details).

2.5.5. Lifecycle Service

  • The initialization process of the agent into AgentLife is refactoring in order to avoid the receiving of events before the initialization stage is finished (1, 2).
  • Fixing the locks into the stop function of the agent (details).
  • Add a protected access to the executor service into the Lifecycle service (details).
  • In the agent spawn process, the logging and the forwarding of exception from the parallel tasks are fixed in order to output them properly (details).
  • Add the firing of an AgentSpawnFailure occurrence when an agent spawn cannot succeed (details).

2.5.6. Naming and Probing Services

  • Move the naming API from Janus SRE to the SARL SDK (details).
  • Move the probing API from Janus SRE to the SARL SDK (details).

2.5.7. Logging Service

  • The Janus SRE modules are now able to log their messages into dedicated loggers (details).

2.5.8. Space Implementation

  • Change the visibility of the function getScopedParticipants in the event space in order to be used by extensions of Janus, e.g. the networking module (details).
  • The function for firring the events is changed in order to fire the event to a provided listener, even if it was not registered to on the agent's event bus (details). It enables to propagate events to specific objects without receiving the events that are fired through the agent's event bus.

2.5.9. Internal API

  • Replace Guice by Guice NO-AOP (details).
  • Upgrade to Guice 4.2.3 (details).
  • Remove io.janusproject.eclipse from the classpath of the applications when they are launched in the Eclipse SARL environment (details).
  • Rewrite the Janus classpath provider for supporting Java 11 (2, 2).
  • Remove the dependency to Gson library because the Jackson library is included by the Bootique library, and it provides the same features for reading a Json file (details).
  • Fixing the injection definition of the Janus commands (details).
  • Update the message that shows up the version of the janus command line tool (details).
  • Avoid NPE related to the message of CannotSpawnException (details).
  • Clean the dependency tree of the Janus SRE (1, 2, 3).

2.5.10 Network Service for Janus SRE

The service-based architecture of the Janus SRE enables to provide specific services for running SARL agents.
The version 0.12 of SARL introduces a service for the communication over a computer network of different instances of the Janus SRE.

By default, Janus does not provide a support for exchanging events over a computer network. If you would like to have benefit of this feature, you should use the extension module, named "Janus Network", that is introduced in SARL 0.12 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34).
The implementation of this module is based on the Hazelcast library in order to build the clusters of Janus nodes.

Thanks to its implementation, the network service has the following major properties:

  • Share spaces (event-based or not) over the different instances of the Janus SRE.
  • Route events over the computer network.
  • Discover automatically the other instances of the Janus SRE in the local network.

2.6. Maven Tools

2.6.1. Bootique Plugins

  • Split the module io.sarl.maven.bootiqueapp in order to separate the Bootique-based library for building applications, and the SARL batch compiler library (details).
  • Add CLI option --generatemarkdownhelp to the Maven bootique library (details). This option will be available to all the bootique-based applications, e.g. janus and sarlc.
  • Add a command for displaying the configuration parameter of an application, usin a markdown syntax (details).

2.6.2. Documentation Generation Plugin

  • Enable isolated class loaders when evaluating the SARL expressions into the documentation files (details).
  • Add global system properties SARL_DOC_CURRENT_FILE and SARL_DOC_CURRENT_FOLDER that contains the parsing documentation file and its folder (details).

2.7. Command-Line Tools

2.7.1. sarlc

  • Use the new Bootique application framework (details).
  • Enable the reading of the -D parameters (details)
  • Deprecate the Java boot classpath (details).
  • Use the Unix standard for naming the CLI options (1, 2).
  • Add utility functions for accessing to the CLI options programmatically (details).
  • Generate 64 bit executables (details).
  • Force the MacOS X executable to use a version of the JRE that is compatible with the SARL tools (details).

2.7.2. sarldoc

  • Use the new Bootique application framework (details).
  • Enable the reading of the -D parameters (details).
  • Use the Unix standard for naming the CLI options (1, 2).
  • Add utility functions for accessing to the CLI options programmatically (details).
  • Generate 64 bits executable (details).
  • Force the MacOS X executable to use a version of the JRE that is compatible with the SARL tools (details).

2.8. SARL Documentation

2.9. Tools for SARL Contributors

2.9.1. Changes in the SARL Compiler Libraries

a) General Changes
  • Upgrade to Eclipse 2020-06 and Xtext 2.22.0 (details).
b) Pure Functions
  • Fixing the invalid detection of pure status for operations and provides an API for retreiving the side-effect expressions (1, 2).
c) Preparation for Java 11
  • Remove the references to the @Generated annotation that is different between Java 8 and 11 (details).
  • Split the "ui" module into the "ui" and "ide" modules (details). This change is needed for the support of the modules implies by Java 11 in the recent versions of Xtext.
  • Split the Utils class into the "lang-core" plugin and the "lang" plugin (details).
d) Code Mining
  • Add the definition of polymorphic methods for providing the code mining contributions (details).
e) Logging
  • Replace the references to Log4J and SFL4J by equivalent references to JUL (1, 2).
f) Other Changes
  • Exhibit a SARL expression interpreter (details).
  • Add utility functions to convert JVM type references to Lightweight type references (details).
  • Add an utility function for obtaining a valid human readable string for error messages (details).
  • Remove the unaccessible repository for the JBoss Eclipse plugins (details).

2.9.2. Build Tools

  • Add scripts to change the JDK configuration of the SARL products (1, 2, 3, 4, 5, 6, 7).
sarl - Release 0.11.0

Published by gallandarakhneorg over 4 years ago

1. Major Changes

Number of major changes: 4.

1.1. Janus version 3

Janus is the official SARL run-time environment (aka. SARL virtual machine).
This release of SARL provides a MAJOR NEW IMPLEMENTATION of Janus with its version 3.

In the past, the change from version 1 to version 2 was due to a total re-implementation of Janus in order to follow and support the SARL metamodel.
This time, Version 3 of Janus is a total re-implementation with the SARL language, i.e. we have written the code with SARL not anymore with Java.

The major benefits of the new implementation with the SARL language are:

  • Direct usage of the SARL concepts and statements;
  • Ability to generate the same SRE to different target platforms (Java, Python, etc.);
  • Proof-of-concept related to the capabilities of the SARL language to cover complex application's implementation.

In addition to the total re-implementation with SARL language, the software architecture of Janus was re-thinking and optimized in order to improve the global run-time performances of the SRE, and to be more modular in order to extend modules of Janus with new third-party modules (based on Bootique modules).

1.2. New types of participants in spaces

From the SARL metamodel, spaces are entities in which the agents are able to interact or communicate.
The agents that are part of a space are named participants.

From our experience during the past years, different types of participants may be involved into a space.
First, the agents constitute the largest part of these participants.
Second, external software, such as an graphical user interface (GUI), may have to listen for events or emit them into a space in order to setup an interaction with the agents.

Nevertheless, having only a single type of participant defined causes issues into the SARL run-time environment (SRE) when it is time to decide if a space should be destroyed or not. Indeed, the SRE is in charge of destroying the spaces when they are not used anymore (usually when there is no more agent inside).

A problem occurs when all the agents have leaved the space, and only GUI remain. In this case, the SRE was not able to detect this case and to destroy the space. This issue could be seen because the SRE never stops to run, even when all the agents were killed.

In order to solve this issue, two types of participants are defined:

  • Strong Participant: it corresponds to the regular meaning of a participant (and the default one). When a strong participant is involved into a space, the SRE cannot destroy the space. Typical strong participants are the application agents.
  • Weak Participant: it is a participant that is considered as optional by the SRE. In order words, when a space has only weak participants, it is considered as releasable by the SRE. Typical weak participants are GUI objects.

Whatever the type of participant, they have the same level of abilities for using the space. For example, in the case of an event space, the strong and weak participants have all the abilities to emit events, and receive them.

1.3. New agent spawning API

The spawning functions of the agents have encountered a big change: they are not replying anymore the unique identifier of the just spawned agents. Now, the spawning functions return void.

This change was forced by the need to execute in parallel the different spawning processes when multiple agents are spawned at the same time. In this case, it is almost impossible to retreive the unique identifiers of the agents before returning from the spawning function.

In order to use the unique identifier of the just spawned agent after the call to the spawning function, the new guideline is to generate the identifier, give it to the spawning function, and use it after, as illustrated by the following example:

var agentIdentifier = UUID::randomUUID
typeof(MyAgentType).spawnInContextWithID(defaultContext, agentIdentifier)
doSomething(agentIdentifier)

1.4. New tool for SARL contributors: an Eclipse DSL with embedded SARL

In past, it was not so easy to install and set-up an complete and working development environment for the SARL contributors. It was due to the usage of different technologies such as Eclipse DSL, Java, Maven and Xtext.

In order to have a ready-to-use environment, as much as possible, a specific Eclipse product is now available into the SARL project: sarl-dsl.
This new product includes:

  • Regular Eclipse framework for domain specific language implementation, that includes:
    • Eclipse environment,
    • Java development environment,
    • Maven integration into Eclipse, and
    • Xtext libraries;
  • SARL compiler integration into Eclipse;
  • Janus run-time environment;
  • Eclipse Checkstyle.

2. Detailed Changes

2.1. SARL Language

2.1.1. SARL Language Grammar

  • Add specific Java cast into the generated Java code for avoiding compilation error (1, 2).
  • Remove any reference to Eclipse JDT from io.sarl.lang module (1, 2).
  • Change the generation of hashCode and equals to avoid null pointer exception when running them into the SRE (details).

2.1.2. SARL Core Library

  • All:
    • Removing all locks and synchronized collections (1, 2, 3, 4, 5)
  • Spaces:
    • Add the concepts of strong and weak participants into the spaces (1, 2, 3, 4). Both of these types correspond to participants into a space. When a space has at least one strong participant, it cannot be destroyed and removed from the ststem. When a space has only weak participants, it could be removed from the system. A typical strong participants may be a regular agent. And, a typical weak participants may be an user interface that is interacting with agents.
    • Remove the deprecated spaces implementation (details).
  • Bootstrap:
    • Add observer on the SRE start and stop (details).
    • Remove the function getBootAgentId from the SARL programmatic bootstrap (details).
    • Add a timeout parameter to the shutdown function of the SRE bootstrap (details).
  • Events:
    • Fixing the invalid value for the field parentContentId of the MemberJoined event (details).
    • Fixing the invalid value of the Memberleft source (details).
  • Agent:
    • Add the function setSkillIfAbsent into the Agent API (details).
    • When the skill references were cleared from any part of the agent, the getSkill function of the
      agent does not thrown UnimplementedCapacityException exception anymore (details).
    • Updating skill management with a conccurent set/queue instead of a non-thread safe implementation (details).
  • Skill:
    • Tuning the skill uninstallation process to prevent null pointer exception (details).
    • Introduce a new class for representing a skill containe, and update the skill lifecycle accordingly (details).
  • Agent Tasks:
    • Force the agent tasks to have a not-empty name (details).
    • Tuning the every tasks stopping process (details).
  • Address:
    • Rename the field agentId to participantId into the Address class (details).
  • Others:
    • Make as volatile the field that may contain internal SRE data into the SRESpecificDataContainer class (details). This change enables a better synchronization of the attached SRE data's field when it is accessed from multiple threads.
    • Make the ClearableReference atomic (details).

2.2. SARL Development Toolkit (SDK)

2.2.1 Core Library

  • Remove the returned addresses from the spawning functions (details). The spawning functions are now returning nothing. It means that it is not any more possible to retrieve the UUID of a just spawned agent from the spawning function itself. A better practise is to computer the UUID before calling the spawning function, and pass the UUID to this function.

2.2.2 Utility Library

  • Remove deprecated classes (details).

2.3. SARL User Interface

2.3.1. UI Components

  • General:

    • Avoid to reply extra-language output configurations from the project's preferences when the general SARL output configuration is requested (details).
  • Module eclipse-slf4j:

    • Create the Eclipse bundle eclipseslf4j that provides a correct integration of SLF4J (old API version and new API version) into the Eclipse product (1, 2).
    • Use the SLF4J API for formatting the messages intead of Java API (details).

2.3.2. Eclipse Product

2.3.2.1. Launching Configurations
  • Rename StandardSREInstall to ManifestBasedSREInstall (details).
  • Update the run configuration in order to show the SRE command line options into the wizard (details).
2.3.2.2. UI Components
  • Fixing the splash screen (1, 2, 3).
2.3.2.3. Wizards
  • New Project:
    • Avoid null pointer exception when creating a new empty project (details).
    • Add support for test generation folder (details).
  • Code templates:
    • Do not add extends Object into the class's code template (details).
    • Add the function prepareUnistallation into the code template of the skills (details).
    • Remove 32bit platforms from the template (details)
  • Export to runnable Jar:
    • Restrict the selectable launch configurations to the selected projects when exporting to a SARL runnable JAR (details).
    • Disable the "export into runnable JAR file" for an 'SARL Agent' launch configuration (details). In other word, it will not be possible to generate a runnable Jar based on the launch configuration of an agent. It is possible to create a runnable jar from a 'SARL Application' launch configuration.
2.3.2.4. Maven Integration in Eclipse (m2e)
  • Support of Eclipse bundles:
    • The m2e connector supports the Eclipse Bundle projects (details).
    • When compiling a SARL project that is also an Eclipse plugin, the m2e plugin should apply a specific compilation sequence to properly compile the project (details).
  • Test source code in SARL project:
    • Goal testCompile is defined into the Maven plugin for SARL. This goal was missed into the m2e plugin, and it is added by this commit (1, 2).
  • General changes:
    • Rename StandardSREInstall to ManifestBasedSREInstall (details).
    • Change the configuration of the source folders (1, 2).
    • Delete any previous declaration of the source folders prior to its addition into the classpath (details).

2.4. External Contributions to SARL

2.4.1. Examples

  • Fixing the syntax errors due to the recent changes in the spawning and space API (1, 2).
  • Add a test about the specification of the wizard classname into the file plugin.xml in order to validate that the provided classname exists (details).
  • Add the missed injection factory for the Boids example (details).
  • Add the launch configuration for the Boids example (details).
  • Enable compilation on OpenJDK 8 (details).
  • Do not specify in hard-coded constant the command line for launching maven tool (details).
  • Sovling the bug in Ping-Pong demo where an event was not correctly sent due to a problem of weak reference (details).

2.4.2. Experience Index Plugin

  • The project structure of io.sarl.experienceindex.plugin is rearrange to fit the SARL standard (details).

2.5. Janus Run-time Environment

2.5.1. General

  • Janus 3 is released and included into the SARL framework (1, 2, 3, 4, 5). Janus 3 is fully implemented in SARL. This new SRE was the result of the redesign of the previous version of Janus in order to obtain better performances and stability.
  • Remove references to Hazelcast and ZeroMQ (details).
  • New function is provided to shutdown the whole kernel (details).

2.5.2. Event Spaces

  • Creation of a factory for the space specifications (details).
  • The abstract implementation of the event spaces has been fixed in order to really remove a participant to a space when its event listener is unregistered from the space (details).
  • Ensure that a event listener is not registered as weak and strong participant to a space (details).
  • Add configuration for the space repository (details).

2.5.3. Events

  • Parallel execution of the "on" handlers is now done through the agent's InternalSchedules capacity: in EventBus, the ad-hoc implementation is replaced by calls to the executeBlockingTasks function of InternalSchedules capacity (1, 2).
  • Move the guard evaluator into the SRE internal package from the io.sarl.util module (details).
  • Correcting the bug preventing ParticpantLeft to be fired in the default space of the default context. The particular case of the default space of the default context haven't been managed, since it is the first space created its parent (1, 2).
  • Fixing the invalid emitting of ParticipantJoined events (details).
  • Fixing the source of the MemberLeft and MemberJoined events (details).
  • Fixing implementation of and calls to BehaviorGuardEvaluatorRegistry (1, 2, 3)
  • Tuning the function compareTo into the BehaviorGuardEvaluator and the management of the registry concerning inherited ancestors methods (details).
  • Fixing the filtering of the event handlers when dispatching events (details).
  • Avoid the use of Java streams for looping (details).

2.5.4. Tasks

  • Set the default maximal number of threads to 512 (details).
  • InternalSchedules capacity provides the executeBlockingTasks function (details).
  • Changing the conditions to stop a task by testing if the task was registered previously (details).
  • Changing Task ID generation to save performances: Adding a specific uuid generator in place of the standard Java generator because it is too much time costly (1, 2, 3).
  • Homogenizing task execution, generalizing the use of SRERunnable (details).
  • Removing ThreadExecutorService's purge that was too costly (details).
  • Correcting exception management in Janus boot that was preventing some exception to be seen (details).
  • Start the thread pool purge depending on the executor configuration when shuting down the executor service (details).

2.5.5. Skills

  • Re-implement DynamicSkillProvider classes to create skills and not install them (details).
  • Do not uninstall the same skill multiple times when it registered for mutiple capacities (details).

2.5.6. Agent Lifecycle

  • Multiple agent spawning is now run in parallel for each agent (details).
  • Avoid null pointer exception on the event bus listener when stoping the agent (details).
  • Schedules and EventBus skills must be released after all the other skills (details).
  • Change the prototype of the protected spawnAgent function (details).
  • Adding a double lock in agent spawn function. It fixes a bug where the number of effectively spawn agents was different than the number of spawn calls (details).
  • Changing weak reference to normal reference in order to avoid null pointer exception: AgentLife (1); ScheduleSkill (2).
  • Add the output of warning messages when an agent cannot be killed (details).
  • Rearrange the code of the dying stage in order to be consistant with the expected agent state (details).
  • Avoid the skipping of the agent stopping process when an exception occurs in on Initialize (details).

2.5.7. Probe Service

  • Avoid synchronization problems into the probe service (details).
  • Avoid NPE in probe service when the agent is not yet alive (details).
  • Add findObject functions with string of characters as parameter for representing the URI (details).

2.5.8. Logging Service

  • The SRE loggers are now named (details).
  • Move all the JUL implementation into a dedicated package (details).
  • Rearrange JUL to uses the proper formatting (details).

2.5.9. Infrastructure

  • General:
    • Update of the SRE main that was actively waiting the termination of all
      running commands before do a system exit. The active wait has been
      removed as well as the system exit (details).
    • Shutdown of the SRE is killing agents asynchronously (details).
    • Add a timeout parameter to the shutdown function of the SRE bootstrap (details).
    • Apply GNU standards regarding the naming of the CLI options (details).
    • Add the lifecycle configuration command line option --Xinjectagents (details).
    • Provide the Janus command-line options to the Eclipse wizards (details).
  • Windows Operating System:
    • Fixing issue on Windows operating system when there are spaces in the path of the SRE (details).
  • Networking:
    • A first implementation of the networking module of Janus 3 is added into the source code repository (1, 2, 3). This module is not yet activated and included into the SARL products because it is still under development and testing.

2.6. Maven Tools

2.6.1. SARL Batch Compiler

  • Move the batch compiler from the io.sarl.lang Eclipse plugin into the io.sarl.maven.batchcompiler module. (1, 2).

2.6.2. Maven SARL Compiler

  • Add the support of the skip flag and of the system property maven.test.skip in order to enable or disable the tests that were written with SARL (1, 2).
  • The version of the Maven compiler (linked to Java compiler) is injected from the pom configuration into the Java code of the maven-sarl-plugin module (1, 2).
  • Updating pom file to prevent tycho compiler from being executed before the sarl compilation (details).

2.6.3. JavaFX Module

  • Enable the JavaFX UI controller to emit an event into the dedicated communication space (between the JavaFX UI and any application agent), and to emit an event into the global communication space (shared by all root agents) (details).
  • Remove the returned addresses from the spawning functions (details).

2.6.4. Bootique Utilities

  • Enable the overriding of the bootique "version" command by moving the most usefull peace of code into protected functions (details).

2.7. Command-Line Tools

2.7.1 sarlc

  • Apply GNU standards regarding the naming of the CLI options (1, 2).
  • Force the use of version 2.10 of Jackson lib (details).
  • Fixing errors in the help text (details).

2.7.2 sarldoc

  • Fixing errors in the help text (details).
  • Fixing code for passing tests (details).

2.7.3 VIM Syntax Highlighting

  • Add the link to the vim Operator syntax color (details).

2.8. SARL Documentation

2.8.1. Documentation of the SARL Language

  • Add the CIAD's CI badge into README file (details).
  • Fixing the generation of the Javadoc (details).

2.8.2. Documentation of the SARL Core Library

  • Fixing the javadoc generation in order to generate it for all the bundles published on Maven Central (details).
  • Move the properties files within JavaFX Maven project to be included into the Jar file (details).
  • Fixing the code in order to fullfil the changes in the SARL API (1, 2, 3, 4).
  • Remove the references to the restricted spaces (details).
  • Tuning the documentation on the newly introduced concept of weak/strong participants of a space (details).

2.8.3. Documentation of the Janus SRE

  • Fixing the documentation of Janus (details).

2.8.4. Documentation Generators

  • Fixing the generation of the section heading keys into the documentation in order to be parsable by a Markdown transcoder (details).
  • Update the name of the tests to see the name and path of the tested page (details).

2.9. Tools for SARL Contributors

2.9.1. Coding Convention and Changes

  • Using ConcurrentMap interface instead of its implementation (details).
  • Updating and improving the code of evaluateGuard when a single evaluator is present, that represents a lot of cases (1, 2).
  • Converting a weak reference into a normal one into the SRE's AgentLife in order to avoid null pointer exception (details).
  • Using the Java path separator instead of an hard-coded : when building paths (details).

2.9.2. New Eclipse DSL with embedded SARL

  • Create a specific product that is dedicated to the SARL contributors. This Eclipse DSL product for SARL includes Eclipse, Java, Xtext, and SARL (1, 2, 3, 4)

2.9.3. Regular SARL Eclipse Product

  • Remove references to local folders into the templates of Eclipse preferences (details).
  • Removing all the product customizations that were specific to sgalland (details).

2.9.4. Generic User Interface

  • Re-enable the tests of the formatter's facade (details).

2.9.5. Tests

2.9.6. Continuous Integration

  • Fixing the release scripts for CI (1, 2, 3, 4, 5, 6).
2.9.7. Dependencies
  • Upgrade to Eclipse 2019-12 (details).
  • Remove references to SLF4J when it is not mandatory by code (details).
  • Upgrade to Xtext 2.20 (details).
  • Updating mockito version (details).
  • Updating target platform to integrate Janus v3 new p2 dependencies from arakhne (details).
  • Remove logback dependencies (1, 2).
  • Updating dependencies and provided packages (details)
  • Updating checkstyle version, config and adapting the code to respect new introduced rules (details).
sarl - Release 0.10.1

Published by gallandarakhneorg over 4 years ago

  • Fixing the invalid building of the classpath URL on Windows operating systems (details).
sarl - Release 0.10.0

Published by gallandarakhneorg almost 5 years ago

1. Major Changes

Number of major changes : 8

1.1. Support of Java 11

The entire SARL project was tested against the versions 8 and 11 of Java.
The version 8 must still be used for running the SARL DSL Environment in order to create SARL libraries that could be used on a JRE 1.8.

For application developers who are using SARL, they could use either Java 8 or Java 11 for running the SARL Development environment, or
the SARL applications that are the result of the SARL compilation.

1.2. Try-with-resources

The try-with-resources statement is a try statement that declares one or more resources.
A resource is an object that must be closed after the program is finished with it.
The try-with-resources statement ensures that each resource is closed at the end of the statement.
Any object that implements AutoCloseable, which includes all objects which implement Closeable, can be used as a resource.

The following example reads the first line from a file. It uses an instance of BufferedReader to read data from the file.
BufferedReader is a resource that must be closed after the program is finished with it:

def readFirstLineFromFile(path : String) : String {
	try (var br = new BufferedReader(new FileReader(path))) {
		return br.readLine
	}
}

In this example, the resource declared in the try-with-resources statement is a BufferedReader.
The declaration statement appears within parentheses immediately after the try keyword.
The class BufferedReader, inherited from Java libraries, implements the interface AutoCloseable.
Because the BufferedReader instance is declared in a try-with-resource statement, it will be closed regardless of
whether the try statement completes normally or abruptly.

1.3. Implicit Names for Lambda Formal Parameters

When a lambda (also known as closure) has multiple parameters, and no name is provided by the SARL developer, the SARL compiler in its previous version generates an error because it was able to consider only it as an implicitly declared variable, i.e. there was too many implicit parameter to declare by the compiler and it cannot do that.

In its version 0.10, the SARL compiler is able to a generate default name for each of the formal parameters of a lambda, even if there are multiple unnamed parameters.
The implicit name for the first parameter becomes $0, $1 for the second, $2 for the third, etc.

The example below shows the definition of an interface, a class that is calling an instance of the previous interface, and a piece of code that is invoking the class.
It is interesting to note that the arguments' values of the lambda expressions are accessed with their implicit names.

interface MyInterface {
	def a(a : int, b : char, c : String)
}

class MyClass {
	def b(lambda : MyInterface) {
		lambda.a(1, '2', "3")
	}
}

var i = new Myclass
i.b [
	println($0)
	println($1)
	println($2)
]

1.4. Introduction of the two events ParticipantJoined and ParticipantLeft

The events ParticipantJoined and ParticipantLeft are introduced.
The first is fired when an agent has joined a space that has participants, e.g. an event space.
The second is fired when an agent has left a space.

1.5. Better Concurrent Execution with Read-Write Locks

The uses of mutual exclusion locks were replaced by similar uses of read-write locks.

A read-write lock maintains a pair of associated locks, one for read-only operations and one for writing.
The read lock may be held simultaneously by multiple reader threads, so long as there are no writers.
The write lock is exclusive.
The read-write lock implementation guarantees that the memory synchronization effects of writeLock operations also hold with respect to the associated readLock.
That is, a thread successfully acquiring the read lock will see all updates made upon previous release of the write lock.

A read-write lock allows for a greater level of concurrency in accessing shared data than that permitted by a mutual exclusion lock.
It exploits the fact that while only a single thread at a time (a writer thread) can modify the shared data, in many cases any number of threads can
concurrently read the data (hence reader threads). In theory, the increase in concurrency permitted by the use of a read-write lock will lead to
performance improvements over the use of a mutual exclusion lock.

1.6. Tool for generating the API documentation

Sarldoc is a documentation generator for the SARL language for generating API documentation in HTML format from SARL source code.
The HTML format is used for adding the convenience of being able to hyperlink related documents together.
To pass source code to sarldoc, you have to provide the names of the folders in which the SARL code files are located.
Then, the sarldoc tool generates a set of HTML files that contains the API documentation of your program.

1.7. Performance improvements

The SARL compiler was reviewed in order to remove several memory leaks that cause low performances when compiling large number of SARL files. Even if this task is always active, several improvements have been obtained in this version of SARL.

1.8. New demonstration: the Reynold's Boids

Boids is an artificial life program, developed by Craig Reynolds in 1986, which simulates the flocking behaviour of birds. The name "boid" corresponds to a shortened version of "bird-oid object", which refers to a bird-like object.
As with most artificial life simulations, Boids is an example of emergent behavior; that is, the complexity of Boids arises from the interaction of individual agents (the boids, in this case) adhering to a set of simple rules. The rules applied in the simplest Boids world are as follows:

  • separation: steer to avoid crowding local flockmates;
  • alignment: steer towards the average heading of local flockmates;
  • cohesion: steer to move toward the average position (center of mass) of local flockmates.

The SARL development environment provides an implementation of the Reynold's Boids within the set of available "examples."
This version of the Boids is implemented with the Java AWT graphical library.

2. Detailed Changes

2.1. SARL Language

2.1.1. SARL Syntax

  • Add support for try-with-resource statements (details).
  • When a lambda has multiple parameters, and no name is provided by the SARL developer, the compiler generates default names for each of the formal parameters. The implicit name for the first parameter is $0, $1 for the second, $2 for the third, etc. (details).
  • throw becomes a statement that has side effect (details).

2.1.2. SARL Validator

  • Use read-write locks in place of the mutual exclusion locks (1, 2).
  • Avoid the generation of "possible side-effect on occurrence" when occurrence is used within complex expressions (details).
  • Change the texts associated to the warnings on the possible invalid usage of occurrence (details). The meaning of previous error message was not enough clear to the SARL developers. The message is refactored in order to be more explicit and clear.
  • Remove the search of the Xtext library on the classpath when validating (details).
  • Allow to ignore warnings related to raw types (details).

2.1.3. Java Model Inferrer

  • Use read-write locks in place of the mutual exclusion locks (details).
  • Avoid memory leaks caused due to cyclic references in the action prototype provider (1, 2).
  • Add release() function in the GenerationContext type in order to limit memory leaks (details).
  • Use string representations for the SARL version (details). The version of SARL was stored into a floating-point number. This approach was fine until the version becomes 0.10. With this version number, it is impossible to make the difference between 0.1 and 0.10.
  • Fixing the automatic annotation related to the purity of the function (details).

2.1.4. SARL Core Library

  • Use read-write locks in place of the mutual exclusion locks (details).
  • Events:
    • Add the events ParticipantJoined and ParticipantLeft, and the associated supported into the SRE (details).
  • Context:
    • Updating the documentation of getOrCreateSpaceWithSpec in order to indicate that the default space is ignored (details).
  • Annotations:
    • Enable the DefaultSkill annotation (details). This annotation could be attached to a Capacity in order to specify the default skill to create into an agent, if one skill is not explicitly provided.
    • Move the SarlAccessorsProcessor annotation, which is provessing the @Accessors annoations into the SARL core library (details). Indeed, for being used by the compiler, the SarlAccessorsProcessor annotation must be in the classpath of the project, i.e. the core library.
  • Core:
    • Change the access modifier to public for the pure functions of AgentTrait (details) in order to enable access to these read-only information.
  • Bootstrap:
    • Add getService function into the Bootstrap (details). This function enables the access to SRE services from any point in the code.
    • Add getKernelLogger function into the Bootstrap (details). This function enables the access to the SRE kernel logger from any point in the code.
    • Add isRunning function into the Bootstrap (details) in order to determine any instance of the SRE is running.
    • Add startAgentWithID function into the Bootstrap (details).

2.1.5. SARL Batch Compiler

  • Use read-write locks in place of the mutual exclusion locks (details).
  • Fixing classpath definition into the batch compiler that avoid proper compilation on certain siuations (details).
  • Fixing the deletion of the temporary folders that are created by the batch compiler (details).

2.2. SARL Development Toolkit (SDK)

  • Use read-write locks in place of the mutual exclusion locks (details).
  • Remove io.sarl.javafx from the SDK (details). The features that are provided by this module are not supposed to be used by all the SARL applications. Moreover, the dependency to JavaFX libraries (in JDK or not) should be managed by the SARL developer, not by the SARL SDK itself. The module is transformed into a maven library (see below).
  • Move concurrent utilities into a dedicated package (details).
  • Fixing the API documentation for Collections3 (details).

2.3. Eclipse Development Environment

2.3.1. General Changes

  • Use the Concurrent Mark Sweep GC that may provide better performances (details).
  • Do not generate launching scripts for 32-bit platforms (details).
  • Change splash screen and about dialog's pictures (1, 2).
  • Add en entry into the FAQ about the difference between the "SARL agent" and "SARL application" launch configurations (details).

2.3.2. Outline Component

  • Add the getter and setter functions when no argument is provided to the Accessors annotation (details).
  • Display the accessor functions when multiple types of accessors are given to the Accessors annotation (details).
  • Unify the rendering of the members into the inner types and the root types (details).
  • Show inherited constructors when the type has no member (details).
  • Colorized with a specific color (that could be edited into the general preferences) the inherited constructors (details).

2.3.3. Wizards

  • Add the events SpaceCreated, SpaceDestroy into the template that is used by the new-agent wizard (details).
  • Fixing the incorrect behavior of the project creation wizard when the manually provided folder of the project already exists and contains a non maven SARL project with java files (details).
  • Fixing description text of the wizards (details).

2.3.4. Other Components

  • Enable the programmatic creation of launch configurations with a given name (details).
  • Export the icons into the m2e plugin (details).
  • Replace the calls to the deprecated function AbstractUIPlugin.imageDescriptorFromPlugin() (details).

2.4. External Contributions to SARL

2.4.1. Examples

  • Add example : Reynold's Boids (1, 2).
  • Update the "hello world" example, following the upgrade of the event dispatching mechanism (details). The agent does not receive any more the system events that it is not supposed to received. Then, the corresponding on statements were removed.
  • Add launch configurations for each example project (details).
  • Add the capability to create a launch configuration for each example into the example-creation wizard (1, 2, 3).
  • The syntax for paths of the files to open that are specified into the plugin.xml file is normalized (details). The example-creation wizard searches for the file based on the specified location (named <loc> below):
    1. file with path <loc> exists;
    2. file with path <project-name>/<loc> exists;
    3. file with path <project-name>/src/main/sarl/<loc> exists.
  • Enable the injection instances of the SARL component into the example-creation wizard (details).
  • Explain how to launch each JavaFX example into their README (details).
  • Change the background of the examples' icons from black to white in order to be integrated in a nicer way into the Eclipse environment (details).

2.4.2. LaTeX Styles

  • Remove color macros from the not-colorized LaTeX style (details).

2.5. Janus Run-time Environment

  • Add the support of the events ParticipantJoined and ParticipantLeft (details).
  • Use read-write locks in place of the mutual exclusion locks (details).
  • Add shutdown function in order to force shutdown programmatically (details).
  • Inject the default space instance into the space specifications (1, 2).
  • Ignore the default space inside the getOrCreateSpaceWithSpec function (details).
  • Replace the cached thread pool by a fixed thread pool with 32 threads in order to avoid out-of-memory exception due to a too large number of created threads (details).
  • Add a constraint on the maximum version for the JDK into the Janus launching scripts (details).
  • Propagate the deprecation flag from StandardBuiltinCapacitiesProvider to the invokers of this provider (details).
  • The Janus Boot object uses now two output streams: standard and error (details).
  • Add links to the Gitter forum into the FAQ (details).

2.6. Maven Tools

2.6.1. Maven Base Library

  • Add the implicit dependency to guice multibindings library, which is implicitly used by guice but not present into the dependencies (details).

2.6.2. Bootique Application Module

  • Add Maven library for building a bootique-based application (details).
  • Catch the bootique and guice exceptions, and format them in a better way for console logging (details).

2.6.3. JavaFX Application Module

  • Add io.sarl.javafx module (details).

2.6.4. Documentation Generator Plugin

  • Remove unnecessary Maven dependencies into the documentation generator and the associated testing project (details).

2.7. Command-Line Tools

2.7.1. sarlc

  • Rename "working directory" options and functions to "temp directory" (details).
  • Ensure canonical paths are used by sarlc to properly detect the project's file structure (details).
  • Deep re-implementation of the tool in order to fix the issues in the computation of classpath that was resulting to an invalid path (details).

2.7.2. sarldoc

  • Add the sarldoc command-line tools for creation the API documentation from the CLI (1, 2, 3, 4, 5, 6, 7, 8, 9)

2.8. SARL Documentation

  • Add a document on how to inject the default space instance into a space specification (details).
  • Add the documentation page for the sarldoc command line tool (details).
  • Remove unnecessary documentation (details).

2.9. Tools for SARL Contributors

2.9.1. Development Environment

  • Validate the use of the Java versions 8 and 11 (details):
    • Version for running the SARL DSL Environment: min 1.8, max 1.8;
    • Version for running the SARL Development Environment: min 1.8, max 1.11;
    • Version for running the SARL applications: min 1.8, max 1.11.
  • Force the build.properties, MANIFEST.MF files and specific Java classes to contains the JDK and JRE version numbers that is provided in the general pom file (details).
  • Update the Eclipse working sets (details).
  • Update the minimum versions of the tools into the contributor documentation (details).
  • Update the release guidelines (details).

2.9.2. Dependencies

  • Make the io.sarl.javafx module able to use the JavaFX's dependency for JDK8 or JDK11 (details).
  • Upgrade to Eclipse 2019-09 and Xtext 2.19 (details).
  • Upgrade to guava 21.0 (details).
  • Upgrade to afc 16.0 (details).
  • Upgrade to slf4j 2.0.0-alpha1 (details).
  • Upgrade to hazelcast 3.12.1 (details).
  • Upgrade to flexmark 0.50.16 (details).

2.9.3. Back Door to the SRE

  • Add setInternalSkill (details).
  • Deprecate unused functions into SREutils (details).

2.9.4. Unit Tests

  • Add tests for casting operator overidding (details).
  • Add the unit tests for Accessors annotation (details).
  • Add several missed tests (details).
  • Add unit tests for the CLI program sarlc (details).
  • Add unit test for testing the launch of Janus, i.e. dependency checking (details).

2.9.5. Generator of the SARL Compiler (MWE2 Tools)

  • Add an hidden dependency that is mandatory for running the MWE2 script (details).
  • Replace the call to the deprecated function Files.toString() (details).
  • Ensure that the DefaultActionPrototypeProvider is an eager singleton in order to limit memory leaks (details).
sarl - Release 0.9.0

Published by gallandarakhneorg over 5 years ago

1. SARL Language

1.1. SARL Language Grammar

  • Major upgrades:
    • Upgrade to Xtext 2.17.1 (1, 2, 3). This version of Xtext provides better performances. It is also fixing issues related to the Xtext editor.
  • Upgrade to Eclipse 2019-03 (details). See major implications of this upgrade.
  • Operators:
    • Add overriding of the cast operator (1, 2, 3): it is now possible to create overriding functions that may be invoked when the as operator is used and the standard casting behavior cannot be applied. Several casting operations are predefined for convertings numbers and strings.
  • Active Annotations:
  • References to it into the closures/lambdas:
    • Bug fix: implicit references to it into the closures are not causing serialisation issues, e.g. when the lambda is embedded into an event as the scope of this event. (details)
    • Bug fix: avoid infinite loop when searching for it references into the lambda expressions (details).

1.2. SARL Validator

  • The validator warns only when a event firing declaration does not concern an early-exit event. (details)
  • The warning "unused function" is not any more generated when a function is invoked with one of its arguments with a default values (details).

1.3. Java Model Inferrer

  • Avoid Java error when using it variable into the serializable lambdas. (details)
  • Make the generation of the type members faster. (details)
  • Ignoring files without Xtext content during the generation of the Java code (details).

2. SARL Development Toolkit (SDK)

2.1. New Features

  • Add casting operators for:
  • Bootstrap API:
    • add functions into the Bootstrap API (details): setSpecificContextUUID, setUniverseContextUUID, getUniverseContextUUID, setUniverseSpaceUUID and getUniverseSpaceUUID.
    • deprecate setDefaultContextUUID (details).

2.2. Time Extension

  • Replace the numeric constants into the inline expressions of the time extension by the corresponding static constants (details).

3. Eclipse Product

3.1. Multi-platform Configurations

  • Removing all the support for x86 architectures (details). These architectures are not any more supported by the Eclipse framework. Consequently, these is not any more a SARL product for the 32-bit platforms.

3.2. UI Components

  • Add the action "Convert to SARL Maven Project" into the pop-up menu on a project (details). This option enables to convert a standard SARL project into its equivalent Maven SARL project.
  • Do not display the editor's inconsistent state when the editor is dirty (details). This small update is a first answer to the old issue related to the inconsistent state of the editor comparing to the rest of the widgets (errors are appearing into the editor and not into the other widgets).

4. External Contributions to SARL: Examples

  • Fixing the Sierpinski fractal demo in order to follow the recent evolution of the SARL syntax (details).

5. Janus Run-time Environment

  • Allow cancellation of scheduled tasks before any future object is not provided by the Java thread manager (details). The cancellation is buffered until the future object is provided by the Java thread manager. At this time the task is automatically cancelled.
  • Upgrade to ZeroMQ 0.5.0 (details).
  • Upgrade to Hazelcast 3.11.2 (details).

6. Maven Tools

  • The batch compiler must not fail when only warnings were found into the compiled SARL code (details).

7. SARL Documentation

7.1. Documentation of the SARL Language

  • Complete the documentation on the casting features (details).

7.2. FAQ

7.3. Documentation of SARL Code

  • Add a documentation that explain how to create an API documentation for the SARL code, as Javadoc is doing for any Java code (details).

8. Tools for SARL Contributors

  • Removing support for x86 architectures because Eclipse 2019-03 is not any more supporting them (details).
  • Upgrade to Maven API 3.6.0 (details).
  • Upgrade to Tycho 1.3.0 (1, 2). Add Tycho compiler options into the Maven pom file (details).
  • Upgrade Arakhne libraries to version 15.2 (details).
  • In the massive testing API, replacing the hard-coded \n by System.lineSeparator() to avoid errors on Windows (details).
  • Removing reference to org.eclipse.equinox.ds, and replacing it by `org.apache.felix.scr (details).
sarl - 0.9.0 Release Candidate 3

Published by gallandarakhneorg over 5 years ago

sarl - 0.9.0 Release Candidate 2

Published by gallandarakhneorg over 5 years ago

sarl - 0.9.0 Release Candidate 1

Published by gallandarakhneorg over 5 years ago

sarl - Release 0.8.6

Published by gallandarakhneorg almost 6 years ago

1. SARL Language

1.1. Java Model Inferrer

  • Make the lambdas able to be serializable (1, 2, 3). A lambda is usually used for specifying the scope of the event sending actions. Since a lambda contains a code that reference local objects, and the scope is evaluated when the event is deliver to each agent, the scope function cannot be properly evaluated when the event and its scope have been transferred through a computer network. This change into the SARL compiler enables to generate a Java version of the lambdas in order to be serializable.

1.2. SARL Core Library

  • Move number extensions into the module io.sarl.lang.core (details). The extensions are usually used for generated an inline version of the operations on the numbers. When the @Inline is disabled into the compiler configuration, the Java functions provided by the number extensions must be accessible from the public SARL API. Consequently, the extensions are moved from the module io.sarl.lang (private API) to io.sarl.lang.core (public API).

1.3. Command Line Compiler

  • Remove hard dependencies to experimental contributions (details). This decision enables to avoid run-time errors when the experimental libraries are not available in the tool's classpath.

2. SARL Development Toolkit (SDK)

  • Ensure API events are fully serializable (details). All the events that are defined into the SDK are fixed in order to enable their serialization.

3. Janus Run-time Environment

  • Gson serializer is disabled because it cannot handle the lambda serialization (details). It is replaced by the native Java serializer.
  • Send events into the local instance of the SRE if an error occured when sending over the network (details).
  • Fixing the formatting of the error messages into the network service (details).
  • Fixing error messages of the GsonEventSerializer (details).

4. Eclipse Product

4.1. Internal UI Implementation

  • Avoid the double paste of a text into the SARL editor (details). When the "auto-formatting when pasting" feature was enabled, the text is pasted two times. This change fixes this issue.
  • Print a warning when the errors in the editor and the SARL model are not the same (details). This change shold enable the SARL developpers to detect when and why the state of the SARL editor becomes invalid regarding the SARL model behind the editor.

4.2. Eclipse Product

4.2.1. Launching Configurations

  • Re-enabling the source tab into the SARL launch configurations (details). This tab is used to configuration the search path for the SARL sources.

4.2.3. UI Components

  • Avoid to open a dialog box for adding the SARL nature to a project (details). The addition of the SARL nature is added without querying the user to confirm.

5. Maven Tools

  • Remove hard dependencies to experimental contributions (details). This decision enables to avoid run-time errors when the experimental libraries are not available in the tool's classpath.

6. SARL Documentation

  • A language comparison is written into a specific page (1, 2).

7. Tools for SARL Contributors

  • Add unit test for testing the operation conformance on numbers. (details) Xbase library is officially conformant to the Java specification regarding the typecasting (implicit or explicit) of the numbers. In order to highlight the different cases, and to prepare SARL for the introduction of the cast operator overriding, a set of unit tests have been added.
  • Make the test tools faster (1, 2).
sarl - Release 0.8.5

Published by gallandarakhneorg almost 6 years ago

1. Janus Run-time Environment

  • Fixing network connection with ZeroMQ library. (details)
  • Add warning if the "hazelcast.local.localAddress" environment variable is manually set. (details)

2. Eclipse Product

  • Add into the outline the functions generated with [Accessors](http://github.com/Accessors). (details)
  • Fixing the ordering and the filtering functions of the outline. (details)

3. SARL Command-Line Compiler

  • Fixing a typo into the name of a configuration variable. (details)
  • Fixing a typo into a class name. (details)

4. Documentation of the SARL Core Library

  • Fixing the documentation of Logging.setLoggingLevel. (details)

5. Tools for SARL Contributors

  • Add unit test for testing the type conformance issues on boolean. (details)
sarl - Release 0.8.4

Published by gallandarakhneorg about 6 years ago

1. Janus Run-time Environment

  • Ensure that AgentKilled event is fired when the agent is really destroyed. (details)
  • Ensure that all functions in Schedules BIC use the Time BIC. (details)
  • Use the new functions of Time capacity for implementing the time supports into the Schedules BIC. (details)

2. Maven Tools

  • Avoid compilation error when generated folder are missed from the file system. (details)

3. SARL Development Toolkit (SDK)

  • Add the function at() into the Schedules BIC. (details)
  • Add functions for converting time in the Time BIC. (details)

4. SARL Language Validator

  • Add warning for discouraged calls to Thread class. (details)

5. Eclipse Product

  • Update SARL icons for enforcing the visibility of the markers. (details)

6. Tools for SARL Contributors

  • Add SHORT_TIMEOUT constant for unit tests. (details)
  • Add @Repeat annotation into the testing API. (details)
sarl - Release 0.8.3

Published by gallandarakhneorg about 6 years ago

1. SARL Run-time Environment

  • Force the version of Guava in the SRE pom file. (details)
  • Force all the log messages to have a logger name in the output. (details)

2. SARL User Interface

  • Change the SARL element icons. (details)
  • Add the visibility markers on the type elements icons. (details)
sarl - Release 0.8.2

Published by gallandarakhneorg about 6 years ago

1. SARL Language

  • In synthetic functions that are generated for supporting the default valued parameters, the returned type of the automatically generated functions delegate to the original (typed by the SARL developer) function's return type when this return type is inferred from the context. (details)

2. Eclipse Product

  • Fixing the invalid command into the launching script for Ubuntu OS. (details)

3. Janus Run-time Environment

  • Revert Java stream usage in the Event dispatching in AbstractEventSpace. This issue caused events to be never delivered, including the Initialize events. (details)
  • Ensure an agent killing in "on Initialize" has effects. (details)
  • When the killMe function is called multiple times, a debug message is output for notifying that the agent was already killed. In older versions, this state was output into an information message. (details)
sarl - Release 0.8.1

Published by gallandarakhneorg about 6 years ago

1. Janus Run-time Environment

  • When a event is self fired from the on Initialize, it may be never received by the agent. This patch fixes this issue that is due to the missed firing of the buffered events. (details)

2 General Changes

  • Upgrade to Eclipse 2018-09. (details)
sarl - Release 0.8.0

Published by gallandarakhneorg about 6 years ago

1. SARL Language

1.1. SARL Language Grammar

  • Upgrade to Xtext 2.15. (details)
  • Upgrade to AFC 15.0. (details)
  • Use SLF4J as the standard logging system. (details)
  • Fixing the invalid precedence of the power operator. (details)
  • Refactor the number operators for avoiding ambiguous calls. (details)
  • Allow "public" modifier on the behavior's fields. (details)
  • Add global functions for creating 2-dimension arrays. (1, 2)
  • Make inlined the functions isMe(), isFromMe(). (details)
  • Enablement of the automatic generation of the equality test functions. (details)
  • Avoid error when "occurrence" is used in an argument's expression. (details)
  • Avoid Java compilation error when a early exit function is called within a function with return type. (details)
  • Avoid infinite loop when loop in the type inheritance is declared. (details)
  • Avoid internal exception when Pure is attached to a function in the code. (details)
  • Implicitly imported functions in MapExtensions are moved from SARL to Xtext. (details)
  • Refactoring of the extra-language generation API. (details)
  • Add output configuration for test code. (details)
  • Apply Xtext patch for solving security issue from JDT jar files. (details)

1.2. SARL Validator

  • The detection of the invalid and discouraged uses of occurrences is refactored in order to provide consistant errors. (details)
  • Potential synchronization issue is ignorable with SuppressWarnings. (details)
  • Fixing the Xbase regression regarding the detection of duplicate types within a script. (details)

1.3. Java Model Inferrer

1.4. SARL Core Library

  • Add initialization parameters for the behaviors. (details)
  • Fixing the inlining of the Agent's functions. (details)

1.5. SARL Batch Compiler

  • Introduce the selection of different Java compilers within the batch compiler. (details)
  • Add optimization level parameter to the SARL batch compiler. (details)
  • Add the compile(IProgressMonitor) function into the SARL batch compiler. (details)
  • Change the format of the issue messages that is used by the SARL batch commpiler (1, 2)
  • Remove the 'Finished" message within the sarl batch compiler. (details)

1.6. Generator for extra-languages

  • Refactoring of the extra-language generation API. (details)

1.7 Python3 Generator for SARL

  • Enable the generation of the inner types. (details)
  • Remove Bootique configuration. (details)

2. SARL User Interface

2.1. UI Components

  • Add special highlighting for capacity methods. (details)
  • Add codemining feature, and codemining displays the implemented type for anonymous class. (1, 2)

2.2. Internal UI Implementation

  • Add specific output folder for test code. (details)
  • Refactoring of the extra-language generation API. (details)

2.3. Eclipse Product

2.3.1 General Product

  • Upgrade the IDE for using Eclipse Photon. (details)
  • Configure the classpath with standard and test flags. (details)
  • Change the name of the product from "SARL Development Environment" to "SARL IDE". (details)
  • Linux launching scripts support both GTK2 and GTK3. (details)

2.3.1. Preferences

  • Add options for enabling or disabling the generation of the special Java statements, e.g. equals, clone, the serial numbers. (details)
  • Enhance the SARL project configurator by providing new functions. (details)
  • Refactor the validation code of the editor preference page. (details)

2.3.2. Wizards

  • Avoid NPE when creating a type with a super type. (details)
  • Make public the template of the pom file. (1, 2)

2.3.3. SARL Command-Line Compiler

  • Add SARL boot class path. (details)
  • Add parameters for selecting the Java compiler and setting the optimization level. (details)
  • Add the command line options for running the extra-language generators. (details)
  • Re-implement sarlc tool with Bootique. (1, 2, 3)
  • Compilation command outcomes the first error message. (details)
  • Path detector is now injectable. (details)
  • Add a progress bar that could be enabled with --progress. (details)
  • Enable injection of the issue message formatter. (details)
  • Write more details into the options' descriptions. (details)

3. External Contributions to SARL

3.1. Examples

  • Add the Game-of-Life example.
  • Add the version of the maven-compiler-plugin in the pom template. (details)
  • Add file headers and author comments into all examples' files. (details)
  • Enable the Maven compilation of the tests during the unit tests' execution. (details)
  • Create a Maven project when the example folder contains a pom file. (details)
  • Creation of a default pom file within each example's projects. (details)
  • Add pom files to the JavaFX-based examples. (details)
  • Add icon for each JavaFX-based example. (details)

4. SARL Run-time Environment

  • Avoid the killed agents receiving the AgentKilled events. (details)
  • Avoid the spawned agents receiving AgentSpawned events. (details)
  • Use the Java SDK's cached thread executor service by default. (details)
  • The default maximum number of threads is decrease to 32. (details)

5. Maven Tools

  • Apply separate compilation processes for SARL standard code and SARL unit test code. (1, 2)
  • When the SARL compiler fails, the first compilation error is output as the main error. (details)
  • Add the configuration options for running the extra-language generators. (details)
  • Add parameters for selecting the Java compiler and setting the optimization level. (1, 2)
  • Avoid help mojo discovery in classpath libraries. (details)

6. SARL Documentation

6.1. Documentation of the SARL Language

  • Add documentation on DefaultSkill. (details)
  • Add documentation on the short notation of the lambda expressions. (details)
  • Add documentation on Skill's install and uninstall functions. (details)

6.2. Documentation of the SARL Core Library

  • Fixing the API documentation. (details)

6.3. Tutorials

  • Add tutorials on parallel execution and MAS initialization. (details)

6.4. Documentation for SRE

  • Update documentation on assert for its enabling and disabling. (1, 2)

6.5. Documentation for the Maven Tools

  • Update the documentation related to the Maven Exec plugin. (details)
  • Add documentation for sarl-maven-plugin plugin. (details)

7. Tools for SARL Contributors

7.1. General Changes

  • Upgrade to Maven 3.5.3. (details)

7.2. Generator of the SARL Compiler (MWE2 Tools)

  • Codebuilder fragment does not generate unused variables. (details)
  • Extension types within code builder are no more ignored. (details)
  • Add import wizard for Maven-based SARL projects. (details)
  • Test code is generated into a specific source folder. (details)
  • Provide an utility function for importing a SARL Maven project properly. (details)
  • Create the wizard for creating a new SARL Maven project. (details)
sarl - Release Candidate 0.8.0-rc3

Published by gallandarakhneorg about 6 years ago

sarl - Release Candidate 0.8.0-rc2

Published by gallandarakhneorg about 6 years ago

sarl - Release Candidate 0.8.0-rc1

Published by gallandarakhneorg about 6 years ago

sarl - Release 0.7.2

Published by gallandarakhneorg over 6 years ago

1. SARL Language

1.1. SARL Batch Compiler

  • Fixing invalid command line for the Java batch compiler.

2. SARL User Interface

2.1. Eclipse Product

2.1.1. Wizards

  • Avoid NPE when creating a Skill with the wizard.
  • Fixing the documentation of BundleUtil.

3. External Contributions to SARL

3.1. Examples

  • to deprecated features is forbidden in example codes.

4. Janus Run-time Environment

  • Update the test API for specifying the injection module.

5. SARL Documentation

5.1. Documentation for SRE

  • Create a Maven project with Janus within the dependencies.

6. Tools for SARL Contributors

6.1. All Platforms

6.1.1. Dependencies

  • Downgrade to Maven API 3.3.9
  • Upgrade the JDT and SWT plugins.
  • Upgrade to m2e 1.8.3.
Package Rankings
Top 15.91% on Repo1.maven.org