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.

Hello!

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 README.md 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:

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

[0.26.0] - 2019-01-25

Fixed

Added

[RFC 60] Add binary heaps (PR #2950)

Make _SignedInteger and _UnsignedInteger public (PR #2939)

Changed