pike.git/
CHANGES
Branch:
Tag:
Non-build tags
All tags
No tags
2014-12-04
2014-12-04 19:24:38 by Per Hedbor <ph@opera.com>
c81bac1e6e8fb227f6b1cdc48046ac1ba3f758fb (
1970
lines) (+
15
/-
1955
)
[
Show
|
Annotate
]
Branch:
bill/master_archive_support
Removed pre 7.9 changes. Added some more changes.
312:
aren't enumerable, since these will generate random failures if the code is read from a dump.
+
o strlen() now only accepts strings
-
+
Removed features and modules ----------------------------
581:
Return the current 1, 5 and 15 minute system load averages as an array.
+
o access()
+
+
Check if a file exist and can also return if it is readable and or
+
writeable for the current process.
+
o glob() The glob function has been extended to accept an array of globs as
897:
o Several OS/2 and windows compilation fixes
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
> snip
-
> snip
-
> snip
-
> snip
-
> snip
-
> snip
-
> snip
-
> snip
-
> s
-
-
-
-
-
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
Lots
of
bug
fixes
+
-----------------
-
Changes
since
Pike
7.8.352
(third
7.8
release):
-
----------------------------------------------------------------------
+
o
Fixed
symbol
resolution
with
deep
inherits and mixins
-
Extensions
and
New
Functions
-
----------------------------
+
o
Fixed
PNG
4bpl indexed mode with alpha
-
o
Added
module
Search.
-
FIXME:
Needs
a couple of paragraphs of description.
+
o
The
_sprintf
LFUN
now
works
with
%F
-
o
has_prefix
now
works
on
objects.
+
o
A
lot
more,
see
the (more or less) full changelog for more info:
-
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
+
http://pike
-librarian
.
lysator
.liu.se/
index
.xml
?m=
pike.git
&
start=
forever&branch
=7.
9
&
template
=
logonly
.
inc