All notable changes to the Pony compiler and standard library will be documented in this file. This project adheres to Semantic Versioning and Keep a CHANGELOG.
- Fix validation of provides lists of object literals. (PR #2860)
- Fix
files/Path.clean()
not correctly handling multiple..
(PR #2862) - Fix skipped try-then clauses on return, break and continue statements (PR #2853)
- Added OpenBSD support. (PR #2823)
- Use RLIMIT_STACK's current limit for Pthreads stack size if it is sane (PR #2852)
- Fix array and string trim_in_place allocation bounds check (PR #2840)
- Nothing - this was purely to fix a problem in the previously release
- Fix
make arch=XXXXX
command to be able to correctly find libponyrt.
- Add libexecinfo to debug builds for BSD (PR #2826)
- Add SSL APLN support (PR #2816)
- Make dynamic scheduler scaling more robust and configurable (PR #2801)
- Always use "binary" mode when opening files on Windows. (PR #2811)
- Do not set File._errno when reading less than requested bytes. (PR #2785)
- Correctly allocate memory for linker arguments (PR #2797)
- Fix build on DragonFly BSD (PR #2794)
- Fix some edge cases in code generation for loops that jump away. (PR #2791)
- Fix repeat loop symbol tracking to allow more valid cases. (PR #2786)
- Fix incorrect disposable/destroyed epoll resubscribe handling (PR #2781)
- Fix GC-safety issue with writev pointers in File. (PR #2775)
- Disable neon for armhf if not supported by C/C++ compiler (PR #2672)
- Run cycle detector every N ms based on timer (PR #2709)
- [RFC 55] Remove package net/http from stdlib (PR #2795)
- Change refcap of JsonDoc to ref for better usability (PR #2747)
- Change NetAddress class to hide its fields behind functions, fixing cross-platform compatibility. (PR #2734)
- 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)
- Fix compiler segfault caused by dead code removal of tupled variables (PR #2757)
- Fix
collections/persistent/Lists.from()
to return elements in the correct order (PR #2754) - Fix performance related to dynamic scheduler scaling (PR #2751)
- Fix incorrect disposable/destroyed epoll resubscribe handling (PR #2744)
- Fix performance regression in serialization performance (PR #2752)
- Fix memory overflow when allocating CPUs when numa is enabled (PR #2745)
- Fix compiler crash related to union types with duplicate members. (PR #2738)
- Fix CommandSpec without args and help (PR #2721)
- Only enable mcx16 for gcc for x86_64 targets (PR #2725)
- Fix String.concat ignoring the len parameter (PR #2723)
- Relax ProcessMonitor checks for execute bits (PR #2717)
- Broken docker image creation
- Incorrect rstrip handling of multibyte characters (PR #2706)
- Fix File.flush return value for case of zero bytes to flush. (PR #2704)
- Enable virtual terminal color output on Windows. (PR #2702)
- Compute File.writeable based on FileWrite instead of FileRead. (PR #2698)
- Do not use llvm.smul.with.overflow.i64 anymore (PR #2693)
- Change directory.open_file() to use readonly open (PR #2697)
- Avoid flattening arrow to type param, fixing typechecking when reified with another type param. (PR #2692)
- Fix File.valid() and clarify File behavior in error cases (PR #2656)
- Fix tuple pattern matching issue where only some elements would violate caps. (PR #2658)
- Fix scheduler suspend edge case assertion (PR #2641)
- Fix code generation failure with tuples in recover blocks (PR #2642)
- Do not mute sender if sender is under pressure (PR #2644)
- Fix FilePath.walk performance issues (issue #2158). (PR #2634)
- Fix backpressure-related TCPConnection busy-loop bug (issue #2620). (PR #2627)
- Fix off-by-one error in String.cstring (PR #2616)
- Fix compiler crash related to array inference. (PR #2603)
- Ensure ASIO thread cannot be stopped prematurely (PR #2612)
- Handle EAGAIN errors on socket operations (PR #2611)
- Properly report type parameter capability errors (PR #2598)
- Update the Windows build to support the latest Visual C++ Build Tools (PR #2594)
- Fix tracing of boxed tuples through interfaces (PR #2593)
- Partially mitigate LLVM's infinite loops bug (PR #2592)
- Fix extracting docstring from constructors (PR #2586)
- Always unsubscribe process_monitor fds before closing them (#2529) (PR #2574)
- Fix two race conditions where an ASIO wakeup notifications can be lost (PR #2561)
- Fix compiler crash in alternate name suggestion logic (issue #2508). (PR #2552)
- Make the File.open constructor use read-only mode (Issue #2567) (PR #2568)
- Correctly typecheck FFI arguments with regard to aliasing (PR #2550)
- Allow tuples to match empty interfaces (PR #2532)
- Properly report default argument inference errors (PR #2504)
- Do not catch foreign exceptions in Pony try blocks. This still doesn't work on Windows, foreign code doesn't catch foreign exceptions if they've traversed a Pony frame. (PR #2466)
- Fix LLVM IR verification with DoNotOptimise (PR #2506)
- Add addc, subc and mulc functions to I128 and U128 (PR #2645)
- Add mechanism to register (noisy) signal handler (PR #2631)
- Added
nosupertype
annotation for subtyping exclusion (RFC 54). (PR #2678) SourceLoc.type_name
method (PR #2643)- Update with experimental support for LLVM 6.0.0 (PR #2595)
- Improve pattern matching error reporting (PR #2628)
- Allow recovering at most one element of a tuple to mutable capability. (PR #2585)
- Add full'ish support for network socket get & set options (PR #2513)
- Add basic compiler plugins (PR #2566)
- [RFC 50] add member docstrings (PR #2543)
- Allow user defined help string at CommandSpec.add_help() (PR #2535)
- Embed source code into generated documentation. (PR #2439)
- Compile error when comparing sugared constructors with 'is' or 'isnt' (#2024) (PR #2494)
- Support OpenSSL 1.1.0 (PR #2415)
- Add U64 type to
cli
package. (PR #2488) - Allow customisation of
Env.input
andEnv.exitcode
in artificial environments hash64()
function and related helper types incollections
for 64-bit hashes (PR #2615)
SourceLoc.method
renamed asSourceLoc.method_name
method (PR #2643)- New Ponybench API (RFC 52) (PR #2578)
- Forbid impossible pattern matching on generic capabilities (PR #2499)
- Remove case functions (PR #2542)
- Rename Date to PosixDate (PR #2436)
- Fix and re-enable dynamic scheduler scaling (PR #2483)
- Expose OutStream rather than StdStream in Env (PR #2463)
- Rename StdinNotify to InputNotify
digestof
andhash()
now return USize instead of U64 (PR #2615)
- Fix pthread condition variable usage for dynamic scheduler scaling (PR #2472)
- Fix various memory leaks (PR #2479)
- Fix double free in expr_typeref (PR #2467)
- Fix some spurious process manager test failures (PR #2452)
- Fix ANTLR definition for char escape sequences (PR #2440)
- Add the pony_try function to receive Pony errors in C code (PR #2457)
- Disable -avx512f on LLVM < 5.0.0 to avoid LLVM bug 30542 (PR #2475)
- Deprecate LLVM 3.7.1 and 3.8.1 support (PR #2461)
- Don't suspend schedulers if terminating and reset steal_attempts on wake (PR #2447)
- Dynamic scheduler thread scaling based on workload (PR #2386)
- Support setting the binary executable name with
--bin-name
. (PR #2430)
- Forbid structs with embed fields with finalisers (PR #2420)
- Fix codegen ordering of implicit finalisers (PR #2419)
- Fix GC tracing of struct fields (PR #2418)
- Remove redundant error message for unhandled partial calls that are actually in a try block. (PR #2411)
- Fix allocation sizes in runtime benchmarks (PR #2383)
- Fail pony_start if ASIO backend wasn't successfully initialized (PR #2381)
- Make windows sleep consistent with non-windows sleep (PR #2382)
- Fix Iter.{skip,take,nth} to check '.has_next()' of their inner iterator (PR #2377)
- Restart ASIO if needed while runtime is attempting to terminate. (PR #2373)
- fix Range with negative or 0 step and allow backward Ranges (having
min > max
) (PR #2350) - Improve work-stealing "scheduler is blocked" logic (PR #2355)
- Make take_while short-circuit (PR #2358)
- Fix compilation error with 'use=dtrace' for FreeBSD 11 (PR #2343)
- Fix Set.intersect (PR #2361)
- Fixed state handling of HTTP client connections (PR #2273)
- Fix incorrect detection of exhaustive matches for structural equality comparisons on some primitives. (PR #2342)
- Fix poor randomness properties of first call to
Rand.next()
. (PR #2321) - Fully close unspecified family TCP connections on Windows. (PR #2325)
- Make ContentsLogger implement the Logger interface (PR #2330)
- Fix alloc bug in String/Array trimming functions (PR #2336)
- Fix small chunk finaliser premature re-use bug (PR #2335)
- Make Payload.respond() send given parameter, not
this
. (PR #2324) - Garbage collect actors when --ponynoblock is in use (PR #2307)
- Fix incorrect kevent structure size (PR #2312)
- Fix possible repetition in Iter.flat_map (PR #2304)
- Add DTrace probes for all message push and pop operations (PR #2295)
- Experimental support for LLVM 4.0.1 (#1592) and 5.0.0. (PR #2303)
- Add pony stable to docker image (PR #2364)
- Enable CodeView debug information with MSVC on Windows (PR #2334)
- Generalized runtime backpressure. (PR #2264)
- A microbenchmark for measuring message passing rates in the Pony runtime. (PR #2347)
- Add
chop
function for choppingiso
Strings and Arrays (PR #2337) - Add --ponyversion option to compiled binary (PR #2318)
- Implement RFC 47 (Serialise signature) (PR #2272)
- Remove unused FormatSettings interface and related types. (PR #2397)
- Error on unreachable cases in match expressions and illegal as expressions. (PR #2289)
- Forbid single '_' in case expr and case methods (PR #2269)
- Turn off LTO by default on OSX (PR #2284)
- Replace memory-leak-inciting
Writer.reserve
with more intuitiveWriter.reserve_current
method. (PR #2260)
- Don't verify partial calls for method bodies inherited from a trait. (PR #2261)
- Fix broken method and type headings in generated documentation (PR #2262)
- Fix array inference from ReadSeq interface with tuple element type. (PR #2259)
- Fix compiler crash related to inferred lambda argument in apply sugar. (PR #2258)
- Fix excess work stealing under low loads (PR #2254)
- Fix compiler crash on case methods with
_
as a method parameter. (PR #2252) - Fix implicit fallthrough in array inference. (PR #2251)
- Fix small chunk finaliser bug. (PR #2257)
- Fix codegen failure on field access (PR #2244)
- Make Windows link step use the command-line
--linker
value if present. (PR #2231) - Fix empty string serialisation (PR #2247)
- Added Array.swap_elements, Random.shuffle and extends Random with methods for generating all Integer types (RFC 46). (PR #2128)
- 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)
- Inference of lambda type and array element type from an antecedent (RFC 45). (PR #2168)
- Fix codegen failures on incompatible FFI declarations (PR #2205)
- Disallow named arguments for methods of a type union where parameter names differ (PR #2194)
- Fix compiler crash on illegal read from '_' (PR #2201)
- Fix signals on Sierra (PR #2195)
- Fix race condition in kqueue event system implementation (PR #2193)
pony_chain
runtime function
- The
pony_sendv
andpony_sendv_single
runtime functions now take a message chain instead of a single message - Improve the itertools API (RFC 49) (PR #2190)
- Forbid struct finalisers (PR #2202)
- Don't print capabilities for type params when generating docs (PR #2184)
- Fix compiler crash on union-of-tuples to tuple conversions (PR #2176)
- Fix compiler error on lambda capture of '_' (PR #2171)
- Fix read past the end of a buffer in
pool.c
. (PR #2139)
- Make actor continuations a build time option (PR #2179)
- RFC #48 Change String.join to take Iterable (PR #2159)
- Change fallback linker to "gcc" from "gcc-6" on Linux. (PR #2166)
- Change the signature of
pony_continuation
andpony_triggergc
to take apony_ctx_t*
instead of apony_actor_t*
.
- Fix cursor location for displaying compiler errors and info. (PR #2136)
- Fix indent detection when lexing docstrings that contain whitespace-only lines. (PR #2131)
- Fix compiler crash on typecheck error in FFI call. (PR #2124)
- Fix compiler assert on match including structural equality on union type. (PR #2117)
- Support GCC7 on Linux (PR #2134)
- Add regex match iterator (PR #2109)
- Add more promise methods (RFC 35) (PR #2084)
- Add ability to default enable PIC when compiling ponyc (PR #2113)
- Treat
as
type of array literals as the alias of the element type. (PR #2126) - docgen: ignore test types and add cli flag to only document public types (PR #2112)
- Fix reachability analysis for intersection types (PR #2106)
- Fix compiler assertion failure at code generation (PR #2099)
- FreeBSD builds(PR #2107)
- Fix compiler assertion failure on unused reference to
_
(PR #2091) - Destroy all actors on runtime termination (PR #2058)
- Fixed compiler segfault on empty triple quote comment. (PR #2053)
- Fix compiler crash on exhaustive match where last case is a union subset (PR #2049)
- Make pony_os_std_print() write a newline when given empty input. (PR #2050)
- Fix boxed tuple identity when type identifiers differ (PR #2009)
- Fix crash on interface function pointer generation (PR #2025)
- Alpine Linux compatibility for pony (PR #1844)
- Add cli package implementing the CLI syntax (RFC #38)
- Initial (PR #1897) implemented the full RFC and contained:
- Enhanced Posix / GNU program argument syntax.
- Commands and sub-commands.
- Bool, String, I64 and F64 option / arg types.
- Help command and syntax errors with formatted output.
- Update (PR #2019) added:
- String-seq (ReadSeq[String]) types for repeated string options / args.
- Command fullname() to make it easier to match on unique command names.
- Checking that commands are leaves so that partial commands return syntax errors.
- Initial (PR #1897) implemented the full RFC and contained:
- Forbid returning and passing tuples to FFI functions (PR #2012)
- Deprecate support of Clang 3.3
- Explicit partial calls - a question mark is now required to be at the call site for every call to a partial function.
- Fix bug in
as
capture (PR #1981) - Fix assert failure on lambda parameter missing type. (PR #2011)
- Fix iftype where the type variable appears as a type parameter. (PR #2007)
- Fix support for recursive constraints in iftype conditions. (PR #1961)
- Fix segfault in Array.trim_in_place (PR #1999)
- Fix segfault in String.trim_in_place (PR #1997)
- Assertion failure with directly recursive trait (PR #1989)
- Add compile error for generic Main (PR #1970)
- Prevent duplicate long_tests from being registered (PR #1962)
- Assertion failure on identity comparison of tuples with different cardinalities (PR #1946)
- Stop default arguments from using the function scope (PR #1948)
- Fix compiler crash when a field is used in a default argument. (PR #1940)
- Fix compiler crash on non-existent field reference in constructor. (PR #1941)
- Fix compiler crash on "_" as argument in a case expression. (PR #1924)
- Fix compiler crash on type argument error inside an early return. (PR #1923)
- Correctly generate debug information in forwarding methods (PR #1914)
- Resolved compiler segfault on optimization pass (issue #1225) (PR #1910)
- Fix a bug in finaliser handling (PR #1908)
- Fix compiler crash for type errors in call arguments inside a tuple. (PR #1906)
- Fix compiler crash involving "dont care" symbol in an if or try block. (PR #1907)
- Don't call TCPConnection backpressure notifies incorrectly (PR #1904)
- Fix outdated methods in persistent.Map docstring. (PR #1901)
- Fix format for number types (issue #1920) (PR #1927)
- Make tuples be subtypes of empty interfaces (like Any). (PR #1937)
- Add Persistent Vec (RFC 42) (PR #1949)
- Add support for custom serialisation (RFC 21) (PR #1839)
- Add persistent set (RFC 42) (PR #1925)
- Bare methods and bare lambdas (RFC 34) (PR #1858)
- xoroshiro128+ implementation (PR #1909)
- Exhaustive match (RFC #40) (PR #1891)
- Command line options for printing help (PR #1899)
Nanos.from_wall_clock
function to convert from a wall clock as obtained fromTime.now()
into number of nanoseconds since "the beginning of time". (PR #1967)
- Change machine word constructors to have no default argument. (PR #1938)
- Change iftype to use elseif instead of elseiftype as next keyword. (PR #1905)
- Removed misleading
Time.wall_to_nanos
. (PR #1967)
- Compiler error instead of crash for invalid this-dot reference in a trait. (PR #1879)
- Compiler error instead of crash for too few args to constructor in case pattern. (PR #1880)
- Pony runtime hashmap bug that resulted in issues #1483, #1781, and #1872. (PR #1886)
- Compiler crash when compiling to a library (Issue #1881)(PR #1890)
- TCPConnection.connect_failed, UDPNotify.not_listening, TCPListenNotify.not_listening no longer have default implementation. The programmer is now required to implement error handling or consciously choose to ignore. (PR #1853
- Don’t consider type arguments inside a constraint as constraints. (PR #1870)
- Disable mcx16 on aarch64 (PR #1856)
- Fix assert failure on explicit reference to
this
in constructor. (issue #1865) (PR #1867) - Compiler crash when using unconstrained type parameters in an
iftype
condition (issue #1689)
- Reify function references used as addressof operands correctly (PR #1857)
- Properly account for foreign objects in GC (PR #1842)
- Compiler crash when using the
addressof
operator on a function with an incorrect number of type arguments
- Iftype conditions (RFC 26) (PR #1855)
- Do not allow capability subtyping when checking constraint subtyping. (PR #1816)
- Allow persistent map to use any hash function (PR #1799)
- Pass # of times called to TCPConnectionNotify.received (PR #1777)
- Improve Visual Studio and Microsoft C++ Build Tools detection. (PR #1794)
- Bug in ponytest resulted in all tests being skipped (PR #1778)
- Don't ignore buffer length when printing (PR #1768)
- Ifdef out ANSITerm signal handler for SIGWINCH (PR #1763)
- Fix build error on 32 bits systems (PR #1762)
- Fix annotation-related compiler assertion failure (issue #1751) (PR #1757)
- Improve packaged Linux binary performance (PR #1755)
- Fix false positive test failure on 32 bits (PR #1749)
- Support XCode 8.3 and LLVM 3.9 (PR #1765)
- Arrays as sequences (PR #1741)
- Add ability for ponytest to exclude tests based on name (PR #1717)
- Renamed ponytest "filter" flag to "only" (PR #1717)
- Identity comparison of boxed values (PR #1726)
- Reify type refs in inherited method bodies (PR #1722)
- Fix compilation error on non-x86 systems (PR #1718)
- Call finalisers for embedded fields when parent type has no finalizer. (PR #1629)
- Fix compiling errors for 32-bit (PR #1709)
- Improved persistent map api (RFC 36) (PR #1705)
- Fix compiler assert on arrow to typeparam in constraint. (PR #1701)
- Segmentation fault on runtime termination.
- Build Linux release binaries correctly (PR #1699)
- Fix illegal instruction errors on older cpus when using packaged Pony (PR #1686)
- Correctly pass
arch=
when building docker image (PR #1681)
- Make buffered.Reader.append accept any ByteSeq. (PR #1644)
- Fix AVX/AVX2 issues with prebuilt ponyc (PR #1663)
- Fix linking with '--as-needed' (sensitive to linking order) (PR #1654)
- Fix FreeBSD 11 compilation
- 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 overflow 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)
- Close over free variables in lambdas and object literals (PR #1648)
- Add assert_no_error test condition to PonyTest (PR #1605)
- Expose
st_dev
andst_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)
- 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
- builtin.Seq
- 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 alanguage_features
boolean parameter indicating whether the Pony-specific runtime features (e.g. network or serialisation) should be initialised
- Don't violate reference capabilities when assigning via a field (PR #1471)
- Check errors correctly for method chaining (PR #1463)
- Fix compiler handling of type params in stacks (issue #918) (PR #1452)
- Fix String.recalc method for cases where no null terminator is found (issue #1446) (PR #1450)
- Make space() check if string is null terminated (issue #1426) (PR #1430)
- Fix is_null_terminated reading arbitrary memory (issue #1425) (PR #1429)
- Set null terminator in String.from_iso_array (issue #1435) (PR #1436)
- Added String.split_by, which uses a string delimiter (issue #1399) (PR #1434)
- Extra DTrace/SystemTap probes concerning scheduling.
- Behaviour calls return None instead of their receiver (RFC 28) (PR #1460)
- Update from_array to prevent a copy (issue #1097) (PR #1423)
- Stop leaking memory during serialization (issue #1413) (PR #1414)
- Fixed compiler segmentation fault when given an invalid target triple. (PR #1406)
- Fixed error message when no type arguments are given (issue #1396) (PR #1397)
- Fixed compiler assert failure when constructor is called on type intersection (issue #1398) (PR #1401)
- Fix compiler assert fail on circular type inference error (issue #1334) (PR #1339)
- Performance problem in the scheduler queue when running with many threads (issue #1404)
- Invalid name mangling in generated C headers (issue #1377)
- Method chaining (RFC #25) (PR #1411)
- Iter class methods
all
,any
,collect
,count
,find
,last
,nth
,run
,skip
,skip_while
,take
,take_while
(issue #1370) - Output of
ponyc --version
shows C compiler used to build pony (issue #1245) - Makefile detects
llvmconfig39
in addition tollvm-config-3.9
(#1379) - LLVM 3.9 support
- Changed lambda literal syntax to be more concise (issue #1391) (PR #1400)
- Link the correct version of
libponyrt
when compiling with--pic
on Linux (issue #1359)
- Runtime function
pony_send_next
. This function can help optimise some message sending scenarios. - Floating point
min_normalised
. The function returns the smallest normalised positive number, asmin_value
used to do (issue #1351)
- Floating point
min_value
now returns the smallest negative number instead of the smallest normalised positive number (issue #1351)
- Concatenate docstrings from case methods (issue #575).
- TCP read and write backpressure hooks in
TCPConnection
(issue #1311) - Allow TCP notifiers to cause connections to yield while receiving (issue #1343)
break
without a value now generates its value from theelse
branch of a loop instead of being an implicitbreak None
.- The
for
loop will now break out of the loop instead of continuing with the following iterations ifIterator.next
errors.
- Compiling ponyrt with Clang versions >= 3.3, < 3.6.
- Restrict mutable tuple recovery to maintain reference capability security (issue #1123)
- Crash in the runtime scheduler queues
- DTrace and SystemTap support -
use=dtrace
- Replaces
use=telemetry
by DTrace/SystemTap scripts String.cstring()
now always returns a null-terminated string (which may result in a copy) whilecpointer()
(also available onArray
objects) returns a pointer to the underlying array as-is (issue #1309).
SSLConnection
ignoring thesent
notifier method (issue #1268)- Runtime crash in the runtime scheduler queues (issue #1319)
- Memory copy bounds for
String.clone
(issue #1289). - Security issues in
ProcessMonitor
(issue #1180) SSLConnection
bugs due to missingsentv
notify method (issue #1282)
Iter
class (issue #1267)- read_until method on buffered.Reader (RFC 0013)
format
package (issue #1285)
Stringable
interface no longer involves formatting (issue #1285)- Remove unused error types from ProcessError (issue #1293)
- HTML documentation for expanded union types now adds line breaks to improve readability (issue #1263)
- Unexpected message ordering in
ProcessManager
(issue #1265)
- TCP writev performance improvement by avoiding throwing errors
- Incorrect build number generated on Windows when building from non-git directory.
- Stop generating
llvm.invariant.load
for fields ofval
references. - Embedded fields construction through tuples.
- Improved error handling for
files
package. - ProcessMonitor.expect
- ProcessNotify.created
- ProcessNotify.expect
- On Linux and FreeBSD, ponyc now uses $CC as the linker if the environment variable is defined.
- The
ponyc
version is now consistently set from the VERSION file. - Stop generating
llvm.invariant.load
intrinsic for "let" references, as these don't necessarily match the semantics of that intrinsic.
- The
setversion
andrelease
commands have been removed fromMakefile
. - LTO is again enabled by default on OSX
- make now builds a
release
rather thandebug
build by default
- Make sure all scheduler threads are pinned to CPU cores; on Linux/FreeBSD this wasn't the case for the main thread.
- Account for both hyperthreading and NUMA locality when assigning scheduler threads to cores on Linux.
- Stop generating
llvm.invariant.start
intrinsic. It was causing various problems in code generation. - Buffer overflow triggerable by very long
ponyc
filename (issue #1177). - Assertion failure in optimisation passes.
- Race condition in scheduler queues on weakly-ordered architectures.
- Issue #1212 by reverting commit e56075d46d7d9e1d8c5e8be7ed0506ad2de98734
--ponypinasio
runtime option for pinning asio thread to a cpu core.--ponynopin
runtime option for not pinning any threads at all.
- Path.base now provides option to omit the file extension from the result.
- Map.upsert returns value for upserted key rather than
this
. ponyc --version
now includes llvm version in its output.- LTO is now disabled by default on OSX.
- Check for Main.create before reachability analysis.
- Interface subtyping need not be invariant on type args.
- @fowles: handle regex empty match.
- @praetonus: readline history handling.
- Put unbox constructors on machine words into the vtable.
- @jonas-l: parse URL with omitted password.
- Adjust for ephemerality in cap_single().
- Finalisation always occurs.
- Type checking platform dependent FFI declarations on all platforms.
- Interface subtyping takes receiver capabilities into account.
- Pony-as-library support, particularly pony_register_thread().
- Bug in
HashMap._search
. - Crashing gc bug caused by "force freeing" objects with finalizers.
- Bug in
String.compare
andString.compare_sub
. - Crashing gc bug from using
get
instead ofgetorput
ingc_markactor
. - Add -rpath to the link command for library paths
- Simplify contains() method on HashMap.
- Lambda captures use the alias of the expression type.
- Trace boxed primitives in union types.
- Use -isystem for LLVM include directory only if it is not in search path.
- Union tuples as return type with machine words (issue #849)
- Incorrect " handling in character literals
- Incorrect ' handling in string literals
- Compiler crash on type alias of a lambda type.
- Late detection of errors silently emitted in lexer/parser.
- Compiler crash when handling invalid lambda return types
- Memory leak fixed when something sent as iso is then sent as val.
- Compiler crash when handling object literal with uninitialized fields.
- Associate a nice name with function types based on the type of the function.
- Use the nice name for types when generating documentation.
- Compiler crash when generating C library for the exported actors containing functions with variadic return type contatining None
- AST Printing of string literals with quote characters.
- HTTP/1.1 connections are now persistent by default.
- Runtime crash when Main.create is a function instead of a constructor.
- Compiler bug where
as
operator with a lambda literal caused seg fault. - String.read_int failure on lowest number in the range of signed integers.
- Regex incorrect of len variable when PCRE2_ERROR_NOMEMORY is encountered.
- No longer silently ignores lib paths containing parens on Windows.
- Make linking more dynamic and allow for overriding linker and linker arch.
- Fix issue with creating hex and octal strings if precision was specified.
- Correctly parses Windows 10 SDK versions, and includes new UCRT library when linking with Windows 10 SDK.
- Performance of Array.append and Array.concat (no unnecessary calls to push).
- Performance of Map.upsert and Map.update (don't replace existing keys)
- Segmentation fault from allocating zero-sized struct.
- Segmentation fault from serialising zero-sized array.
- Assertion failure from type-checking in invalid programs.
- Make the offset parameter of String.rfind inclusive of the given index.
- 32-bit ARM port.
- 32-bit X86 port.
- Embedded fields.
- C-style structs.
- Maybe[A] to encode C-style structs that aren't present.
- OpenFile and CreateFile primitives to return well-typed errors.
- @fowles: String.join
- Array slice, permute, reverse.
- Pooltrack and telemetry runtime builds.
- ifdef expressions for platform dependent code.
- User specified build flags.
- Pure Pony implementation of 128 bit integer maths for 32-bit platforms.
- UDP broadcast for both IPv4 and IPv6.
- Message batching.
- Case functions.
- Timeouts for PonyTest long tests.
- contains() method on HashMap
- contains() method on HashSet
- Support for empty sections in ini parsing.
- --verbose,-V option for compiler informational messages.
- Logger package
ArrayValues.rewind()
method.- Nanos primitive in time package.
- Persistent package, with List and Map
- Custom chunk size for Stdin.
- Itertools package
- TCPConnection.expect
- TCPConnectionNotify.sentv
- HashMap.get_or_else
- ponytest TestHelper.expect_action, complete_action, and fail_action
- ponytest TestHelper.dispose_when_done
- copysign and infinite for floating point numbers
- contains() method on Array
- GC tracing with acquire/release semantics.
- pony_alloc_msg_size runtime function
net/WriteBuffer
serialise
package.- optional parameter in json objects, arrays, and doc to turn on pretty printing
DoNotOptimise
primitivecompact
method forArray
andString
String.push_utf32()
method.- Allow the use of a LLVM bitcode file for the runtime instead of a static library.
- add iterators to persistent/Map (
keys()
,values()
, andpairs()
) - add notification of terminal resize
trim
andtrim_in_place
methods forArray
andString
.is_null_terminated
andnull_terminated
methods forString
.from_iso_array
constructor onString
.Sort
primitive- PonyBench package
- Interfaces are invariant if they are structurally equivalent.
- Improved type checking with configuration management.
- Improved realloc behaviour after heap_alloc_large.
- Set-based upper bounds for generic constraints.
- Moved the position of a default capability in a type specification.
- Replaced '&' with 'addressof' for taking address in FFI calls.
- @jemc: use half-open ranges for String operations.
- Improved TCPConnection with a dynamically size of buffers
- Drop dynamic LTO detection in the build system.
- Parameterized Array.find and Array.rfind with a comparator.
this->
adapted types check match on the upper bounds.- Renamed
identityof
todigestof
. - Moved and renamed
net/Buffer
tobuffered/Reader
andbuffered/Writer
. - Print compiler error and info messages to stderr instead of stdout.
Hashmap.concat
now returnsthis
rather thanNone
- Only allow single, internal underscores in numeric literals.
ponyc --version
now includes the build type (debug/release) in its output.- Strings now grow and shrink geometrically.
- Embedded fields can now be constructed from complex expressions containing constructors
- Sendable members of non-sendable objects can be used in recover expressions in certain cases.
- ProcessNotify functions are passed a reference to ProcessMonitor.
- The constructor of
Options
doesn't require anEnv
anymore but just a simpleString
array.
- Check shallow marking in heap_ismarked.
- Handle internal pointers and recursion.
- Allow recursing through non-pony alloc'd memory in GC.
- Set an LLVM triple with no version stamp to prevent XCode 7 link warnings.
- use "path:" adds link paths only for the current build.
- Handle null characters in Strings and string literals.
- Platform indicators for LP64, LLP64, ILP32.
- Compile and link with LTO.
- Use Pointer[None] for void* in FFI.
- Root authority capability in Env.
- Fine grained capabilities for files and directories.
- Use Capsicum on FreeBSD.
- Apply can be sugared with type arguments.
- Search pony_packages directories for use commands.
- Buffer peek functions (@jemc)
- collections/Ring
- Promises package
- Renamed some builtin types.
- abs() now returns an unsigned integer.
- Improved memory allocation speed.
- Reduced memory pressure.
- Scheduler steals when only the CD is on a scheduler thread queue.
- use commands searches ../pony_packages recursively similar to Node.js
- Readline uses a Promise to handle async responses.
- Viewpoint adaptation with a type expression on the left-hand side.
- Pass Pony function pointers to C FFI.
- The pony runtime now uses the same option parser as ponyc. A pony program exits if bad runtime args are provided.
- Output directory now created if it doesn't already exist.
- Improvements to automatic documentation generator.
- Union type for String.compare result.
- ANSI stripping on zero length writes to stdout/stderr.
- More OS X 10.8 compatibility.
- SSL multithreading support.
- Nested tuple code generation.
- Only finalise blocked actors when detecting quiescence.
- URL parse error.
- Automatic documentation generator in the compiler.
- FreeBSD 10.1 support, thanks to Ben Laurie.
- Allow method calls on union types when the signatures are compatible.
- Subtyping of polymorphic methods.
- Primitive
_init
and_final
for C library initialisation and shutdown. - collections.Flags
- lambda sugar.
- Separated the FFI '&' operator from the identityof operator.
- Operators on Set and Map are now persistent.
- use "file:..." becomes use "package:..."
- Allow "s at the end of triple-quoted strings.
- Allow behaviours and functions to be subtypes of each other.
- OS X 10.8 compatibility.
- Check whether parameters to behaviours, actor constructors and isolated constructors are sendable after flattening, to allow sendable type parameters to be used as parameters.
- Eliminate spurious "control expression" errors when another compile error has occurred.
- Handle circular package dependencies.
- Fixed ponyc options issue related to named long options with no arguments
- Cycle detector view_t structures are now reference counted.
- ANSI terminal handling on all platforms, including Windows.
- The lexer now allows underscore characters in numeric literals. This allows long numeric literals to be broken up for human readability.
- "Did you mean?" support when the compiler doesn't recognise a name but something similar is in scope.
- Garbage collection and cycle detection parameters can now be set from the command line.
- Added a FileStream wrapper to the file package.
- When using a package without a package identifier (eg.
use "foo"
as opposed touse f = "foo"
), aMain
type in the package will not be imported. This allows all packages to include unit tests that are run from their includedMain
actor without causing name conflicts. - The
for
sugar now wraps thenext()
call in a try expression that does acontinue
if an error is raised.