Skip to content

Releases: actonlang/acton

v0.7.4

06 Jan 18:34
4fe8587
Compare
Choose a tag to compare

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]
  • RTS now connects to all DB nodes to enable replication factor >1 [#427]
    • This is a short term fix [#409]
    • Longer term, the client DB gossip protocol will be enhanced to deal with
      this properly [#432]
    • Tests now using 3 DB nodes
  • 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

03 Jan 13:15
0098b40
Compare
Choose a tag to compare

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
  • 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

15 Dec 22:23
e068244
Compare
Choose a tag to compare

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
  • 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

Fixed

  • The RTS mode using the distributed backend for storing program state is now
    working [#407]

v0.7.1

23 Nov 23:24
3a87fe0
Compare
Choose a tag to compare

There are currently known regressions:

  • using RTS together with the distributed backend database is not working

Fixed

  • actonc now explicitly using -no-pie on Linux [#390]
    • this aligns with how we already build our object files, shipped in
      libActon.a etc

v0.7.0

23 Nov 20:36
b38f4f7
Compare
Choose a tag to compare

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
  • 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
  • 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)
  • 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
  • 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

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
  • 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
  • Make build more idempotent [#333]
  • Fix GNU sed check in Makefile [#344]
  • Add #pragma once to numpy.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
  • Fix GitHub Action caching issue by adding version cache key [#339]
  • Simplify GitHub issue template for bug report [#367]

v0.6.4

29 Sep 19:22
c7b7f3c
Compare
Choose a tag to compare

There are currently known regressions:

  • using RTS together with the distributed backend database is not working

Fixed

  • break & continue now works in for loops that are CPS fragmented [#325]
    • Using break would previously not work in a for 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 the for loop.
  • 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.

v0.6.3

28 Sep 11:56
02b7624
Compare
Choose a tag to compare

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 uses cc rather than gcc [#303]
  • Acton project makefiles now use $(CC) rather than hardcoding cc [#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.
  • 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

v0.6.2

23 Sep 17:35
99b0986
Compare
Choose a tag to compare

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.
  • 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.
  • 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.
  • 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.

v0.6.1

19 Sep 15:58
6decdf3
Compare
Choose a tag to compare

Added

  • Debian packaging [#60]
    • There is now a .deb produced and uploaded as part of the artifacts for each
      release on GitHub.

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.

v0.6.0

17 Sep 07:47
15214f9
Compare
Choose a tag to compare

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 import src/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 binaries
        • out/bin is where executables end up (actonc --root foo bar.act will
          produce an executable)
        • out/types is where types files go
        • out/lib is where object / library files go
    • 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 case actonc 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
  • 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,
  • 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 of actonc --version and --verbose no longer influences the output.

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.