Download Latest Version acton-linux-x86_64-0.26.0.tar.xz (89.2 MB)
Email in envelope

Get an email when there's a new version of The Acton programming language

Home / v0.23.0
Name Modified Size InfoDownloads / Week
Parent folder
acton_0.23.0_amd64.deb 2024-08-13 66.3 MB
acton-linux-x86_64-0.23.0.tar.xz 2024-08-13 87.6 MB
acton-macos-x86_64-0.23.0.tar.xz 2024-08-13 87.2 MB
README.md 2024-08-13 6.0 kB
v0.23.0 source code.tar.gz 2024-08-13 2.2 MB
v0.23.0 source code.zip 2024-08-13 2.6 MB
Totals: 6 Items   245.8 MB 4

Added

  • More unboxing of fixed size integers
  • Function local variables are unboxed
  • Passing fixed size integers as arguments between functions is also unboxed
  • This adds an extra pass to the compiler to handle boxing and unboxing
  • For some programs, the code is now pretty much optimal
    • For example, the C code generated from test/perf/src/dct.act looks pretty much as one would write it by hand and thus runs at about the "speed of C". It does 0 mallocs and runs about 20x faster than before unboxing (depending a bit on computer).
  • class and actor attributes are still boxed
    • This is likely the most important future work around unboxing since individual mallocs for class & actor attributes typically account for a the lion's share of GC pressure
    • It is challenging around generics though
  • New Set.update() method to add items to a set from an iterable, such as a list or another set
  • Added --module argument to acton test to select module to test
  • For example, acton test --module foo to only run tests in module foo
  • Improved printing of test results for test modules that crashed
  • The error is now printed for each individual test in the test module
  • Added list.index(val, start=0, stop: ?int) to get the first index of an element in a list. It can be constrained through the start and stop parameters.

Changed

  • re.match() now returns Match object where the group is list[?str]. It used to be list[str] but it is possible to have groups that do not match on anything and so ?str is the correct type. This applies both for named groups and normal numbered groups.
  • For example, consider foo((123)|bar) which matches either foo123 or foobar. The inner (123) group is ORed and so it will have no match for foobar, thus we get the result m.group = ["foobar", "bar", None]
  • set.pop() now throws ValueError for an empty set

Fixed

  • Fixed tuple type inference
  • Tuples with named fields can now be properly type inferred
  • acton test perf now limits concurrency to 1 to get better results
  • Fix str.strip() on empty strings, it would previously return \n but now returns an empty string as it should
  • Fixes crash in re.match() for groups with no matches, which previously resulted in SEGFAULT
  • For example, consider foo((123)|bar) which matches either foo123 or foobar. The inner (123) group is ORed and so it will have no match for foobar, thus we get the result m.group = ["foobar", "bar", None]
    • This would previously crash but we now properly check the result values
  • Fix str slicing when range is 0 length which would previously SIGILL
  • For example, for a = "foobar" if we would try to access a[23:], there is no character 23 and so the length of the slice is 0 which would trigger a SIGILL when compiled in --dev mode (which comes with lots of extra UBsan)
  • Fix dict corruption issue when deleting items [#1805]
  • set.pop() now does not crash for an empty list (it threw NULL before)
  • Fix decoding of buffered test output

Testing / CI

  • Added performance test to CI
  • This runs on a dedicated computer, a laptop in Kristian's rack at home
  • Runs acton test perf in test/perf which currently only includes the dct program
    • Simply add more test programs to the test/perf project to have them run
  • The testing procedure is as follow:
    • The CI test checks out the tests from the feature branch, so it will always be the latest version of the test itself
    • The latest tip release from acton main branch is installed and used to compile the test/perf project
    • acton test perf --record is used to run the test and record the result, which will act as the baseline
    • The acton release from the local feature branch is then installed (fetched as artifact from the build-debs job)
    • acton test perf is now run, which will run with the latest version and compare the results against the baseline
    • We do not currently inspect the results to give a pass / fail score, they're just printed in the CI output for a human to look at
    • Natural variance seems to hover around +-5%, which feels OK
  • Revamp PR testing to run on small set of platforms and run a nightly scheduled test job that includes all platforms that were previously in the PR jobs
  • This was triggered by the number of platforms reaching a higher number which in turn has led to more cached data and as the GitHub Actions runner cache is limited to 10GB, we hit the limit and got churn which meant that there were always slow jobs. By reducing the number of PR jobs, they can continue to run cached whereas the nightly jobs can run without a cache.
  • Stop CI testing on MacOS 11 as it has been deprecated by Github
  • Start CI testing on Ubuntu 24.04
  • Stop CI testing on Ubuntu 23.04 and 23.10 as they are EoL
  • Temporary fix of building Acton by using our own mirror for the Zig tar ball. We are using a particular nightly v0.12.0 build that is no longer available for download from ziglang.org and so we now mirror it ourselves. This affects both builds in CI and local builds.
  • Fix GitHub Actions to run on Ubuntu 18.04
  • The artifact download action uses Node.JS to run and as GitHub has imposed constraints and new defaults, this has been magically updated to use a newer version of Node.JS than before. The newer Node version is compiled using glibc 2.28 and that's too new for Ubuntu 18.04, so the end result is that you basically can't use the common GitHub Actions with Ubuntu 18.04 or similar older distros. What a weird way to treat your CI users by GitHub!? Anyhow, we work around this by explicitly enabling the use of the old Node again.
  • Add caching for test-external-projects of C object files & archives
Source: README.md, updated 2024-08-13