Releases: actonlang/acton
Releases · actonlang/acton
v0.7.4
Fixed
- env actor is serialized to database backend during bootstrap [#430]
- Actor serialization ("snapshotting") to the database usually happens when a
continuation (roughly an actor method) has been run - The env actor might never run, which meant it might not have been
serialized to the DB, so when resuming an Acton application from the
database, the env actor could be missing leading to a segfault [#408]
- Actor serialization ("snapshotting") to the database usually happens when a
- RTS now connects to all DB nodes to enable replication factor >1 [#427]
- Fix DB Membership signaling on DB server crash [#429]
- The RTS with DDB test is now using 3 DB nodes and replication factor 3 [#434]
- Avoid some C errors so we compile on Ubuntu [#428]
v0.7.3
Fixed
- Fix segfaults in RTS argument parsing [#420]
- Missing argument to option would previously lead to segfault, which is now
fixed [#419] - Passing option arguments with =, like
--rts-wthreads=8
now works
- Missing argument to option would previously lead to segfault, which is now
- Various fixes to C lib wrapping document [#418]
- Renamed minienv to env [#417]
- Only internal change, does not influence what a user of Acton sees
v0.7.2
Added
- Homebrew formula revamped to support Apple M1 [homebrew-acton#28]
- Formula now uses brew installed ("system") ghc instead of stack installed
GHC, which is more idiomatic Homebrew - Mac on M1 users, simply do:
brew install actonlang/acton/acton
- Acton will be automatically built from source!
- No pre-built binary packages ("bottles") as our build environment, which is
using GitHub Action runners, cannot build those
- Formula now uses brew installed ("system") ghc instead of stack installed
actonc
compiler profiles fully implemented [#403]- previously,
--dev
only used to enable RTS debug - now, all libraries are compiled twice, for dev and rel, and packaged up into
libActon_dev and libActon_rel archives - dev mode is compiled with debug symbols (
-g
) - release mode is using optimized code (
-O3
) - final program binary is also compiled with the same flags
- previously,
Fixed
- The RTS mode using the distributed backend for storing program state is now
working [#407]
v0.7.1
v0.7.0
There are currently known regressions:
- using RTS together with the distributed backend database is not working
Added
- Basic support for Apple M1 silicon [#383]
- Mostly about keeping track of Homebrew paths, since it uses
/opt/homebrew
on Apple silicon vs/usr/local
on Intel CPUs - Not thoroughly tested, but Acton compiles and
actonc
appears to produce
working programs
- Mostly about keeping track of Homebrew paths, since it uses
- Acton by Example book [#370] [#371] [#375]
- https://www.acton-lang.org/learn/acton-by-example/
- far from complete, but a decent start
- using mdBook format
- using svgbob plugin to draw pretty SVG art using ASCII art
- source in
docs/acton-by-example
- source deliberately kept close (same git repo) to Acton itself, so we can
easily update docs as we update other things
- source deliberately kept close (same git repo) to Acton itself, so we can
- The number of worker threads is made configurable [#365]
- Run an acton program with
--rts-wthreads X
- As before, number of worker threads defaults to number of logical CPU cores
(threads)
- Run an acton program with
- RTS statistics and monitoring functionality [#353]
- Each worker thread keeps some statistics, like:
- number of sleeps
- number of continuations executed
- time spent executing continuation, counted in bucket less than:
- 100ns, 1us, 10us, 100us, 1ms, 10ms, 100ms, 1s, 10s, 100s, +Inf
- bookkeeping overhead, like taking internal locks, enqueueing messages etc,
also counted in buckets
utils/actonmon
is a simple utility to connect to monitor socket, fetch
statistics and display them- can display in fancy table using
--rich
(using Python rich module) - defaults to simple no-frills output that have no extra dependencies
--prom
will expose a http server exposing metrics to be consumed by
Prometheus in the OpenMetrics exposition format- can then be displayed in Grafana or similar
- can display in fancy table using
- Each worker thread keeps some statistics, like:
- There are now two compilation "profiles"; development & release [#345]
--dev
implies debug symbols are included and RTS debugging is enabled,
which was previously enabled with--rts-debug
- release mode is the default and does not include debug symbols nor RTS
debugging
actonc --numeric-version
shows a numeric version number [#346]- a stable interface to simply display the actonc version number
- unlike
--version
which stretches across multiple lines and includes the
versions of cc, the haskell stack used to build actonc etc
- Debian packages are now added as assets to GitHub releases [#369]
- .deb have always been available as GH Action job artifact
- For release versions, the .deb was available via the Acton apt repo
- Now easily possible to grab historic versions as well as pre-release .deb,
i.e. from main branch by downloading .deb from GitHub release page
Changed
- Acton compiler now built using Haskell LTS 18.12 [#335]
--rts-debug
option replaced--dev
[#345]- GitHub Actions now run for PRs and for main branch and tags [#385]
- Would previously run both for PRs and for push to a branch, resulting in
duplicate runs
- Would previously run both for PRs and for push to a branch, resulting in
Fixed
- Significantly improve performance by reducing RTS worker thread wake ups
- Best case scenarios is on the scale of 10x performance with drastically
reduced syscall overhead
- Best case scenarios is on the scale of 10x performance with drastically
- Fix lib path on Mac OS X on x86_64 [#384]
- Now includes
/usr/local/lib
in library search path - This was previously included through some default mechanism but it is now
explicit
- Now includes
- Make build more idempotent [#333]
- Fix GNU sed check in Makefile [#344]
- Add
#pragma once
tonumpy.h
[#331] - Avoid regenerating protobuf generated files [#382]
- Since the generated files are checked into git, we really do not want to
regenerate them, thus the Make target has been turned into a NOP
- Since the generated files are checked into git, we really do not want to
- Fix GitHub Action caching issue by adding version cache key [#339]
- Simplify GitHub issue template for bug report [#367]
v0.6.4
There are currently known regressions:
- using RTS together with the distributed backend database is not working
Fixed
break
&continue
now works infor
loops that are CPS fragmented [#325]- Using
break
would previously not work in afor
loop if the loop was
broken into multiple continuations during the CPS transform. For example,
this happens when a call to another actor is made in thefor
loop.
- Using
- An installed
actonc
can now find__builtin__.h
[#327]- A previous restructuring of files in order to improve the Makefile and build
organization led to us having to use weirdly long and relative include
paths. This ultimately led to run time failures of actonc. Since some of
these files need to be built both when building actonc itself as well as
when using actonc, the paths must remain the same in source and release
output. They did not after [#286], which has now been reverted.
- A previous restructuring of files in order to improve the Makefile and build
v0.6.3
There are currently known regressions:
- using RTS together with the distributed backend database is not working
Added
- Acton now has a apt repository -
apt.acton-lang.io
[#320]- Version tagged releases are automatically uploaded.
Changed
actonc
now usescc
rather thangcc
[#303]- Acton project makefiles now use
$(CC)
rather than hardcodingcc
[#303] - Acton is now built and tested on debian:bullseye (11, current stable) [#313]
Fixed
- Debian packages now depend on non-dev libraries for utf8proc & protobuf [#315]
- Makefile restructuring [#304] [#307]
- backend and compiler Makefiles have now been folded into the top level
Makefile. - DAG is more complete and more things can run correctly in parallel.
- stack / ghc build now uses 4 parallel threads, for some speedup (55 seconds
-> 35 seconds on an AMD 5950X). Higher parallelism did not improve things
much further. - Avoid declaring actonc as a PHONY target, which causes constant rebuilds,
not it actually has proper dependencies defined so make can understand when
there is nothing to do.
- backend and compiler Makefiles have now been folded into the top level
- Debian packages now reflect tip version number [#307] [#308]
- Previously debian packages had the "base version", like 0.6.2, even when
built as a pre-release build.actonc --version
in the package would still
correctly identify like e.g.0.6.2.20210924.16.58.23
- Now the .deb file also contains the complete build info, like
acton_0.6.2.20210924.16.58.23_amd64.deb
- Previously debian packages had the "base version", like 0.6.2, even when
v0.6.2
Added
- Linuxbrew build [homebrew-acton#7]
- Acton can now be installed via Linuxbrew (Homebrew on Linux)
Fixed
- Constraint grouping to also consider free environment types variables [#277]
- Previously, this bug in the constraint solver meant that
actonc
could hang
when compiling certain programs.
- Previously, this bug in the constraint solver meant that
- Added missing CPS case to fix return value [#279]
- Would previously lead to an internal compiler error where the generated C
code would not compile.
- Would previously lead to an internal compiler error where the generated C
- Fix RTS bug that could lead to segmentation fault [#285]
- The integrity of a linked list was not preserved during a certain operation
which would lead to a segmentation fault. - The error typically occurred during high load situations.
- The integrity of a linked list was not preserved during a certain operation
- Continuation environment now includes all variables [#288]
- Previously, after the CPS step, the generated continuation was lacking its
environment which meant some variables were inaccessible.
- Previously, after the CPS step, the generated continuation was lacking its
v0.6.1
Added
- Debian packaging [#60]
- There is now a .deb produced and uploaded as part of the artifacts for each
release on GitHub.
- There is now a .deb produced and uploaded as part of the artifacts for each
Changed
- RTS now uses a minimum of 4 worker threads [#263]
- The default is to use as many worker threads as there are CPUs and set CPU
affinity to map worker threads to CPUs in a 1:1 fashion. - The first core is used to run the eventloop that processes I/O and the rest
runs the main loop that executes actors. - On machines with a low CPU count this can be catastrophic. The extreme
example being a single CPU machine, which consequently will have 0 worker
threads executing actors. It will only run the eventloop that processes I/O
and thus is unable to actually run an Acton program. - Even on a 2 CPU machine, which would lead to a single worker thread
executing actors, this can be quite bad. - We now run a minimum of 4 worker threads, 1 for the I/O eventloop and 3
actor processing threads, to get around these problems.
- The default is to use as many worker threads as there are CPUs and set CPU
v0.6.0
Despite a regression in the RTS's distributed mode of operationa, v0.6.0 is
released as improvements in other areas make it the best version of Acton to
date.
Added
- Acton project concept [#140]
- An Acton project is a standardized structure for how to organize an Acton
project:- At the root is an
Acton.toml
file. It is currently empty but its
location denotes the project root. src/
is the directory in which source files are stored, imports are
relative to this directory, i.e.import foo
will importsrc/foo.act
- imports will also search the system path as before for the stdlib modules
out/
is the output directory in which generated type file (.ty
) and
object / library files are written as well as binariesout/bin
is where executables end up (actonc --root foo bar.act
will
produce an executable)out/types
is where types files goout/lib
is where object / library files go
- At the root is an
- We used to write compiled output of modules to the system path. To install
acton on a system, outside of a users home directory, we can no longer write
to the system path since it is owned by root. Further, we don't want to
write to a common system path as different users code could collide. - Now only the builtins and stdlib modules are in the system path. Other
compiled output, like type files and object files, are written to the
project directory. - It is still possible to compile individual
.act
files as executabes
(--root ROOT
), in which caseactonc
will create a temporary directory
for intermediate output and write the final file in the same directory as
the.act
file. This is to preserve the current behavior when "using acton
as a scripting language". - Overall, the idea is to cater to both:
- Acton as a scripting language
- Often a single source file - minimal "project overhead" wanted
- Acton for large projects
- Many modules, perhaps producing multiple executables
- Good project structure necessary to manage it all
- Acton as a scripting language
- An Acton project is a standardized structure for how to organize an Acton
- There is now an RTS debug mode [#189]
- With
actonc --rts-debug
, an Acton program can be compiled with debug
functionality included. - When a debug enabled Acton program is run with
my-program --rts-debug
,
- With
- Argument to configure the replication factor used with the distributed backend
database [#204]- Default is 3, as that is the lowest value that makes sense for a quorum.
- Read and write quorum is derived from the replication factor / 2 + 1
- Thus, with replication=3, read/write quorum is 2
- Connecting to multiple database backend servers for redundancy [#206]
--rts-ddb-host
can be specified multiple times to connect to multiple
backend servers- Thus, an RTS compute node can survive a database server going down.
- The port number can be specified per host by appending it colon separated
from the hostname, like--rts-ddb-host localhost:32001
- Monotonic time function have been added [#152]
time.monotonic()
returning a float.time.monotonic_ns()
returning nanoseconds as an integer.
Changed
- RTS now uses epoll on Linux [#243]
- Was previously written for kqueue, which runs natively on MacOS X.
- On Linux, a shim, libkqueue, was used to map kqueue calls to epoll.
- To reduce risk of error and potentially squeeze out more performance, epoll
is a better choice. - Dependency on libkqueue has been removed, which makes it easier to compile
Acton on more platforms.
time
module has been aligned with its Python counterpart [#152] [#197]time.time()
function now returns a float.- New function
time.time_ns()
returns time in nanoseconds as an integer. RuntimeError
is raised on an error, just like Python
actonc --version
now includes verbose output [#212]- Previously it was required to run
actonc --version --verbose
to see CC
information etc. This is now included in the default output ofactonc --version
and--verbose
no longer influences the output.
- Previously it was required to run
Fixed
actonc --version
no longer requires a "dummy" argument [#212]- Fix actor creation and initialization in the RTS [#186]
- Previously, actor creation and initialization was indeterministic and given
certain conditions, messages or even actors could be lost, leading to
system malfunction. One way in which this showed was how certain programs
would just hang even when they should exit. - RTS has been entirely reworked in regards to actor creation and now follows
the overall language model, which makes things simpler and more robust.
- Previously, actor creation and initialization was indeterministic and given