0.23.0 Released

Sunday, June 10, 2018 | Posted in Release

Pony 0.23.0 is primarily a bug fix release but does also include some additional changes. Upgrading is recommended. There is a single breaking change caused by the implementation of RFC 56.

RFC 56: Make buffered.reader.line return String iso^

buffered.Reader.line() has been changed to return a String iso^ instead of a String val. This is more powerful as it allows you to mutate the lines returned in place, which was impossible with String val. Nonetheless this is a breaking change. It will break code that relies on type inference, avoiding stating the type for the variable the line is assigned to:

let line = reader.line()?

These code bases need to adapt in one of two ways: * mark the line variable explicitly as String val:

   let line: String val = reader.line()?
  • consume the variable upon usage, as it is iso now:
   let line = reader.line()?
   process_line(consume line)


  • Fix File.writev and File.flush in cases where the IO vector exceeds IOV_MAX. (PR #2771)
  • Fix incorrect tuple handling (PR #2763)
  • Fix Promise bug where join() element’s reject doesn’t reject the entire join (PR #2770)


  • Add Integer.bit_reverse, exposing the llvm.bitreverse intrinsic. (PR #2710)


  • RFC 56: Make buffered.reader.line return String iso^ (PR #2756)


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.