Pony 0.11.0 released

 

This is a big one. We haven't had a release since the middle of December. Some highlights:

* The included HTTP server has been rewritten.
     The previous version was purely a proof of concept. The new one is a definite improvement.
* BSD and Linux TCP now use One Shot Epoll/Kqueue for better performance
* Several performance improvements
* Closures over free variables for object literals
* AST Annotations
* Syntax support for method chaining
* Standard library updates to no longer return `this` in favor of method chaining

CHANGELOG below:

## [0.11.0] - 2017-03-11

### Fixed

- Make HTTPSession type tag by default (PR #1650)
- Fix type parameters not being visible to a lambda type in a type alias (PR #1633)
- Remove the check for union types on match error (PR #1630)
- TCPListener: unsubscribe asio before socket close (PR #1626)
- Fix buffer overlow in case method docstring (PR #1615)
- Fix capability checking for gencap-constrained type parameters. (PR #1593)
- Fix error in ANTLR grammar regarding duplicate '-~'. (#1602) (PR #1604)
- Escape special characters in ANLTR strings. (#1600) (PR #1601)
- Use LLVM to detect CPU features by default if --features aren't specified. (PR #1580)
- Always call finalisers for embedded fields (PR #1586)
- Check for null terminator in String._append (PR #1582)
- Fix TCP Connection data receive race condition (PR #1578)
- Fix Linux epoll event resubscribe performance and race condition. (PR #1564)
- Correctly resubscribe TCPConnection to ASIO events after throttling (PR #1558)
- Performance fix in the runtime actor schedule (PR #1521)
- Disallow type parameter names shadowing other types. (PR #1526)
- Don't double resubscribe to asio events in TCPConnection (PR #1509)
- Improve Map.get_or_else performance (PR #1482)
- Back pressure notifications now given when encountered while sending data during `TCPConnection` pending writes
- Improve efficiency of muted TCPConnection on non Windows platforms (PR #1477)
- Compiler assertion failure during type checking
- Runtime memory allocator bug
- Compiler crash on tuple sending generation (issue #1546)
- Compiler crash due to incorrect subtype assignment (issue #1474)
- Incorrect code generation when sending certain types of messages (issue #1594)

### Added

- Close over free variables in lambdas and object literals (PR #1648)
- Add assert_no_error test condition to PonyTest (PR #1605)
- Expose `st_dev` and `st_ino` fields of stat structure (PR #1589)
- Packed structures (RFC 32) (PR #1536)
- Add `insert_if_absent` method to Map (PR #1519)
- Branch prediction annotations (RFC 30) (PR #1528)
- Readline interpret C-d on empty line as EOF (PR #1504)
- AST annotations (RFC 27) (PR #1485)
- Unsafe mathematic and logic operations. Can be faster but can have undefined results for some inputs (issue #993)
- Equality comparison for NetAddress (PR #1569)
- Host address comparison for NetAddress (PR #1569)

### Changed

- Rename IPAddress to NetAddress (PR #1559)
- Remove delegates (RFC 31) (PR #1534)
- Upgrade to LLVM 3.9.1 (PR #1498)
- Deprecate LLVM 3.6.2 support (PR #1511) (PR #1502) (PR ##1512)
- Ensure TCPConnection is established before writing data to it (issue #1310)
- Always allow writing to `_` (dontcare) (PR #1499)
- Methods returning their receiver to allow call chaining have been changed to return either None or some useful value. Generalised method chaining implemented in version 0.9.0 should be used as a replacement. The full list of updated methods follows. No details means that the method now returns None.
  - builtin.Seq
    - reserve
    - clear
    - push
    - unshift
    - append
    - concat
    - truncate
  - builtin.Array
    - reserve
    - compact
    - undefined
    - insert
    - truncate
    - trim_in_place
    - copy_to
    - remove
    - clear
    - push
    - unshift
    - append
    - concat
    - reverse_in_place
  - builtin.String
    - reserve
    - compact
    - recalc
    - truncate
    - trim_in_place
    - delete
    - lower_in_place
    - upper_in_place
    - reverse_in_place
    - push
    - unshift
    - append
    - concat
    - clear
    - insert_in_place
    - insert_byte
    - cut_in_place
    - replace (returns the number of occurrences replaced)
    - strip
    - lstrip
    - rstrip
  - buffered.Reader
    - clear
    - append
    - skip
  - buffered.Writer
    - reserve
    - reserve_chunks
    - number writing functions (e.g. u16_le)
    - write
    - writev
  - capsicum.CapRights0
    - set
    - unset
  - collections.Flag
    - all
    - clear
    - set
    - unset
    - flip
    - union
    - intersect
    - difference
    - remove
  - collections.ListNode
    - prepend (returns whether the node was removed from another List)
    - append (returns whether the node was removed from another List)
    - remove
  - collections.List
    - reserve
    - remove
    - clear
    - prepend_node
    - append_node
    - prepend_list
    - append_list
    - push
    - unshift
    - append
    - concat
    - truncate
  - collections.Map
    - concat
    - compact
    - clear
  - collections.RingBuffer
    - push (returns whether the collection was full)
    - clear
  - collections.Set
    - clear
    - set
    - unset
    - union
    - intersect
    - difference
    - remove
  - files.FileMode
    - exec
    - shared
    - group
    - private
  - files.File
    - seek_start
    - seek_end
    - seek
    - flush
    - sync
  - time.Date
    - normal
  - net.http.Payload
    - update (returns the old value)
  - net.ssl.SSLContext
    - set_cert
    - set_authority
    - set_ciphers
    - set_client_verify
    - set_server_verify
    - set_verify_depth
    - allow_tls_v1
    - allow_tls_v1_1
    - allow_tls_v1_2
- TCP sockets on Linux now use Epoll One Shot
- Non-sendable locals and parameters are now seen as `tag` inside of recover expressions instead of being inaccessible.
- TCP sockets on FreeBSD and MacOSX now use Kqueue one shot
- All arithmetic and logic operations are now fully defined for every input by default (issue #993)
- Removed compiler flag `--ieee-math`
- The `pony_start` runtime function now takes a `language_features` boolean parameter indicating whether the Pony-specific runtime features (e.g. network or serialisation) should be initialised

Join user@pony.groups.io to automatically receive all group messages.