0.28.0 Released

Friday, March 22, 2019 | Posted in Release

Pony 0.28.0 is a high-priority release. We advise updating as soon as possible.

In addition to a high-priority bug fix, there are “breaking changes” if you build Pony from source. We’ve also dropped support for some Debian and Ubuntu versions. Read on for further details.

Ensure methods reached through a union are detected as reachable

Prior versions of Pony contained a bug in code reachability analysis that caused deterministic runtime crashes due to undetected reachability of a method call under certain specific conditions, including:

  • the method being called only through a trait within a union type
  • the order of compilation causing the concrete type to be seen as reachable after reaching the method call

The issue has been fixed in this release, and it’s recommended that all users update to prevent the possibility of such runtime crashes.

Stop trying to be clever when finding user’s LLVM installation


We used to try and guess the location of your LLVM installation. Going forward, we will use the first llvm-config found in your path to locate the LLVM installation. To override this behaviour, set the LLVM_CONFIG environment variable to your preferred LLVM installation.


Prior to this commit, we were trying to be clever by trying to find the user’s LLVM installation whereever their package manager of choice might put it. This was, in the end, a losing battle. We were constantly adding more and more variations.

To make it worse, we tried to have a hierarchy where we would look for LLVM 7 first then 6 etc. We did this by looking something like:

  • llvm-config-7
  • llvm-config-6

The problem with this approach was that some installations, wouldn’t use the -7 notation. For example, if you download a release directly from releases.llvm.org, then your llvm-config will simply be llvm-config.

We discovered this when, after a user installed LLVM 7 from releases.llvm.org, and the build process continued to have LLVM 6 used because the search looked something like:

  • llvm-config-7
  • llvm-config-6
  • … more stuff …
  • llvm-config

In the end, that’s all just too much clever.

With this change, we’ll use the first llvm-config we find in your path if you haven’t set the LLVM_CONFIG environment variable which should be considered the preferred way to select an LLVM when building ponyc.

Stop building packages for older Ubuntu and Debian’s

As of 0.28.0 we no longer build binary ponyc packages for Ubuntu Trusty (14.04 LTS), Ubuntu Artful (17.10), and Debian Jessie (8). We still build binary packages for Ubuntu Xenial and Bionic as well as Debian Stretch (9) and Debian Buster (10).


  • Ensure methods reached through a union are detected as reachable. (PR #3102)
  • Fixed issue with ponyc not being able to find Visual Studio Build Tools in non-standard locations. (PR #3086)
  • Update TCPConnection docs around local and remote addresses (PR #3050)


  • Stop Supporting Ubuntu Artful (PR #3100)
  • Upgrade Docker image to use LLVM 7.0.1 (PR #3079)
  • Stop trying to be clever when finding user’s LLVM installation (PR #3077)
  • Stop supporting Ubuntu Trusty (PR #3076)
  • Stop supporting Debian Jessie (PR #3078)


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.