0.33.0 Released

Friday, November 01, 2019 | Posted in Release

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

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

Fixed

Added

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

Changed

  • --ponythreads has been renamed to --ponymaxthreads (PR #3334)
  • All --pony* options that accept a value, will be checked for minimal values (PR #3303)
  • Default to statically linking LLVM into ponyc (PR #3355)

AUTHOR

Sean T. Allen

Sean is a member of the Pony core team. His turn-ons include programming languages, distributed computing, Hiwatt amplifiers, and Fender Telecasters. His turn-offs include mayonnaise, stirring yogurt, and sloppy code. He is one of the authors of Storm Applied, and VP of Engineering at Wallaroo Labs.