Name | Modified | Size | Downloads / 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).
- For example, the C code generated from
- 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 toacton 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 returnsMatch
object where the group islist[?str]
. It used to belist[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 eitherfoo123
orfoobar
. The inner(123)
group is ORed and so it will have no match forfoobar
, thus we get the resultm.group = ["foobar", "bar", None]
set.pop()
now throwsValueError
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 inSEGFAULT
- For example, consider
foo((123)|bar)
which matches eitherfoo123
orfoobar
. The inner(123)
group is ORed and so it will have no match forfoobar
, thus we get the resultm.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 accessa[23:]
, there is no character 23 and so the length of the slice is 0 which would trigger aSIGILL
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
intest/perf
which currently only includes thedct
program- Simply add more test programs to the
test/perf
project to have them run
- Simply add more test programs to the
- 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