Skip to content


Choose a tag to compare
@SeanTAllen SeanTAllen released this 25 Jan 19:10

Pony 0.26.0 is a breaking release. It is however a pretty small breaking change. Most of the release is a series of bug fixes. As such, upgrading as soon as possible is recommended.


This is going to be a short bit of release notes because things are kind of hectic in my next of the woods. Pony 0.26.0, what can I say about you?

Well, the biggest change is one you won't see in the CHANGELOG. Wink Saville put in a ton of time getting it so that we could use non system versions of LLVM to build Pony. Why would we want to do that? We've encountered problems with LLVM from time to time and we want to be ready to be able to ship our own patched version (similar to what Rust does). Wink put in a lot of time, so everyone, please send him your thanks.

Add Vendored LLVM

This change supports both system installed LLVM binaries and vendored LLVM sources. The default is the system installed LLVM binaries with the vendored LLVM sources supported if make -f Makefile-lib-llvm is used.

When using Makefile-lib-llvm both LLVM 3.9.1 and 6.0.0 are supported. If no make target is specified, make -f Makefile-lib-llvm, the default is whatever the lib/llvm/src submodule is pointing to, currently that is LLVM 3.9.1. If you desire to test with the LLVM 6.0.0 pass llvm_proj=llvm_6.0.0 to make, make -f Makefile-lib-llvm llvm_proj=llvm_6.0.0.

For details see "Building ponyc using LLVM sources" in the main and lib/llvm.

[RFC 60] Binary Heaps

RFC 60 adds binary heaps to the Pony standard library. Binary heaps are a useful data structure for processing items based on priority, as in priority queues. A min or max heap may be created through the MinHeap or MaxHeap classes, respectively.

Here is an example of a min-heap containing integers:

use "collections"
use "itertools"

actor Main
  new create(env: Env) =>
    let q = MaxHeap[I64](5) .> append([1; 5; 8; 3; 4])

    // prints `8 5 4 3 1`
    env.out.print(" ".join(
      Iter[USize](Range(0, q.size()))
        .map_stateful[I64]({ref(n)? => q.pop()? })))

Fix silent crash with incorrect time formats in Windows

Prior to Pony 0.26.0, PosixDate.format() was a total method. That is, it wouldn't error out. However, on Windows, when supplied an incorrect time format, it would error out, just silently. Not exactly a good situation.

PosixDate.format() is now a partial method that can result in an error.

Where previously you had code such as:

let date = PosixDate(Time.seconds()).format("%Y-%m-%d")

You now need to do:

  let date = PosixDate(Time.seconds()).format("%Y-%m-%d")?
  // handle bad format error here, if you care

[0.26.0] - 2019-01-25


  • Fix signed/unsigned conversion bug in siphash24 implementation (PR #2979)
  • Fixes for telemetry.stp script (PR #2983)
  • libponyc: resolve relative paths in use "path:..." statements (PR #2964)
  • Fix silent crash with incorrect time formats in Windows (PR #2971)
  • Add whitespace between multiple args on cli help output (PR #2942)
  • Fix unsafe cases in capability subtyping implementation (PR #2660)
  • Fix race condition with socket close event from peer (PR #2923)
  • Link to libexecinfo on BSD always, not just in a debug compiler (PR #2916)
  • Install libdtrace_probes.a into the right directory on FreeBSD (PR #2919)
  • Fix scheduler thread wakeup bug (PR #2926)
  • Correct link to AppImage packaging location (PR #2927)
  • Fix unsoundness when replacing this viewpoint in method calls. (PR #2503)


  • [RFC 60] Add binary heaps (PR #2950)
  • Make _SignedInteger and _UnsignedInteger public (PR #2939)


  • Fix silent crash with incorrect time formats in Windows (PR #2971)
  • Add before/after iteration hooks to ponybench (PR #2898)