pike.git
/
CHANGES
version
»
Context lines:
10
20
40
80
file
none
3
pike.git/CHANGES:1:
+
Changes since Pike 7.8 (scratch area for future release notes)
+
----------------------------------------------------------------------
-
+
o decode_value now throws the error object Error.DecodeError. Useful
+
to catch format errors in the decode string.
+
o Added ADT.CritBit module
+
Mapping-like key-sorted data structures for string, int and float-keys
+
(ADT.CritBit.Tree, ADT.CritBit.IntTree, ADT.CritBit.FloatTree). Implemented
+
in C.
+
o Added module Geography.GeoIP
+
+
+
+
+
Changes since Pike 7.8.352 (third 7.8 release):
+
----------------------------------------------------------------------
+
+
Extensions and New Functions
+
----------------------------
+
+
o Added module Search.
+
FIXME: Needs a couple of paragraphs of description.
+
+
o has_prefix now works on objects.
+
+
o Standards.JSON
+
+
New module for encoding and decoding JSON data. Implemented in C.
+
+
o Protocols.HTTP.Session will no longer override an existing
+
content-type header in async_do_method_url.
+
+
o Protocols.HTTP
+
+
Allow directly specifying the body of a POST request (needed for the Google
+
Apps API).
+
+
o Updated timezone data to tzdata2010o.
+
+
o String.normalize_space
+
+
New and efficient C implementation; sanitises whitespace, even in wide
+
strings.
+
+
o String.trim_all_whites
+
+
Extended to the entire range of Unicode white spaces. (And is faster.)
+
+
o Tools.PV and pike -x pv now work with GTK2 as well as GTK.
+
+
o Integer constants exported by modules can now be used in cpp expressions.
+
+
o Modules/programs that have the constant "dont_dump_program" will not
+
be dumped on installation. This is used to prevent dumping of
+
programs that check for external dependencies at compile time such
+
as the MySQL module.
+
+
o Added Thread.Queue.peek_array.
+
+
o Fixed stack overrun bug in Nettle.CBC and Nettle.Proxy. This is not
+
belived to have been a security issue.
+
+
o Added System.getloadavg() on platforms that support the getloadavg() call.
+
+
o SSL
+
+
Added support for AES to SSL3, and fixed bug that prevented some
+
handshake failure alerts to be sent to the client.
+
+
o SSL
+
+
Implemented RFC 5746 "TLS Renegotiation Indication Extension".
+
+
o ADT.Heap->values and ->num_values can now be overloaded.
+
+
+
Optimizations
+
-------------
+
+
o MIME should now use 1/3 less memory when decoding big messages.
+
+
o Improved performance of Process.run.
+
+
o Nettle.hash
+
+
Avoid allowing threads during hashing of small strings (current threshold
+
is 1 MB). This change improves ApacheBench numbers ~20% for a Roxen
+
benchmark on a quad-core Core i5.
+
+
+
Deprecations
+
------------
+
+
o The libpq based old Postgres driver is now deprecated. The new pgsql
+
driver is faster, better tested, more stable, maintained, has more
+
features, does not depend on external libraries and is less filling.
+
+
+
Incompatible changes
+
--------------------
+
+
o Signal handlers in GTK2 do no longer get their arguments in the
+
form of an array. The prototype for a signal handler which was
+
previously e.g.
+
+
int query_tooltip(GTK2.Widget w, array(mixed) params, mixed callback_arg)
+
+
now becomes
+
+
int query_tooltip(GTK2.Widget w, int x, int y, int keyboard_tooltip,
+
GTK2.GObject tooltip, mixed callback_arg)
+
+
+
Bug fixes
+
---------
+
+
o Fixed backtraces when Protocols.HTTP.Query objects where garbage
+
collected. [bug 5730]
+
+
o Fixed problem with Calendar.month_from_yday() when applied on week
+
53. [bug 5303]
+
+
o Fixed leak in the PNG decoder for images with tRNS chunk.
+
+
o System.normalize_path no long fails for files with 8-bit chars in
+
their names.
+
+
o Support undocumented OS behaviour on out-of-band data returning
+
EOPNOTSUPP and ECONNRESET when a stream is half closed.
+
The undocumented behaviour is found on (at least) 2.6.x Linux
+
and FreeBSD 7.x and 8.x.
+
+
o Use nanosleep() when available instead of poll or select hacks for
+
the Pike-level sleep() function.
+
+
o Fixed dangling cache reference in prepared statements when using CREATE
+
statements via Sql.pgsql.
+
+
o Fixed broken (auto-re-) connect logic in Sql.pgsql.
+
+
o Improved widestring support for Parser.Tabular.
+
+
o Fixed segfault in combine_path_nt on windows when the first char
+
of an appended path is wide.
+
+
o Fixed fatal error in the constant expression evaluator of the
+
compiler for certain code.
+
+
o Fixed a problem in "pike -x module" that prevented auto tools from
+
running in the correct directory.
+
+
o Fixed memory leak on out of memory in Mysql.fetch_json_result().
+
+
o Fixed locking problem in Mysql.
+
+
o Fixed NULL-deref for compilation errors in range expressions.
+
+
o Fixed a segfault occuring if exit() is used from a thread when
+
the Pike runtime has been compiled with cleanup-on-exit enabled.
+
+
o Fixed so than an existing content-type is not overriden in
+
async_do_method_url.
+
+
o Fixed issue where GTK objects weren't destroyed properly.
+
http://pike.ida.liu.se/docs/tutorial/hello/window.xml now
+
works again.
+
+
o Fixed several issues related to lables on the X and Y axises
+
and the calculation of xmaxvalue for the bars/line/linear case
+
in Graphics.Graph.
+
+
o Fixed encoding/decoding bug in "pike -x httpserver" that prevented
+
files with space in the name from being accessable.
+
+
o Fixed bug that prevented the literal zero from being considered a constant.
+
+
+
Building and installing
+
-----------------------
+
+
o Fixed some library searchpath issues.
+
+
o Some potential fixes for --enable-pikelib mode on platforms had
+
problems with the final linking.
+
+
o Some issues with the support for building modules needing
+
a C++ compiler have been fixed.
+
+
+
Changes since Pike 7.8.316 (second 7.8 release):
+
----------------------------------------------------------------------
+
+
General
+
-------
+
+
o ADT.Heap
+
The compat functions top() and size() are now marked as deprecated.
+
+
+
Extensions and New Functions
+
----------------------------
+
+
o Image.Image
+
+
Added support for sending Color objects to the color() function.
+
+
o Sql.Sql
+
+
Added support for fetching result sets as JSON-encoded strings.
+
+
o Calendar
+
+
Updated timezone data to 2009j.
+
+
o Parser.XML.Tree
+
+
Output from render_xml() is now on canonical form.
+
+
o Added "pike -x httpserver" that implements a minimal HTTP-server
+
exporting the current directory.
+
+
+
Optimizations
+
-------------
+
+
o Lowered startup time by extending encode_value() and MasterCodec so
+
that master.pike can be precompiled.
+
+
o Lowered startup time by reducing the number of MEMSET() calls done
+
on startup.
+
+
o Allow threads while calling SDL_GL_SwapBuffers.
+
+
o Added optimization of has_value() and search() for single-character strings.
+
+
o Added optimization when combining two arrays where the second array
+
contains a single item.
+
+
+
Bug fixes
+
---------
+
+
o Fixed casting of floats to strings to again work more like in Pike
+
7.6 and earlier: The string will always contain either a "." or an
+
"e" to signify that it is a float, and it will no longer display so
+
many digits that the binary/decimal conversion errors become
+
visible.
+
+
o Protocols.HTTP.Server.HeaderParser will now discard parts of a
+
header value if the header value contains a newline (like "Host:
+
google.com\n.hax.net\r\n") and headers without colon.
+
+
o file_open_socket() now attempts to set SO_REUSEPORT on the socket.
+
Potentially fixes issues on FreeBSD 7.x where ports aren't reused.
+
+
o Calendar.TimeRanges now knows that `+() and `-() can get any number
+
of arguments.
+
+
o The experimental extended ZFS support is disabled since it pulled in
+
unwanted dependencies.
+
+
o Fixed propagation of changed module directories for joinnodes by
+
zapping the joinnode cache.
+
+
o Fixed memory leak in Image.WBF.
+
+
o Fixed potential NULL-deref in Image.XWD.
+
+
o Fixed potential NULL-deref in Image.PNG.
+
+
+
Building and installing
+
-----------------------
+
+
o Nettle 2.0 is now supported.
+
+
+
Changes since Pike 7.8.116 (initial 7.8 release):
+
----------------------------------------------------------------------
+
+
General
+
-------
+
+
o Sql.pgsql:
+
- Substantial documentation improvements.
+
+
o Stdio.Fd_ref is deprecated and in the process of being eliminated.
+
You have never used it before, so don't start using it now.
+
+
+
Bugfixes
+
--------
+
+
o Fixed bug in AGGR_ARR_EPILOGUE() (aka END_AGGREGATE_ARRAY()) that
+
caused the empty array to always be returned if there were no
+
unaggregated elements on the stack at END_AGGREGATE_ARRAY.
+
+
You are encouraged to upgrade just for this fix since the bug
+
creates very rare but (seemingly) random occurances of empty arrays.
+
+
o Fixed multiset_delete_node to work with destructed indices. This
+
fixes occasional bugs in various functions when there are destructed
+
objects in indices.
+
+
You are encouraged to upgrade just for this fix since the bug creates
+
(seemingly) random crashes that are hard to reproduce and track down.
+
+
o Fixed overzealous filtering of the value returned from Stdio.File()->mode().
+
This bug caused Stdio.nb_sendfile to always run in blocking mode.
+
+
You are encouraged to upgrade just for this fix since the bug can
+
cause supposedly nonblocking actions to block and hang the script.
+
+
o Fixed bug in the Odbc module on WIN32 where it would fail for some
+
field-types with the error "22003:Numeric value out of range".
+
+
o Sql.pgsql:
+
- Various small fixes and performance improvements.
+
- Fixed fully transparent UTF8/Unicode/wide string/character set support.
+
- Fixed formatting errors in error().
+
+
o Fixed bug when seeking backwards in Gz.File.
+
+
o Fixed bug in fd_stat on windows when used on a file system with a
+
long name.
+
+
o Fixed off-by-one bug in Stdio.Readline that caused a space in the
+
last column to disappear instead of being converted to a linefeed
+
when word wrapping is used.
+
+
o Fix bug in FakeFile.read()
+
Replaced the broken-in-multiple-ways implementation by something that
+
actually works (hence the original enlightnening description: "fixed a bug",
+
there is really no concise way to classify this level of brokenness).
+
+
o Image.TIFF: Fixed memory leak on OOM.
+
+
o Fixed crash bug in yyexplain_not_implements().
+
+
o LysKOM.ProtocolTypes: Bugfix of LocalToGlobalBlock
+
+
o Protected Pike_fatal() against the risk of hanging on mutexes.
+
+
o Added 7.6 compat versions for RegGet{Value{,s},KeyNames}().
+
+
o Fixed memory leak in Image.Colortable.
+
+
o Parser.SGML: Reinstated the class as Parser.SGML(). It inadvertedly
+
became Parser.SGML()->SGML() in the move to a separate file.
+
Parser.SGML.SGML is kept as a compatibility alias.
+
+
o Added Pike 7.6 and earlier compat for store_constant(UNDEFINED).
+
+
o Fixed race-condition causing "Lost track of child" on pikes compiled
+
--without-threads.
+
+
o Regexp.PCRE: Do not match the empty string past the end of the input.
+
+
o Reduced the risk of throwing out-of-stack errors while formatting an
+
out-of-stack backtrace.
+
+
o Fixed bug that would cause sprintf's %nH to refuse all strings as too
+
long for some values of "n" on some architectures.
+
+
o Made Process.search_path() aware if Win32 and AmigaOS specifics.
+
+
o Fixed bug in Protocols.HTTP.Query that dropped the last byte of a
+
request if the server did not provide a Content-Length header.
+
+
o Fixed bug in Protocols.HTTP.Query that dropped the first argument to
+
the async_fetch() callbacks (ie the query object) in some circumstances.
+
+
o Fixed bug in Protocols.HTTP.AsyncClient that made all data decoding fail.
+
+
o Fixed fatal "Invalid formatting method: 'p' 0x70." in COM.
+
+
o low_get_function_line() now knows about prototypes.
+
Fixes [bug 4855] ("Bad offset" when generating backtrace).
+
+
o Removed spurious call to the fail callback after a successful
+
Protocols.HTTP.Query()->timed_async_fetch(). Fixes [bug 4773].
+
+
o Fixed issue where symbols could be hidden by a later inherit of the
+
same, but protected, symbol.
+
+
o Fixed NULL dereference on failure to resolve the function return
+
type when functions are used as types.
+
+
+
Optimizations
+
-------------
+
+
o Fixed Filesystem._Tar.ReadFile to not gobble the whole tar entries
+
into memory at once.
+
+
o Improve performance of get_cpu_time() on OS X by avoiding a kernel
+
trap to get the ID of the underlying system thread.
+
+
o Throttle calls to task_info() on OS X since they are quite
+
expensive. This gives a significant performance boost (>10%) on
+
CPU-intensive applications.
+
+
+
Extensions and New Functions
+
----------------------------
+
+
o Added support for specifying modifiers via a mapping to '*' in sprintf().
+
+
See the documentation for details.
+
+
This support is detectable by checking for
+
String.__HAVE_SPRINTF_STAR_MAPPING__
+
+
o Added support for generating little-endian floats with %F in sprintf().
+
+
This support is detectable by checking for
+
String.__HAVE_SPRINTF_NEGATIVE_F__
+
+
o Sql.Sql now supports NULL values for %s-parameters.
+
+
o Timeout support in win32 threads.
+
+
o Made FakeFile() support getchar/gets/unread.
+
+
o Added option to chown and utime that makes it possible to change the
+
symlink instead of the target of the link.
+
+
o function_name() now knows how to adjust the names of named lambdas.
+
+
o Changed handling of POLLHUP for poll devices, it is now signalled on
+
all of the callbacks.
+
+
o Updated timezone data to tzdata2009c.
+
+
o Added some support for the TIMESTAMP and INTERVAL datatypes to
+
Oracle module.
+
+
+
New modules / classes / methods added
+
-------------------------------------
+
+
o Protocols.IPv6
+
+
Helpers for IPv6 related things. This currently only contains tools
+
to parse and normalize addresses. (Not much more is necessary since
+
the usual I/O interfaces support IPv6 as-is.)
+
+
o Added Filesystem._Tar.extract to be able to extract many/all files
+
in a reasonably efficient way.
+
+
o Added Parser.Tabular
+
It provides a flexible yet concise record-description language to parse
+
character/column/delimiter-organised records.
+
+
o Calendar.YMD.http_time() that knows how to handle dates according to
+
HTTP 1.1 (RFC 2616).
+
+
o Added support for GTK2 get_window() and get_pixmap().
+
+
+
Building and installing
+
-----------------------
+
+
o Use the #-character as prefix and suffix for placeholders in
+
master.pike.in instead of the currency sign, to avoid 8-bit character
+
encoding issues.
+
+
o Improved support for version bumping via both Subversion and git.
+
+
o A recent stable Pike (7.8.116+) is now required to do a "make
+
export".
+
+
o The win32 installer now removes the generated master.pike on uninstall.
+
+
+
+
Changes since Pike 7.6:
+
----------------------------------------------------------------------
+
+
This is a high level list of changes between Pike 7.6 and Pike 7.8.
+
General bug fixes, build fixes and optimizations are not mentioned
+
here. For a complete list of changes, please consult the CVS changelog
+
either directly or through Code Librarian.
+
+
+
New / improved language functionality
+
-------------------------------------
+
+
o New syntax to index from the end in range operations.
+
+
A "<" can be added before an index in the [..] operator to count
+
from the end instead, beginning with 0 for the last element. This is
+
convenient to e.g. chop off the last element in an array: a[..<1].
+
+
o New `[..] operator function.
+
+
Range operations have been separated from the `[] operator function
+
and are now handled by the new `[..] which provides greater control
+
for how the range bounds are specified. For compatibility, if there
+
is no `[..] then `[] is still called for range operations.
+
+
The `[..] callback will get four arguments, start value, start type,
+
end value and end type. The type arguments is any of
+
Pike.INDEX_FROM_BEG, Pike.INDEX_FROM_END or Pike.OPEN_BOUND. Here
+
are a few examples of what input arguments different calls would
+
generate.
+
+
[..] 0 OPEN_BOUND 0 OPEN_BOUND
+
[1..] 1 INDEX_FROM_BEG 0 OPEN_BOUND
+
[..2] 0 OPEN_BOUND 2 INDEX_FROM_BEG
+
[3..4] 3 INDEX_FROM_BEG 4 INDEX_FROM_BEG
+
[<5..] 5 INDEX_FROM_END 0 OPEN_BOUND
+
[6..<7] 6 INDEX_FROM_BEG 7 INDEX_FROM_END
+
+
o Generalized this and this_program.
+
+
It is now possible to refer to inherits in objects. Example:
+
+
class A {
+
int a;
+
void foo() { werror("A\n"); }
+
}
+
class B {
+
inherit A;
+
int b;
+
void foo() { werror("B\n"); }
+
A::this_program get_a() { return A::this; }
+
}
+
+
In the above B()->get_a() will return an object with two symbols,
+
'a' and 'foo', but B()->get_a()->foo() will still write "B\n".
+
+
o Added support for getters and setters.
+
+
It is now possible to simulate variables with functions. Example:
+
+
class A {
+
private int a;
+
int `b() { return a; } // Getter for the symbol b.
+
void `b=(int c) { a = c; } // Setter for the symbol b.
+
int c()
+
{
+
return b; // Calls `b().
+
}
+
}
+
+
object a = A();
+
a->b = 17; // Calls `b=(17).
+
werror("%d\n", a->b); // Calls `b().
+
+
o Casting to derived types.
+
+
It is now possible to call a value of type type to perform the
+
corresponding value cast. eg:
+
+
typedef string MyString;
+
+
return MyString(17); // Casts 17 to "17".
+
+
o Unicode escapes.
+
+
Pike now understands the common way to escape unicode chars, using
+
\uxxxx and \Uxxxxxxxx escapes. These escapes works both in string
+
and character literals and in the preprocessor. The latter means
+
that unicode escapes can be used in identifiers, which is useful if
+
they contain characters that can't be represented raw in the source
+
code charset.
+
+
o Stricter type checker for function calls.
+
+
The type checker for function calls is now based on the concept of
+
currification. This should provide for error messages that are more
+
easily understood. It also is much better att typechecking function
+
calls utilizing the splice (@) operator. The mechanisms used by the
+
typechecker are also made available as Pike.get_first_arg_type(),
+
Pike.low_check_call() and Pike.get_return_type().
+
+
o Stricter typing of strings.
+
+
The string type may now have an optional value range.
+
+
string(0..255) bytes;
+
+
o Support for having multiple different active backend implementations.
+
+
In Pike 7.6 and earlier, there could only be one active backend
+
implementation at a time, which was the one selected for best
+
performance with lots of files (cf Pike.Backend below). This led
+
to problems when Pike attempted to run poll-device based backends
+
on older versions of operating systems where poll devices aren't
+
available, and with extra overhead when the backend was only used
+
with a very small set of files.
+
+
Basic backend implementations:
+
+
- Pike.PollDeviceBackend
+
This is a backend that is implemented based on keeping the state in
+
the operating system kernel and thus eliminating the need to send the
+
state in every system call. This is however not available on all
+
operating systems. Currently supported are /dev/poll (Solaris, etc),
+
epoll(2) (Linux) and kqueue(2) (FreeBSD, MacOS X).
+
+
- Pike.PollBackend
+
This is a backend that is implemented based on the poll(2) system call.
+
This is typically available on all System V or Linux based systems.
+
+
- Pike.SelectBackend
+
This is a backend that is implmented based on the BSD select(2) system
+
call. This backend is available on all operating systems supported by
+
Pike.
+
+
Derived backend implementations:
+
+
- Pike.Backend
+
This is the backend selected among the basic backend implementations,
+
which is likely to have the best performance when there are lots of
+
files in the backend.
+
+
- Pike.SmallBackend
+
This is the backend selected among the basic backend implementations,
+
which is likely to have the best performance when there are very few
+
files in the backend.
+
+
Note that there is also a default backend object:
+
+
- Pike.DefaultBackend
+
This is the Pike.Backend object that is used for file callbacks and
+
call outs if no other backend object has been specified.
+
+
o cpp
+
+
The preprocessor now supports macro expansion in the #include and #string
+
directives.
+
+
#include USER_SETTINGS
+
+
o Destruct reason passed to lfun::destroy.
+
+
lfun::destroy now receives an integer flag that tells why the object
+
is being destructed, e.g. if it was an explicit call to destroy(),
+
running out of references, or reaped by the garbage collector.
+
+
These integers are defined in the new Object module as
+
DESTRUCT_EXPLICIT, DESTRUCT_NO_REFS, DESTRUCT_GC and
+
DESTRUCT_CLEANUP.
+
+
o Improved support for mixin.
+
+
The Pike compiler now supports mixin for symbols that have been
+
declared protected. Mixin is the concept of overloading symbols
+
via multiple inheritance. In previous versions of Pike the mixin
+
paradigm was only supported for public symbols. For more information
+
about mixin see eg http://en.wikipedia.org/wiki/Mixin .
+
+
o Implicit and explicit create().
+
+
The compiler now supports defining classes with both an implicit
+
and an explicit create().
+
+
class A (int i)
+
{
+
protected string j;
+
protected void create(string j)
+
{
+
A::j = reverse(j);
+
}
+
}
+
+
o Warnings for unused private symbols.
+
+
The compiler now checks that all symbols that have been declared
+
private actually are used.
+
+
o Warnings for unused local variables.
+
+
The compiler now checks that all local variables are used.
+
+
o Unicode
+
+
Case information and the Unicode module are updated to Unicode
+
5.1.0.
+
+
o The keyword protected
+
+
The modifier protected is now an alias for the modifier static.
+
NOTE: In the next release static will be deprecated.
+
+
o extern declared variables
+
+
Variables can now be declared as 'extern'. This means that
+
inheriting classes must have them. They can be used like normal
+
variables in the base class.
+
+
Example:
+
class A
+
{
+
extern int a;
+
int dummy() { return ++a; }
+
}
+
+
o __attribute__ and __deprecated__
+
+
It's now possible to set custom attributes on types, so that
+
it is possible to make custom type checking. This is currently
+
used to improve the argument checking for sprintf() and related
+
functions, and for marking symbols as deprecated.
+
eg:
+
+
__deprecated__ mixed obsolete_function();
+
__deprecated__(mixed) obsolete_return_value();
+
mixed fun(__deprecated__(mixed) obsolete_arg);
+
__deprecated__(mixed) obsolete_variable;
+
+
The deprecated type flag using __deprecated__ is a convenience
+
syntax to use instead of e.g.
+
+
void f(void|__attribute__("deprecated",int) timeout)
+
+
Other uses of __attribute__ in type declarations can be seen in e.g.
+
the type for werror():
+
+
> typeof(werror);
+
(1) Result: scope(0,function(string : int) |
+
function(__attribute__("sprintf_format", string),
+
__attribute__("sprintf_args", mixed) ... : int) |
+
function(array(string), mixed ... : int))
+
+
o __func__
+
+
The symbol __func__ now evaluates to the name of the current
+
function. Note that this name currently can differ from the
+
declared name in case of local functions (i.e. lambdas). Note
+
also that __func__ behaves like a literal string, so implicit
+
string concatenation is supported. eg:
+
+
error("Error in " __func__ ".\n");
+
+
o __DIR__
+
+
__DIR__ is a new preprocessor symbol that resolves to the directory
+
that the current file is placed in. Similar to how __FILE__ points
+
out the file the code is placed in.
+
+
o #pragma {no_,}deprecation_warnings
+
+
Warnings for use of deprecated symbols can be turned off for a
+
segment of code with
+
+
#pragma no_deprecation_warnings
+
+
and turned on again with
+
+
#pragma deprecation_warnings
+
+
o Compatibility name spaces
+
+
Older versions of a function can be reached through its version name
+
space. For example the 7.4 version of the hash function can be
+
called through 7.4::hash().
+
+
o Iterator API
+
+
The iterator API method Iterator->next() is no longer optional.
+
+
o IPv6
+
+
Support for IPv6 has been improved.
+
+
+
Extensions and New Functions
+
----------------------------
+
+
o exit()
+
+
Exit now takes optional arguments to act as a werror in addition to
+
exiting the process.
+
+
exit(1, "Error while opening file %s: %s\n", path, strerror(errno()));
+
+
o getenv()/putenv()
+
+
getenv() and putenv() are now accessing and modifying the real
+
environment.
+
+
o get_dir()
+
+
Calling get_dir() with no arguments will now return the directory
+
listing for the current directory.
+
+
o undefinedp()/destructedp()
+
+
undefinedp() and destructedp() have been added as more readable
+
alternatives to zero_type().
+
+
o limit()
+
+
The new toplevel function limit(a, x, b) is a convenience function
+
that works like min(max(a,x),b).
+
+
o listxattr(), getxattr(), setxattr(), removexattr()
+
+
The new xattr functions listxattr(), getxattr(), setxattr and
+
removexattr() allows extended file attributes to be modified from
+
within Pike.
+
+
o sprintf() and sscanf()
+
+
- sprintf() now attempts to lookup the name of the program when
+
formatting types of objects and programs.
+
+
- The new formatting directive %H can be used to format a string as
+
a binary hollerith string.
+
+
> sprintf("%2H", "Hello");
+
(1) Result: "\0\5Hello"
+
+
- The new formatting directive %q can be used to format a atring as
+
a quoted string, quoting all control character and non-8-bit
+
characters as well as quote characters. Like %O but always on one
+
line.
+
+
> sprintf("%q", "abc \x00 \" \' \12345");
+
(1) Result: "\"abc \\0 \\\" ' \\u14e5\""
+
+
- Ranges in sscanf sets can now start with ^, even at the beginning
+
of the set specifier. Example: %[^-^] matches a set with only ^ in
+
it. To negate a set with - in it, the - character must now be the
+
last character in the set specifier.
+
+
o encode/decode value and programs
+
+
--with-portable-bytecode is now the default. Pike programs that have
+
been dumped on one architecture now can be decoded on another.
+
+
o gethrtime, gethrvtime, gauge
+
+
Added support for POSIX style timers using clock_gettime(3). Notably
+
this fixes nice high resolution thread local cpu time and monotonic
+
real time on reasonably modern Linux systems.
+
+
There are new constants CPU_TIME_* and REAL_TIME_* in the System
+
module to allow pike code to query various properties of the CPU and
+
real time clocks in use.
+
+
o ADT.BitBuffer
+
+
Added read() method that reads whole bytes from the buffer and
+
returns as a string.
+
+
o ADT.Queue
+
+
It is now possible to use sizeof() and values() on a Queue object to
+
get the size of the queue and all elements in the queue as an array.
+
+
o ADT.Stack
+
+
Stack objects can now be cast to arrays to get all elements on the
+
stack.
+
+
o ADT.Struct
+
+
- New Item class SByte, SWord and SLong represents a signed byte,
+
word and longword respectively.
+
+
- The Item classes int8, uint8, int16, uint16, int32, uint32, int64
+
and uint64 are aliases for already existing Item classes.
+
+
- sizeof() now works for empty Struct objects.
+
+
- sizeof() can be used on individual Item objects.
+
+
- Struct objects can now be used as Items in other Structs.
+
+
class Pair
+
{
+
inherit ADT.Struct;
+
Item id = uint8();
+
Item val = uint64();
+
}
+
+
class File
+
{
+
inherit ADT.Struct;
+
Item magic = Chars(4);
+
Item one = Pair();
+
Item two = Pair();
+
}
+
+
o Array
+
+
- New function combinations() returns all combinations of a
+
specified length with elements from a given array.
+
+
- Added push(), pop(), shift() and unshift() functions for Perl
+
weirdos.
+
+
o Calendar
+
+
- Added new calendar Badi, used in the Baha'i religion.
+
+
- Fixed bugs in discordian, where the year() was off by 1166 and
+
now() was off 5 month per year.
+
+
- Time objects now handle * and / with floats. A split() method has
+
been added for more advanced splitting where the preferred time
+
quanta can be given as an argument.
+
+
- A new formatting method format_ext_time_short() has been added to
+
Time objects.
+
+
- Timezones are now read from /etc/localtime, if available.
+
+
- Cleaned up year-day (yd) handling so that it never goes below 1.
+
Instead be careful to use either year (y) or week-year (wy)
+
depending on context.
+
+
- Fixed inconsistent range handling in year() and years() that made
+
them almost but not quite zero-based. Now they are one-based just
+
like day()/days(), month()/months() etc.
+
+
- Cleaned up conversion between weeks and years: E.g. if a week has
+
days in two years then converting it to years will produce a range
+
of both years. The attempt to always map a week to a single year
+
is gone since it's inconsistent with how other overlapping time
+
ranges are handled. If the user wants to convert a week to the
+
year it "unambiguously" belongs to, (s)he can do
+
Calendar.ISO.Year(week->year_no()).
+
+
- Did away with the attempt to map leap days between February 24th
+
and 29th before and after year 2000, since doing so breaks date
+
arithmetic.
+
+
- The last four changes above are not entirely compatible.
+
Compatibility with 7.6 and older is retained with #pike 7.6.
+
+
o CompilerEnvironment & CompilerEnvironment()->PikeCompiler
+
+
The Pike compiler has been refactored to be more object-oriented and
+
more transparent. It is now possible to customize the compiler by
+
overloading functions in the above two classes. The compiler object
+
used by Pike internally is available through the global constant
+
DefaultCompilerEnvironment.
+
+
o Debug
+
+
The new function count_objects() will return the different kinds of
+
objects existing within the Pike process. Useful when trying to
+
pinpoint a leak of Pike objects.
+
+
o Error
+
+
The new function mkerror() will normalize any thrown value into a
+
proper error object (or 0).
+
+
o Filesystem
+
+
Traversion has been extended with two new create arguments. The
+
first one is a flag to supress errors and the other is a sorting
+
function which will be applied to the entries in every directory.
+
This callback can also be used to filter the directory entries.
+
+
o Float
+
+
The function isnan() can be used to check if a float is Not a
+
Number.
+
+
> Float.isnan(Math.inf/Math.inf);
+
(1) Result: 1
+
+
o Gdbm
+
+
Gdbm databases can be opened in synchronous mode or locking mode by
+
adding "s" or "l" respectively in the mode parameter to the create
+
method.
+
+
o Geography.Position
+
+
It is now possible to encode Position objects with encode_value().
+
+
o GLUE
+
+
- The default event callback will now exit both on Exit and Escape
+
events.
+
+
- The texture, list and light id generators will now be created
+
after we are sure that GL has been initialized, to prevent crashes
+
on several systems.
+
+
- BaseTexture and BaseDWIM now supports clamped textures.
+
+
o Gmp
+
+
Many small changes to fix Gmp build issues on different platforms.
+
The most visible being that the Gmp module now is statically linked
+
to work around Mac OS X 10.5 linker issues.
+
+
o Gz
+
+
- Added compress() and uncompress() functions as a simpler and more
+
efficient but non-streaming interface.
+
+
- Support for RLE And FIXED compression method, if supported by
+
zlib. Give Gz.RLE or Gz.FIXED to the strategy argument of
+
compress() or the deflate constructor.
+
+
- Added support for configurable compression window size. This is
+
the last argument to compress() and the constructor for
+
inflate/deflate.
+
+
o Image.Colortable
+
+
- The new method greyp() can be used to query if the color in the
+
color object is grey.
+
+
- Partial support for serializing color objects. Dithering type and
+
lookup mode is not currently saved.
+
+
o Image.Dims
+
+
Support for parsing out the dimensions of TIFF files has been added.
+
+
o Image.FreeType
+
+
- Added support for handling monochrome (bitmap) fonts.
+
+
o Image.Image
+
+
- Image object can now be serialized and deserialized with
+
encode_value() and decode_value().
+
+
- It is possible to convert the colors in an image object to and
+
from YUV (YCrCb) with the new rgb_to_yuv() and yuv_to_rgb()
+
methods.
+
+
o Image.Layer
+
+
- It is now possible to get the raw bitmap data of a layer by
+
casting the layer object to a string.
+
+
o Image.PNG
+
+
- Properly decode cHRM (chrome), sBIT (sbit), gAMA (gamma), pHYs
+
(physical), oFFs (offset), tIME (time) chunks.
+
+
- The compression level and strategy when compressing PNG images can
+
be controlled by passing "zlevel" and "zstrategy" options to the
+
encode() method. Available strategies are filtered, huffman, rle
+
and fixed.
+
+
Image.PNG.encode( img, ([ "zlevel":9, "zstrategy":Gz.RLE ]) );
+
+
o Image.TIFF
+
+
Added support for little endian TIFF files.
+
+
o Int
+
+
Int.inf is an object that can be used as an infinitly large integer.
+
+
o Java
+
+
- If possible, Pike now uses libffi instead of creating our own
+
trampolines. Adding libffi as a bundle is supported.
+
+
- Added built-in support for SPARC64 trampolines.
+
+
- The method signature fuzzy-matcher now only considers Pike strings
+
to match formal parameters of type String, Object, Comparable,
+
CharSequence or java.io.Serializable.
+
+
- When the fuzzy-matcher can not decide on a single method
+
signature, all candidates are now listed in the error message.
+
+
o Locale.Charset
+
+
- The character name normalizer now recognizes Unicode prefixes,
+
e.g. "unicode-1-1-utf-7", though the Unicode version itself is
+
ignored.
+
+
- Added support for the following character sets
+
+
GB18030/GBK (CP936)
+
UTF-EBCDIC
+
DIN-31624 (ISO-IR-38)
+
ISO-5426:1980 (ISO-IR-53)
+
ISO-6438:1996 (ISO-IR-39, ISO-IR-216)
+
ISO-6937:2001 (ISO-IR-156)
+
GSM 03.38
+
Mysql Latin 1
+
+
- Added typed encode and decode error objects,
+
Locale.Charset.EncodeError and Locale.Charset.DecodeError, to make
+
it possible to catch such errors in a better way.
+
+
- ISO-IR non-spacers are now converted into combiners.
+
+
o Math
+
+
- Matrix multiplication was bugged and gave B*A instead of A*B,
+
which is now fixed.
+
+
- Matrix objects now have xsize() and ysize() methods to query their
+
dimensions.
+
+
- To ease your logarithmic needs log2() and logn() have been added.
+
+
o MIME
+
+
- Added remapping variants of the encode words functions with
+
encode_word_text_remapped(), encode_word_quoted(),
+
encode_words_quoted_remapped() and
+
encode_words_quoted_labled_remapped().
+
+
- Added workaround for a bug in Microsoft Internet Explorer where it
+
forgets to properly quote backslashes in the Content-Disposition
+
field.
+
+
- Fixed a bug that could occur when casting MIME.Message objects to
+
strings.
+
+
o Mysql
+
+
- Two functions set_charset() and get_charset() have been added to
+
set and query the connection charset. The create() function also
+
takes a "charset" setting in the options mapping.
+
+
- Improved Unicode support. The MySQL driver now supports
+
(possibly wide) Unicode queries and text return values, handling
+
the connection charset and all encoding/decoding internally. This
+
is enabled by setting the charset to "unicode", or through the new
+
functions set_unicode_encode_mode() and set_unicode_decode_mode().
+
See their documentation for further details.
+
+
o Odbc
+
+
The Odbc module has been updated to support the UnixODBC library, and
+
several issues with Unicode and FreeTDS handling have been fixed.
+
+
o Oracle
+
+
- The module has been updated to work with Oracle 10.
+
+
- An approximation of the number of rows in a result object can be
+
queried from the new function num_rows().
+
+
o Parser.HTML
+
+
- Allow string and array as argument to _set_*_callback(). Those
+
variants work just like a function only returning the string or
+
array.
+
+
o Parser.Pike and Parser.C
+
+
- Parser.Pike and Parser.C have been rewritten in C for increased
+
performance.
+
+
- The #string directives should be handled correctly now.
+
+
o Parser.RCS
+
+
- The RCS parser has been rewritten to be more robust with regards
+
to broken RCS data.
+
+
o Parser.XML.NSTree
+
+
- Added add_child_before() and add_child_after() methods to the
+
NSNode object.
+
+
o Parser.XML.Simple
+
+
- The autoconvert() function, used to autodetect the character
+
encoding of an XML file and decode it, has been moved from being a
+
method of the Parser.XML.Simple object to being a function in the
+
Parser.XML module.
+
+
o Parser.XML.SloppyDOM
+
+
Yet another DOM-like module aimed at quickly and conveniently parse
+
an xml snippet (or whole document) to access its parts. Nodes can be
+
selected using a subset of XPath.
+
+
Footnote: This module was previously part of Roxen WebServer.
+
+
o Parser.XML.Tree
+
+
The module code has been refactored and a second "simple" interface
+
has been added. The (new) SimpleNode interface implements a node tree
+
interface similar to the (old) Node interface, with two major
+
differences:
+
+
- The SimpleNodes do not have parent pointers, this means that they
+
do not generate cyclic data structures (and thus less garbage, and
+
no need for zap_tree()), but also that it is no longer possible to
+
find the root of a tree from any node in the tree.
+
+
- Some methods in SimpleNode return different values than the
+
corresponding method in Node; notably SimpleNode()->add_child(),
+
which returns the current node rather than the argument.
+
+
The refactoring also added individual classes for all of the XML node
+
types (both for Nodes and for SimpleNodes). This allows for stricter
+
typing of code involving XML tree manipulation.
+
+
Several new functions added to manipulate and insert nodes in the
+
XML tree.
+
+
The module now also has a much better knowledge of DTDs and DOCTYPEs.
+
+
o Parser.XML.Validating
+
+
- get_external_entity() now gets the callback info mapping as
+
the third argument rather than a constant zero.
+
+
- SYSTEM URIs are now normalized during parsing if possible.
+
+
- parse() and parse_dtd() now accept getting the base URI for the
+
parsed data as the second argument.
+
+
- Improved error reporting.
+
+
- Several issues with the parsing of DTDs have been fixed.
+
+
o Postgres
+
+
- Extended the SQL query interface to include affected_rows() and
+
streaming_query() as well as variable bindings.
+
+
- Automatic binary or text transfer for queryarguments and resultrows.
+
+
Note: A new native Postgres driver has also been added; see
+
Sql.pgsql.
+
+
o Pike
+
+
- A new function count_memory() has been added which can calculate
+
the memory consumed by arbitrary data structures. Useful when
+
implementing memory caches.
+
+
- A new function get_runtime_info() has been added which returns
+
information about current ABI, if automatic bignums are enabled,
+
what bytecode method is used, the size of native floats and
+
integers and the native byte order.
+
+
- The constants INDEX_FROM_BEG, INDEX_FROM_END and OPEN_BOUND has
+
been added for use with the `[..] operator API.
+
+
- The functions low_check_call(), get_return_type() and
+
get_first_arg_type() allows for inspection of attributes and
+
return values of functions.
+
+
o Pike.Backend
+
+
Besides the new multiple backend implementations described earlier,
+
backends now support two new callbacks: before_callback and
+
after_callback are two new variables in the backend objects. They
+
can be set to functions that gets called just before and after a
+
backend is waiting for events.
+
+
o Process
+
+
- The new function spawn_pike() will spawn a Pike process similar to
+
the current one, using the same binary file, master and module
+
paths.
+
+
- The new function run() is an easy interface that will run a
+
process and return a mapping with all the outputs and exit code.
+
+
- Process.popen is now able to run in nonblocking mode. If a second
+
argument is provided a file object will be opened with that mode
+
and return, enabling two way communication with the new process.
+
+
- The system() function has been extended to be able to pass stdin,
+
stdout and stderr arguments to the spawn() call it performs.
+
+
o Protocols.DNS
+
+
- Added support for NAPTR (RFC 3403) and SPF (RFC 4408) records.
+
+
- The gethostbyname() function now returns IPv6 addresses too, if
+
available.
+
+
- Fixed bugs in IPv6 record parsing.
+
+
o Protocols.Bittorrent
+
+
- Support for gzipped and compact tracker responses.
+
+
- Many performance and bug fixes, such as 30% faster hashing of
+
files.
+
+
o Protocols.HTTP
+
+
- Added support for httpu and httpmu requests.
+
+
- Queries will now throw an exception in case of an errno condition.
+
+
- A new function, do_async_method(), has been added to allow access
+
to low level asynchronous HTTP calls.
+
+
- The http_encode_string() function now knows how to encode UCS-2
+
characters.
+
+
o Protocols.HTTP.Server
+
+
- If accept() fails on the open port, the Port object will continue
+
trying, to support servers with high load.
+
+
o Protocols.HTTP.Query
+
+
- Added unicode_data() method that will return the payload decoded
+
according to the charset described in the Content-Type header.
+
+
- Many fixes for bugs in asynchronous mode.
+
+
- A query will not silently downgrade to http from https anymore if
+
there is no crypto support.
+
+
- Fixes for keep alive.
+
+
- IPv6 fixes in DNS handling.
+
+
o Protocols.LDAP
+
+
- Enabled support for paged queries.
+
+
- Added more resilience to UTF-8 encode errors.
+
Locale.Charset.DecodeError is thrown for UTF-8 decode exceptions.
+
+
- Added a connection pool for connection reuse. It is used through
+
get_connection() and return_connection().
+
+
- Added some schema handling and use it to fix the UTF-8 conversion
+
to only affect attributes that actually are UTF-8 encoded.
+
+
- Added client.read(), client.read_attr(),
+
client.get_root_dse_attr(), client.get_basedn(),
+
client.get_scope(), client.get_attr_type_descr(),
+
get_constant_name(), and a bunch of constants for various object
+
oids, attributes, well-known object guids and other things.
+
+
- Rewrote the search filter parser to handle LDAPv3 extensible
+
matches. It now also throw errors on all syntactic errors (using a
+
new FilterError object), instead of sending a partial filter to
+
the server. It is also possible to compile filters separately
+
through make_filter(), and there is a very simple cache for
+
compiled filters through get_cached_filter().
+
+
- Added ldap_encode_string(), ldap_decode_string(),
+
encode_dn_value(), canonicalize_dn(), parse_ldap_url(),
+
client.get_parsed_url(), and client.get_bound_dn().
+
+
- Added client.result.fetch_all().
+
+
- Added new flag field to client.search() to control various aspects
+
of how results are returned: SEARCH_LOWER_ATTRS lowercases all
+
attribute names. SEARCH_MULTIVAL_ARRAYS_ONLY uses arrays for
+
attribute values only for attributes that might return more than
+
one value. SEARCH_RETURN_DECODE_ERRORS may be used to avoid
+
throwing exceptions on decode errors.
+
+
- Added client.get_protocol_version(),
+
client.get_supported_controls(), and the possibility to specify
+
controls in client.search().
+
+
- Made the result iterator somewhat more convenient: next() now
+
advances one step past the end so the next fetch() returns zero.
+
+
- Added client.error_number(), client.error_string(), and
+
client.server_error_string() to make it possible to query errors
+
when no result object is returned.
+
+
o Protocols.SNMP
+
+
The readmsg() method in the protocol object now takes an optional
+
timout argument.
+
+
o Protocols.TELNET.Readline
+
+
Several issues where callback functions could be lost have been fixed.
+
+
o Protocols.XMLRPC
+
+
The new AsyncClient class implements an asynchronous XMLRPC client.
+
+
o Regexp.PCRE.Widestring
+
+
- Replace matches in a string, with support for backreferences, now
+
possible from replace_positional().
+
+
> Regexp.PCRE.Plain("my name is ([a-zA-Z]+)")->
+
>> replace_positional("hello, my name is john.",
+
>> "%[0]s is my name");
+
(1) Result: "hello, john is my name."
+
+
- Regexp.PCRE.Widestring is now reported in the basic feature list
+
(pike --features).
+
+
o Sql
+
+
- Bugfixes in listing Postgres fields.
+
+
- If ENABLE_SPAWN_RSQLD is defined, rsqld will be spawned when
+
needed to complete rsql queries.
+
+
- Added streaming_query() method to Sql objects which enables larger
+
result sets than available memory.
+
+
- It is possible to iterate over the result object from big_query()
+
queries directly in foreach.
+
+
- Support UNDEFINED to designate NULL in emulated bindings.
+
+
- Support for ODBC DSN files.
+
+
Sql.Sql db = Sql.Sql("dsn://user:pass@host/database");
+
+
- Some native support for the TDS protocol, used by Sybase and
+
Microsoft SQL server.
+
+
Sql.Sql db = Sql.Sql("tds://user:pass@host/database");
+
+
- Support for the SQLite database added. A raw interface is
+
available through the SQLite module.
+
+
Sql.Sql db = Sql.Sql("sqlite://relative/path/to/file");
+
Sql.Sql db = Sql.Sql("sqlite:///absolute/path/to/file");
+
+
- Sql.pgsql. New driver for native PostgreSQL network protocol support.
+
It implements a superset of the existing Postgres driver.
+
Current features: no library dependencies (no libpq), native binding
+
support, streaming support, NOTIFY/LISTEN support (fully eventdriven,
+
no polling), binary support for integer, float and string datatypes
+
through big_typed_query(), native support for 64-bit ints and doubles,
+
COPY FROM/TO STDIN/STDOUT support, multiple simultaneous streaming
+
queries on the same connection (i.e. multiple PostgreSQL-portal-
+
support), automatic precompilation and caching of often-used
+
long-compile-time-needing queries, extended columndescriptions,
+
accurate error messages under all circumstances, SSL-support,
+
SQL-injection protection since it will ignore everything after the
+
first semicolon delimiting the first command in the query, integrated
+
statistics, _reconnect callback for sessions that use temptables.
+
+
Performance tuned, with the helperclass _PGsql.PGsql it currently
+
is around 21% faster than the old libpq based Postgres driver
+
for smaller queries; for large bytea blobs and large texts, it
+
speeds up even more.
+
+
This driver serves URLs of the form:
+
pgsql:// (plain) and pgsqls:// (SSL).
+
In case the old Postgres driver is disabled, this driver takes
+
over postgres:// transparently as well.
+
+
o SSL
+
+
It is now possible to set certificates to SSL connections. Example:
+
+
SSL.sslfile ssl_connection(Stdio.File conn, string my_key,
+
string my_certificate)
+
{
+
ctx->client_rsa = Standards.PKCS.RSA.parse_private_key(my_key);
+
+
// client_certificates is an array holding arrays of certificate
+
// chains. since we've got a self-signed cert, our cert array has
+
// only 1 element.
+
ctx->client_certificates += ({ ({ my_certificate }) });
+
+
return SSL.sslfile(conn, ctx, 1, 1);
+
}
+
+
o Standards.IIM
+
+
Some bugfixes in parsing Photoshop headers and DOS EPS Binary
+
Headers.
+
+
o Standards.ISO639_2
+
+
Updated with the latest ISO639-2 languages.
+
+
o Standards.URI
+
+
- Updated to conform to RFC 3986.
+
+
- Added methods get_query_variables(), set_query_variables(),
+
add_query_variable() and add_query_variables() to give a better
+
API to to handle query variables.
+
+
- The new method get_http_query() returns the query part and
+
get_http_path_query() returns both the path and the query, both
+
coded according to RFC 1738.
+
+
o Standards.UUID
+
+
- Added support for UUID version 5; name based with SHA hash, which
+
can be generated from the make_version5 function.
+
+
- An UUID object can now be used as namespace in the second argument
+
to make_version3 as well as the new make_version5.
+
+
o Standards.XML.Wix
+
+
- Updated to support a more recent version of the Wix tool chain.
+
+
- Improved generation of 8.3-style filenames.
+
+
- Added support for Shortcut and IniFile-nodes.
+
+
- Added support for overriding the language and installer version.
+
+
- Improved support for TTF-files.
+
+
o Stdio
+
+
- Stdio.cp can now work recursively in a directory tree. It will
+
also keep the permissions of files it copies.
+
+
- Added Stdio.recursive_mv which works on every OS and also when the
+
destination isn't on the same filesystem as the source.
+
+
- Added more symbolc default termcap/terminfo bindings to
+
Stdio.Readline.
+
+
- Improved support for Stdio.Terminfo on NetBSD.
+
+
- read_file(), read_bytes(), write_file() and append_file() will may
+
now throw exceptions on uncommon errors such as when write_file is
+
unable to write all its data.
+
+
- Stdio.File->openat(), statat() and unlinkat() opens, stats and
+
removes a file or directory relative to an open directory.
+
+
- Stdio.FILE->unread() allows pushing back binary strings into the
+
input stream, as opposed to ungets() which pushes back lines.
+
+
- Stdio.UDP has had enable_multicast(), set_multicast_ttl(),
+
add_membership() and drop_membership() added to make real
+
multicast use possible.
+
+
o String
+
+
- The function int2size has been rewritten to fixpoint as well as
+
using the more common abbreviation of "B" for byte.
+
+
- String.secure marks a string as "secure" which currently only
+
means that the memory is cleared before it is freed.
+
+
o System
+
+
- resolvepath() is now enabled on more OSes and falls back to
+
realpath(3C) if resolvepath(2) doesn't exists.
+
+
- On systems that support it, setproctitle() can be used to set the
+
title of the running application.
+
+
- Added support for POSIX style timers using clock_gettime(3) to
+
allow for high resolution thread local cpu time and monotonic real
+
time on reasonable modern Linux systems for gethrvtime() and
+
gauge(). Added CPU_TIME_RESOLUTION, CPU_TIME_IMPLEMENTATION,
+
REAL_TIME_IS_MONOTONIC, REAL_TIME_RESOLUTION and
+
REAL_TIME_IMPLEMENTATION constants to tell the system
+
capabilities.
+
+
o Tools.Hilfe
+
+
- Added support for tab-completion on modules, global and local
+
symbols and operators.
+
+
- Added support for file/directory completion within strings
+
+
- Added doc command and F1 key to print documentation on an item if
+
available (currently only works for modules and classes written in
+
pike).
+
+
o Tools.Standalone
+
+
- "pike -x cgrep" now tries to parse Java code.
+
+
- "pike -x features" now tests for several more features.
+
+
o Web.Crawler
+
+
- Bugfix to support robots.txt created on windows.
+
+
- User Agent change to "Mozilla 4.0 (PikeCrawler)"
+
+
o Web.RDF
+
+
- Added add_statement() method which allows new relations to be
+
added to an RDF set.
+
+
+
New modules / classes / methods added
+
-------------------------------------
+
+
o Fuse
+
+
FUSE (Filesystem in USErspace) provides a simple interface for
+
userspace programs to export a virtual filesystem to the Linux
+
kernel (and some other OS:es). FUSE also aims to provide a secure
+
method for non privileged users to create and mount their own
+
filesystem implementations.
+
+
This module implements the needed interfaces to make it possible to
+
write a FUSE filesystem in Pike.
+
+
o ADT.List
+
+
A simple doubly linked list of values.
+
+
ADT.List l = ADT.List(1, 2, 3);
+
l->insert(-1, 0);
+
l->append(4, 5);
+
foreach(l; int index; int value) {
+
werror(" %d: value: %d\n", index, value);
+
}
+
+
o ADT.Set
+
+
ADT.Set implements a datatype for sets. These sets behave much
+
like multisets, except that they are restricted to containing only
+
one instance of each member value.
+
+
From a performance viewpoint, it is probably more efficient for a
+
Pike program to use mappings to serve as sets, rather than using an
+
ADT.Set, so ADT.Set is mainly provided for the sake of completeness
+
and code readability.
+
+
o Arg
+
+
The new argument parser module allows for Getopt style argument
+
parsing, but with a much simpler and object oriented API.
+
+
class Parser
+
{
+
inherit Arg.Options;
+
Opt verbose = NoOpt("-v")|NoOpt("--verbose")|Env("VERBOSE");
+
Opt name = HasOpt("-f")|HasOpt("--file")|Default("out");
+
Opt debug = MaybeOpt("-d")|MaybeOpt("--debug");
+
}
+
+
void main(int argc, array(string) argv)
+
{
+
Parser p = Parser(argv);
+
werror("name: %O, verbose: %O, debug: %O\n",
+
p->name, p->verbose, p->debug);
+
}
+
+
A more simplistic interface is also available for smaller hacks and
+
programs.
+
+
void main(int argc, array(string) argv)
+
{
+
mapping opts = Arg.parse(argv);
+
argv = opts[Arg.REST];
+
}
+
+
o GSSAPI
+
+
Implements Pike access to GSS-API v2 as specified in RFC 2743. This
+
API is used to authenticate users and servers, and optionally also
+
to encrypt communication between them. The API is generic and can be
+
used without any knowledge of the actual implementation of these
+
security services, which is typically provided by the operating
+
system.
+
+
The most common implementation is Kerberos, which means that the
+
main benefit of this API is to allow clients and servers to
+
authenticate each other using Kerberos, thereby making single
+
sign-on possible in a Kerberized environment.
+
+
o GTK2
+
+
Wrapper for the GTK2 library. Not yet 100% completed, but usable.
+
+
o Protocols.DNS_SD
+
+
This module provides an interface to DNS Service Discovery. The
+
functionality of DNS-SD is described at <http://www.dns-sd.org/>.
+
+
Using the Proctocols.DNS_SD.Service class a Pike program can
+
announce services, for example a web site or a database server, to
+
computers on the local network.
+
+
When registering a service you need to provide the service name.
+
service type, domain and port number. You can also optionally
+
specify a TXT record. The contents of the TXT record varies between
+
different services; for example, a web server can announce a path
+
to a web page, and a printer spooler is able to list printer
+
features such as color support or two-sided printing.
+
+
The service is registered on the network for as long as the instance
+
of the Service class is valid.
+
+
o Bittorrent.Tracker
+
+
Bittorrent tracker with support for scraping and UDP extension.
+
+
o Protocols.HTTP.Server.Proxy
+
+
A simple HTTP proxy.
+
+
o Standards.TLD
+
+
Country domains and other TLDs according to IANA. Useful when
+
parsing log information or providing live information about clients
+
connecting to your server.
+
+
o Tools.Shoot
+
+
Several new tests have been added to benchmark and improve on
+
various aspects of Pike. ReplaceParallel and ReplaceSerial measure
+
the times it takes to replace multiple substrings of a string in a
+
single call to replace and with subsequent calls.
+
+
TagRemoveArraySscanf, TagRemoveDivide, TagRemoveLoop,
+
TagRemoveParserHTML, TagRemovePCRE, TagRemoveSearch and
+
TagRemoveSscanf measure different methods of completing the same
+
task; to remove XML tags from a string.
+
+
o Web.CGI
+
+
Provides a CGI interface on the callee side. Retrieves information
+
from environment variables and populates the variables in the
+
Request object.
+
+
+
Deprecations
+
------------
+
+
o The keyword nomask has been deprecated. It was functionally
+
equivivalent with the keyword final.
+
+
o Stdio.File->set_peek_file_before_read_callback() is deprecated.
+
+
+
Incompatible changes
+
--------------------
+
+
These incompatible changes can be solved by adding #pike 7.6 to your
+
source file or starting Pike with -V7.6 unless otherwise noted.
+
+
o main() environment
+
+
The main() method will no longer be given the environment as a
+
mapping as third argument. Use an explicit call to getenv() instead.
+
+
o Array.transpose_old
+
+
This function has been removed.
+
+
o Calendar
+
+
Changes made to fix inconsistensies has created som unavoidable
+
incompatibilities. See the entry for Calendar in the functional
+
changes section for details.
+
+
o _Charset
+
+
The parts of this internal module that were written in Pike
+
have moved to Locale.Charset.
+
+
o Crypto
+
+
The old crypto functions from Pike 7.4 have been removed. These
+
functions produced a warning when used in Pike 7.6.
+
+
o Debug.describe_program
+
+
The API for this debug function has changed.
+
+
o Image.Image
+
+
The functions select_colors(), map_closest(), map_fast() and
+
map_fs() has been removed. Use Image.Colortable operations instead.
+
+
o Parser.XML
+
+
The XML parsers are now stricter in verifying the correctness
+
of the XML. The function compat_allow_errors can be called in the
+
create method of the Parser.XML.Simple and Parser.XML.Validating
+
(with "7.6" as argument for 7.6 compatibility). Parser.XML.Tree can
+
be created with PARSE_COMPAT_ALLOW_ERRORS_7_6 as flag.
+
+
o Protocols.LDAP.client
+
+
The "dn" field wasn't properly utf-8 decoded in 7.6 and earlier. If
+
your application does it yourself, you need to use the compatibility
+
version of this class.
+
+
o Protocols.TELNET
+
+
The interface functions create() and setup() are now protected symbols.
+
+
o spider.XML
+
+
The spider module no longer contains the XML parser. The functions
+
isbasechar(), iscombiningchar(), isdigit(), isextender(),
+
isfirstnamechar(), ishexchar(), isidiographic(), isletter(),
+
isnamechar() and isspace() have also been moved to the Parser module.
+
+
o Sql.Sql
+
+
Pike will no longer create a .column entry in SQL query responses if
+
there is no table name.
+
+
o Standards.UUID
+
+
Functions new() and new_string() have been removed. Use
+
make_version1(-1)->encode() and make_version1(-1)->str() instead.
+
+
o Stdio
+
+
The functions read_file(), read_bytes(), write_file() and
+
append_file() now always throw errors on error conditions,
+
to allow easier use as errno doesn't have to be checked.
+
read_file() and read_bytes() still return 0 if the file
+
does not exist.
+
+
o The modules Mird, Perl and Ssleay have been removed.
+
+
Note that these modules are not available via the backwards
+
compatibility layer.
+
+
+
C level module API
+
------------------
+
+
o Improved support for embedding.
+
+
Several declarations and definitions (most notably the debug and
+
runtime flags) have moved from main.h to pike_embed.h, in an attempt
+
to add support for embedding.
+
+
o Major compiler API cleanups.
+
+
The Pike compiler is now executing in a pike function context
+
(rather than in an efun context), and it is possible to customize
+
some of its behaviour via inherit (rather than via handler objects).
+
As a consequence the compiler is now much closer to being thread-safe.
+
+
o The global variable next_timeout is no more. It has been replaced by
+
a backend-specific variable. Added backend_lower_timeout() for accessing
+
the new variable. This fixes issues GTK, GTK2 and sendfile had with the
+
new backend implementation.
+
+
NOTE! C-API incompatibility!
+
NOTE! Changed the argument for backend callbacks!
+
+
The argument is now a struct Backend_struct * when called
+
at entry (was NULL).
+
The argument is now NULL when called at exit (was 1).
+
+
o Pike_fp->context
+
+
Pike_fp->context is now a pointer to the current struct inherit
+
rather than a copy of it. This allows for easier access to
+
inherited symbols in C-code.
+
+
o Inherit level argument added to several object handling functions.
+
+
In order to implement subtyping of objects, an extra argument
+
"inherit_level" has been added to many object indexing related
+
functions.
+
+
o .cmod:
+
+
Voidable pointer types are no longer promoted to mixed.
+
+
o Support for class symbols with storage in parent scope.
+
Also added support for aliased symbols.
+
+
o Machine code backend for PPC64
+
+
- Machine code generation is now supported for PowerPC in
+
64-bit ABI mode.
+
+
o Objectiv-C embedding framwork
+
+
- Experimental support for interfacing with Objective-C code
+
has been added.
+
+
NOTE! This API is experimental and is subject to change
+
NOTE! without notice.
+
+
o Added %c and %C to get_all_args to get char * without
+
NUL characters (no 0 valued characters inside the string).
+
+
%c: char * Only narrow (8 bit) strings without NUL.
+
This is identical to %s.
+
+
%C: char * or NULL Only narrow (8 bit) strings without NUL, or 0
+
+
+
Building and installing
+
-----------------------
+
+
o Dynamic modules now become DLLs on Windows.
+
+
This means the homegrown module loader is no longer used, but it
+
also means some DLL limitations:
+
+
- PMOD_EXPORT is now required to allow access to an identifier in
+
the pike core.
+
+
- DLLs have to be recompiled too if pike.exe is recompiled.
+
+
The primary motivation for this change is to work with the new
+
library tracking (so-called "side-by-side assemblies") in Visual C++
+
2005 and later.
+
+
o Added ABI selection.
+
+
It's now possible to select whether to compile in 32bit or 64bit
+
mode at configure time by using the --with-abi option.
+
+
o MinGW builds.
+
+
It's now possible to build Pike in MinGW on windows computers from
+
source distributions.
+
+
o Cmod precompiler.
+
+
- The cmod precompiler (pike -x precompile) now supports declaring
+
all autogenerated identifiers as static.
+
+
NOTE! C-API incompatibility!
+
NOTE! As a side effect of this change, the DECLARATIONS statement
+
NOTE! now required in cmod files.
+
+
+
New simplified method to write external C/C++ modules
+
-----------------------------------------------------
+
+
It's now suggested that you do not use the fairly complex 'pike
+
internal' style of external modules (configure.in with
+
AC_MODULE_INIT etc).
+
+
It's also no longer required that you have a configure script to use
+
pike -x module.
+
+
Instead simply locate the includefiles using 'pike -x cflags', and
+
convert .cmod to .c files using 'pike -x precompile'.
+
+
An example rather minimal 'pike -x module' compatible Makefile,
+
without a configure script, using .cmod format files for a simple
+
local module:
+
+
| CC=gcc
+
| CFLAGS := -O9 -fweb -shared -Wall $(CFLAGS) $(shell $(PIKE) -x cflags) -g
+
| LD=$(CC) -shared -lGL
+
|
+
| all: Spike.so
+
|
+
| install: Spike.so
+
| cp $< $(MODULE_INSTALL_DIR)
+
|
+
| Spike.so: Spike.o
+
| $(LD) -o Spike.so Spike.o $(LDFLAGS)
+
|
+
| Spike.o: Spike.c
+
|
+
| Spike.c: Spike.cmod
+
| $(PIKE) -x precompile $< > $@
+
+
It's usually OK not to use pike -x module at all, but it will pass
+
on a few extra variables to your make (and configure script):
+
+
PIKE: How to start the pike interpreter used running pike -x module
+
MODULE_INSTALL_DIR: Where modules goes
+
LOCAL_MODULE_PATH: Alternative (user local) module location
Newline at end of file added.