Pony version 0.33.0 is now available. The release includes a couple of small breaking changes in command line handling when starting up Pony applications.

Big things are afoot behind the scenes in the Pony community. The 0.33.0 release is the first real public indication of those changes.

Our packaging of releases for Linux is about to change a great deal. Up until now, you've been able to get distro-specific packages for Pony releases. Maintaining packaging for Debian and various Fedora/OpenSuse etc. distributions has been very time-consuming. 0.33.0 is the last release that you will be able to get them. Instead, we are replacing them with tar.gz packages.

0.33.0 is the first Pony release where you can download release binaries from Cloudsmith. tar.gz packages for x86 based Linuxes, both musl and glibc based are now available. We'd love it if people started trying them out today.

When we do the next Pony release, the only option for install ponyc Linux binaries will be via the packages hosted by Cloudsmith. With that release, however, you will have a new tool available to you to manage your installation of prebuilt ponyc binaries: ponyup. Look for more news about ponyup in upcoming issues of our newsletter Last Week in Pony.

With the first round of packaging news out of the way, let's move on to information about the rest of the release:

Default to statically linking LLVM into ponyc

Previously, we built ponyc with LLVM dynamically linked by default. This PR changes to statically link LLVM- except on Windows, which hasn't been addressed yet.

There are now three options that can be supplied to the Makefile via the link option

static

llvm-static

llvm-dynamic

static

static will only work when using musl libc. it will attempt to statically link every related to ponyc .

llvm-static

the new default, llvm-static, will statically link LLVM into ponyc. Additionally, it will statically link libstdc++ and if using GCC, libgcc

llvm-dynamic

llvm-dynamic is the previous default where LLVM would be dynamically linked to ponyc.

Added minima checks around --pony* options that accept arguments

--ponythreads & --ponygcfactor option's value can't be less than 1

& option's value can't be less than --ponyminthreads , --ponysuspendthreshold , --ponysuspendthreshold , --ponygcinitial all can't be less than 0 in previous releases, negative values would have silently overflowed, while being assigned to unsigned int

, , , all can't be less than

Renamed --ponythreads to --ponymaxthreads

Since the introduction of scheduler scaling, --ponythreads was controlling the maximal number of threads the runtime would spawn. Renaming it to --ponymaxthreads is more inlined with the --ponyminthreads .

Be aware that --ponythreads will silently be ignored from now on. There will be no error if you don't update this to --ponymaxthreads .

Introducing the --llvm-args command line option

Now developers can feed LLVM-specific command line options into the LLVM part of ponyc via the --llvm-args option. Which accepts multiple LLVM options as a comma-separated string. This feature is only available in debug build.

Examples

(1)

ponyc --llvm-args=-debug ...

Passing -debug option to the LLVM part. Which is same as running opt -debug ...

(2)

ponyc --llvm-args=-debug-pass=Arguments,-debug-only=dce ...

Passing multiple options in a comma-separated string. Which is same as running opt -debug-pass=Arguments -debug-only=dce ...

(3)

ponyc --llvm-args=-debug-only=dce,-debug-only=licm ...

Note that some of the LLVM options, -debug-only for example, also accept a comma-separated string. That is, with opt , you can do like opt -debug-only=dce,licm . However, with this new --llvm-args option, you can only separate them into different -debug-only pairs as shown above.

Allow programmatic override of the default runtime options

Prior to this release, the only way to override the default pony

runtime options was via the command line.

This release allows for programmatic override of the default pony

runtime options via a specific bare function created on the Main

actor:

fun @runtime_override_defaults(rto: RuntimeOptions) => None

In order to override the values, a programmer would replace the

None with logic to directly set the various options on the rto

variable. This bare function is limited in what is allowed and

is only allowed to call functions on primitive s to ensure no

memory allocation occurs as it is called before the runtime is

fully initialized.

More information can be found in the documentation for the RuntimeOptions struct in the builtin package.

[0.33.0] - 2019-11-01

Fixed

Building ponyc with GCC 8+ (PR #3345)

Added

Allow programmatic override of the default runtime options (PR #3342)

Changed