Onl popular demand, Pike 8.0.450 beta:
https://pike.lysator.liu.se/pub/pike/beta/8.0.450/Pike-v8.0.450.tar.gz
Other builds:
https://pike.lysator.liu.se/pub/pike/beta/8.0.450/Pike-v8.0.450-Darwin-15.4.... https://pike.lysator.liu.se/pub/pike/beta/8.0.450/Pike-v8.0.450-win32-oldlib...
This is not a release candidate, just something that includes Concurrent to play with until there is a real release.
Changes since Pike 8.0.438 (release 9) ----------------------------------------------------------------------
New Features ------------
o Concurrent
The Concurrent module simplify asynchronous code by synchronizing events in different ways. As an example the connection() function shown will repond with Concurrent.Promise object that at some point will represent either a connected socket or a failure.
Concurrent.Promise connection(string host, int port) { Stdio.File con = Stdio.File(); Concurrent.Promise p = Concurrent.Promise(); if( !con->async_connect(host, port, lambda(int success) { if(success) p->success(con); else p->failure("Failed to connect to "+host+":"+port+"\n"); })) { p->failure("Failed to open socket.\n"); } return p; }
The returned promise could the be used in various ways.
// On success, call make_request(con, query). On failure call // werror(msg). connection(host, port) ->on_failure(werror) ->on_success(make_request, query);
// On success, call make_request(con, query1) followed by // make_request(resp, query2), where resp is the return value from // make_reqest. connection(host, port) ->then(make_request, werror, query1) ->then(make_request, werror, query2);
// Call bridge_ports(con1, con2) when both connections are // established. Concurrent.all(connection(host1, port1), connection(host2, port2)) ->then(bridge_ports, failure);
// Call make_request(con) once either of the connections are // established. Concurrent.race(connection(host1, port1), connection(host2, port2)) ->then(make_requet, query);
Bug fixes ---------
o Search
Fixed a race condition when updating the database.
o Parser.HTML
Fixed a condition where Pike would run out of stack space for large documents.
o ADT.Heap
Fixed heap corruption when the same object is pushed more than once. It will now be considered as calling adjust().
o Inotify
- Addressed an issue where the backend might be stuck in pending indefinitely.
- EventStreamMonitor now works with other backends.
o Standards.BSON
Fixed incorrect encoding/decoding of Binary data.
o Stdio.Buffer
Fixed a crash when attempting to create a rewind key on a buffer returned by read_buffer().
o mappings
Fixed an off by one error in random(mapping) that randomly caused values of type PIKE_T_FREE from the freelist to be exposed to Pike.