pike.git / CHANGES

version» Context lines:

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.