0.19.1
Pony 0.19.1 has no breaking changes and fixes no high-priority bugs, so you can update at your leisure.
Lambda and Array Inference
This release includes significant improvements to type inference for array literals and lambda expressions when the type of the expression has an unambiguous antecedent (such as the "left side" of an assignment, the parameter signature of a method call, or the return type of a method body), including the following improvements:
- Empty array literals are now valid syntax:
let a: Array[U8] = []
- Non-homogenous concrete elements in an array literal can be treated as a trait or interface instead of as a union:
let a: Array[Stringable] = [true; None; "string"]
- Array literals can have an implied capability recovery to
iso
orval
:let a: Array[String] val = ["foo"; "bar"; "baz"]
- Lambda expressions can have implied parameter and return types:
let fn: {(U64, U64): U64} = {(x, y) => x + y }
- Unused lambda parameters can use the "don't care" symbol (
_
) instead of a parameter name and type:let fn: {(U64, U64): U64} = {(_, y) => y * 2 }
- The receiver and object capability of lambda expressions can be inferred from context, instead of being inferred from the statefulness of the lambda.
For more information, see RFC #45.
[0.19.1] - 2017-09-14
Fixed
- Fix broken "make" command (PR #2220)
- Fix inconsistencies in multi-line triple-quoted strings (PR #2221)
- Fix undersized string buffer for library link command in Windows. (PR #2223)
- Fix Iter.take to handle infinite iterator (PR #2212)
- Fix handling of empty and multi-byte character literals (PR #2214)
Added
- Inference of lambda type and array element type from an antecedent (RFC 45). (PR #2168)