Releases: devlaam/Leucine
0.6.1
Code was freed from unused statements and made ready to compile without warnings under Scala 3.4.0). Furthermore we increased the following versions:
- scala: 3.3.0 => 3.3.3
- scala-js: 1.13.2 => 1.15.0
- scala-native: 0.4.15 => 0.4.17
- sbt-assembly: 2.1.1 => 2.2.0
- sbt-version-policy: 2.1.3 => 3.2.0
0.6.0
Squashed minor bug in demo (used 'server' whereas it should be 'clock`) and further increased the versions of the libs/tools:
- scala: 3.2.1 => 3.3.0
- scala-js: 1.12.0 => 1.13.2
- scala-native: 0.4.11 => 0.4.15
- sbt: 1.8.2 => 1.9.4
- sbt-assembly: 1.2.0 => 2.1.1
- sbt-scalajs-crossproject: 1.2.0 => 1.3.2
- sbt-scala-native-crossproject: 1.2.0 => 1.3.2
- sbt-version-policy: 2.1.0 => 2.1.3
If you are not yet on these versions, you may use 0.5.5, which is functionally identical to 0.6.0.
0.5.5
0.5.3
With the new Process
mixin aids you can now make use of message handling via partial functions. These are stored as function objects on a stack and can be manipulated with some stack operators like Push
, Pop
and Keep
. See the documentation for all the details. This extra facility makes the transition from Akka to Leucine easier, but are also of value in their own right.
0.5.2
Changes were in the code that is related to the use of families:
- It is now possible to define a shared actor between all children of a parent actor. This has the advantage that a
get
on the actors name directly has the expected type, so casting is reduced. - It is now possible to reuse the actor defining types (such as
RestrictDefine
) as family defining types as well, provided you use the same base type for all actors. Since this is strongly advised, the reuse make code shorter. You can, of course, still use separate definitions. - Extra tests where introduced, which also pointed out some type errors in the code, rendering some particular use cases impossible. These have been corrected.
- Relaying has been refactored, and is now based on the same code for each type of base actor.
- Internal traits
FamilyChild
andFamilyParent
interchanged. For historic reasons these were defined 'reversed'. This has no external consequences. - Ensured the code is compatible with Scala version 3.3.0 for a coming upgrade.
0.5.1
Most important noticeable difference are the changes in the GlobalMonitor
. This is now easier to use and produces more relevant information. See the wiki for the details. Internally the Family
mixins have been changed a lot (removed the match types) but it did not yet result in code that is easier to use. This remains on the wish list. Besides that, there were lots of minor internal changes as well as updates to the comments.
0.5.0
Many improvements and adjustments, among which:
- In
AcceptActor
providing a sender is now possible, but optional as well. Motivation: Debugging is a lot easier if you can keep track of where the messages are originating. - Spliced the Monitor in two. You can now use a
LocalMonitor
for quick debugging on the fly, great for just a few actors. Or you can use the system wideGlobalMonitor
for all actors at once. - Two of the demo's can now show this by added the
debug
flag to their startup command. See the Readme for more info. - Tracing can now be switched on/off from within the actor to be able to focus on a specific moment in the message handling.
- Tracing info itself is more clear.
- Context traces (=debugging of the actor system itself) can now be rerouted by the user (to log, stdio or other string handling function).
- Added mailbox protection alarms and unhandled messages to the internal metric, so you can keep an eye on them.
- Added a general mechanism to catch all unhandled messages (a bit like the dead-letters in Akka, but put under your own control).
- Stopping the
RefuseActor
is now on equal footing with the others. Callingdone()
is no longer possible. - Renamed and hidden some internal methods.
- Added the possibility to get the processLoad from an actor in short time intervals (used to be only over entire lifespan).
0.4.3
0.4.2
The version has the new WideActor
added. It accepts all messages from all actors. A bit like accepting Any
, but it uses Actor.Letter[Actor]
as base type. This actor comes in handy when you are in the transition from an already running system under for example Akka (untyped) to Leucince. First change all actors to WideActor
and when everything works again, start making the letters typed, and move over to SelectActor
or RestrictActor
. WideActor
should in fact not be used for new designs, but not because it will be deprecated, but because it makes you actors effectively untyped.
0.4.1
Relaying of messages in a family is no longer default. This saves a lot type errors you may encounter when defining families of actors where you do not need relaying at all. It comes with a price. If you want to use relaying, it is activated by using different family mixin's (FamilyRoot
, FamilyRootRelay
, etc) as a well as a special FamilyRelay
trait. The special family traits are ugly (such as FamilyBranchRelayedRelay
!?), and i don't like them at all, but for now, i have no better solution. My long term goal is to let the user mix in the FamilyRelay
only to achieve this effect. However, this requires change of inner type members as a result of that mixing in, and for the moment, i would not know how to achieve this. With each combination of type narrowing, match types and types defined in trait parameters i hit some kind of compilation error.