SARL Agent-Oriented Programming Language http://www.sarl.io
APACHE-2.0 License
Number of major changes: 3
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].
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:
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
static
modifier for the members of agent-oriented type declarations. [more details]Object
type to base/native types. [more details]-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]src/it
. These folders are now supported by the SARL m2e plugin and automatically created. [more details]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]sarlc
. [more details]sarldoc
. [more details]janus
and janusnode
. [more details]Deprecated
annotations. These information arguments were introducted in recent Java API. [1, 2]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]Published by gallandarakhneorg over 3 years ago
Number of major changes: 4.
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.
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.
In SARL, as for the Akka actor framework, there is an important distinction between failures and validation errors:
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.
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.
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
.toString(JsonBuffer)
was marked as pure but it has border effects. The Pure
annotation is removed from the function (details).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
.@Data
annotation is implicitly considered as immutable (details).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).@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.@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.occurrence
is considered as an immutable object (details).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.null as Type
(details).@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.@Accessors
annotation for adding the variadic parameter marker (...
) to the setter functions when it has been found in an inherited prototype (details).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.getUUID
to getID
accross the entire API (details).@DefaultSkill
annotation (details). This creator generates a NPE whatever the capacity or skill.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)
.Address
and SpaceID
(details).\ignorespaces
at the end of the macro\code
(details).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.
isRootContext()
into the AgentContext
type in order to determine if the agent context is the root context or not (details).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):
Behaviors
capacity. Then, the protected function install()
of the behavior itself is invoked.
on Initialize
handlers of the behavior are activated.Behaviors
capacity. Then, the on Destroy
handlers of the behavior are activated.uninstall()
of the behavior is invoked.
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.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.getDefaultParentID
, getDefaultParentScope
, emitToParent
.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.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.getInnerDefaultSpace
into the InnerContextAccess
capacity (details). This function is an helper for obtaining the default space of the inner context of the agent.join
function from boolean
to AgentContext
(details). The agent is now able to access the joined agent context directly after joining it.NameScheme
enumeration in order to add new schemes from API extensions (details).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.uses
for the relevant capacities that are providing the missed method (details).@SarlAsynchronousExecution
annotation.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.eclipse-slf4j
module (details).-D
definitions from the command-line (details).@DefaultSkill
annotation (details). This creator generates a NPE whatever the capacity or skill.@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).BuiltinCapacitiesProvider
(details).neverReturn
function is changed in order to make its argument mandatory (details).TaskFailure
event when a background task has thrown an exception (details).toString
function for the executor services (details).AgentLife
is refactoring in order to avoid the receiving of events before the initialization stage is finished (1, 2).Lifecycle
service (details).AgentSpawnFailure
occurrence when an agent spawn cannot succeed (details).getScopedParticipants
in the event space in order to be used by extensions of Janus, e.g. the networking module (details).io.janusproject.eclipse
from the classpath of the applications when they are launched in the Eclipse SARL environment (details).janus
command line tool (details).CannotSpawnException
(details).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:
io.sarl.maven.bootiqueapp
in order to separate the Bootique-based library for building applications, and the SARL batch compiler library (details).--generatemarkdownhelp
to the Maven bootique library (details). This option will be available to all the bootique-based applications, e.g. janus
and sarlc
.SARL_DOC_CURRENT_FILE
and SARL_DOC_CURRENT_FOLDER
that contains the parsing documentation file and its folder (details).-D
parameters (details)-D
parameters (details).volatile
keyword (details).on Initialize
(details).janusnode
tool (details).@Generated
annotation that is different between Java 8 and 11 (details).Utils
class into the "lang-core" plugin and the "lang" plugin (details).Published by gallandarakhneorg over 4 years ago
Number of major changes: 4.
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:
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).
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:
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.
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)
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:
io.sarl.lang
module (1, 2).hashCode
and equals
to avoid null pointer exception when running them into the SRE (details).setSkillIfAbsent
into the Agent API (details).getSkill
function of theUnimplementedCapacityException
exception anymore (details).agentId
to participantId
into the Address
class (details).General:
Module eclipse-slf4j:
StandardSREInstall
to ManifestBasedSREInstall
(details).plugin.xml
in order to validate that the provided classname exists (details).io.sarl.experienceindex.plugin
is rearrange to fit the SARL standard (details).InternalSchedules
capacity: in EventBus
, the ad-hoc implementation is replaced by calls to the executeBlockingTasks
function of InternalSchedules
capacity (1, 2).io.sarl.util
module (details).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).ParticipantJoined
events (details).MemberLeft
and MemberJoined
events (details).BehaviorGuardEvaluatorRegistry
(1, 2, 3)compareTo
into the BehaviorGuardEvaluator
and the management of the registry concerning inherited ancestors methods (details).InternalSchedules
capacity provides the executeBlockingTasks
function (details).ThreadExecutorService
's purge that was too costly (details).DynamicSkillProvider
classes to create skills and not install them (details).spawnAgent
function (details).AgentLife
(1); ScheduleSkill
(2).on Initialize
(details).findObject
functions with string of characters as parameter for representing the URI (details).--Xinjectagents
(details).io.sarl.lang
Eclipse plugin into the io.sarl.maven.batchcompiler
module. (1, 2).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).maven-sarl-plugin
module (1, 2).ConcurrentMap
interface instead of its implementation (details).evaluateGuard
when a single evaluator is present, that represents a lot of cases (1, 2).AgentLife
in order to avoid null pointer exception (details).:
when building paths (details).Published by gallandarakhneorg over 4 years ago
Published by gallandarakhneorg almost 5 years ago
Number of major changes : 8
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.
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.
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)
]
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.
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.
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.
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.
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:
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.
$0
, $1
for the second, $2
for the third, etc. (details).throw
becomes a statement that has side effect (details).occurrence
is used within complex expressions (details).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.release()
function in the GenerationContext
type in order to limit memory leaks (details).0.1
and 0.10
.ParticipantJoined
and ParticipantLeft
, and the associated supported into the SRE (details).getOrCreateSpaceWithSpec
in order to indicate that the default space is ignored (details).Capacity
in order to specify the default skill to create into an agent, if one skill is not explicitly provided.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.AgentTrait
(details) in order to enable access to these read-only information.getService
function into the Bootstrap (details). This function enables the access to SRE services from any point in the code.getKernelLogger
function into the Bootstrap (details). This function enables the access to the SRE kernel logger from any point in the code.isRunning
function into the Bootstrap (details) in order to determine any instance of the SRE is running.startAgentWithID
function into the Bootstrap (details).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).Collections3
(details).SpaceCreated
, SpaceDestroy
into the template that is used by the new-agent wizard (details).AbstractUIPlugin.imageDescriptorFromPlugin()
(details).on
statements were removed.plugin.xml
file is normalized (details). The example-creation wizard searches for the file based on the specified location (named <loc>
below):
<loc>
exists;<project-name>/<loc>
exists;<project-name>/src/main/sarl/<loc>
exists.ParticipantJoined
and ParticipantLeft
(details).getOrCreateSpaceWithSpec
function (details).StandardBuiltinCapacitiesProvider
to the invokers of this provider (details).io.sarl.javafx
module (details).sarldoc
command-line tools for creation the API documentation from the CLI (1, 2, 3, 4, 5, 6, 7, 8, 9)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).io.sarl.javafx
module able to use the JavaFX's dependency for JDK8 or JDK11 (details).Accessors
annotation (details).Published by gallandarakhneorg over 5 years ago
it
into the closures/lambdas:
it
variable into the serializable lambdas. (details)\n
by System.lineSeparator()
to avoid errors on Windows (details).org.eclipse.equinox.ds
, and replacing it by `org.apache.felix.scr (details).Published by gallandarakhneorg over 5 years ago
Published by gallandarakhneorg over 5 years ago
Published by gallandarakhneorg over 5 years ago
Published by gallandarakhneorg almost 6 years ago
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).Published by gallandarakhneorg almost 6 years ago
[Accessors](http://github.com/Accessors)
. (details)Logging.setLoggingLevel
. (details)Published by gallandarakhneorg about 6 years ago
Published by gallandarakhneorg about 6 years ago
Published by gallandarakhneorg about 6 years ago
Initialize
events. (details)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)Published by gallandarakhneorg about 6 years ago
Published by gallandarakhneorg about 6 years ago
equals
, clone
, the serial numbers. (details)AgentKilled
events. (details)AgentSpawned
events. (details)Published by gallandarakhneorg about 6 years ago
Published by gallandarakhneorg about 6 years ago
Published by gallandarakhneorg about 6 years ago
Published by gallandarakhneorg over 6 years ago