Pony 0.25.0 includes high-priority bug fixes. Updating as soon as possible is recommended. The release also contains breaking changes, please refer to the release notes for more details.

Hello!

Welcome the release notes for Pony 0.25.0. A big thank you to all the volunteers who made this release possible. The big highlight of this release is the addition of "partial math" operators for Pony. Previously, all math operators were total. This means, that they would never error. Would always return a "valid" result. This was fairly non-controversial except for one case: divide by zero. O lordy, that generated lots of buzz and comments from the peanut gallery. Read on to learn more about everything that was implemented as part of the "partial arithmetic" RFC.

[RFC 58] Add partial arithmetic for integer types

With this RFC Pony finally adds the means to do partial arithmetic on integers. It introduces a new set of operators: +? , -? , *? , /? and %? that all raise an error when they detect overflow/underflow or division by zero. The non-partial versions all wrapped around on overflow/underflow or defined division by zero to be 0 , if this is not acceptable for you, you now can make use these operators. And if erroring is not your way, you can go with addc , subc , mulc , divc or remc which return the result together with a flag denoting overflow/underflow or division by zero. Check out the full story on the tutorial: https://tutorial.ponylang.io/expressions/arithmetic.html

For the curious, the full RFC is available for your reading pleasure.

OpenBSD support

Nice! I mean the title says it all right? Thanks to Brian Callahan for this.

There's packaging too, you should be able to pkg_add ponyc .

Rename mod and related operators to rem

This change renames the % operation from mod , standing for Modulo, to rem , standing for Remainder. The reason is that % in Pony was actually computing the remainder, not the modulo. The difference is obvious when handling signed integers:

The result of the Modulo operation always has the sign of the divisor, e.g.: -5 mod 2 = 1 .

The result of the Remainder operation always has the sign of the dividend, e.g.: -5 rem 2 = -1 .

Pony does the latter. We are working on adding a proper Modulo operator later on.

This is a breaking change, if you used one the mod function on Integers or implemented your own mod operator on your data types.

Improved CHAMP map

The persistent HashMap and HashSet have reduced memory consumption and improved iteration performance. This change also includes a bug fix related to searching for nonexistent entries and incorrect CHAMP compression.

buffered performance improvements and bug fix

Pony now has efficient reading and writing of numeric datatypes from Array[U8] s and the buffered Reader and Writer classes. Also included is a bug fix related to searching for bytes within a Reader where searches that would fail incorrectly will now succeed.

Fix hash collision handling in persistent map

The persistent HashMap and HashSet have reduced memory consumption and improved iteration performance. This change also includes a bug fix related to searching for nonexistent entries and incorrect CHAMP compression.

Add ability to get iso array from an iso string.

It is now possible to consume a string iso to get the underlying Array[U8] iso for when it is important to convert a string to an array but retain the ability to modify it afterwards.

Use RLIMIT_STACK's current limit for Pthreads stack size if it is sane

The Pony runtime on OS X/macOS now uses the POSIX standard's RLIMIT_STACK limit to set the Pthread stack size for the Pony runtime's scheduler threads.

[0.25.0] - 2018-10-13

Fixed

Added

Changed