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.0-x86_64-macports
https://pike.lysator.liu.se/pub/pike/beta/8.0.450/Pike-v8.0.450-win32-oldlibs.msi
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.