Branch: Tag:

2014-10-03

2014-10-03 13:38:45 by Per Hedbor <ph@opera.com>

No changes for 8.1 yet

1: - Pike 8: Changes since Pike 7.8 (scratch area for future release notes) + Pike 8.1: Changes since Pike 8.0 (scratch area for future release notes)   ----------------------------------------------------------------------    -  - New language features - --------------------- -  - o Added a way to access the local, and not the overloaded, -  implementation of a symbol. -  -  As an example, given the classes: -  | class Test -  | { -  | int a( ) { return 1; } -  | int b( ) { return local::a(); } // New -  | int c( ) { return a(); } -  | } -  | -  | class Test2 -  | { -  | int a() { return 42; } -  | } -  -  Both Test()->b() and Test2()->b() will return 1, but Test2()->a() -  and Test2()->c() will return 42. -  - o Added new syntax that can be used to return the current object as if -  it was a class it is inheriting -  -  The syntax is X::this, where X is the inherited class. -  -  The returned object will not include any symbols not available in -  the class X, but your overloaded methods (and other identifiers) -  will be the ones returned when the object is indexed. -  - o Added a way to easily inherit the implementation of a subclass in an -  inheriting class. -  -  | inherit ::this_program -  -  The syntax refers to the previous definition of the current class -  in the inherited class, and is typically used with inherit like: -  -  | inherit Foo; -  | -  | // Override the Bar inherited from Foo. -  | class Bar { -  | // The new Bar is based on the implementation of Bar in Foo. -  | inherit ::this_program; -  | // ... -  | } -  - o Added new syntax for referring to and naming inherits. -  -  | inherit "foo.pike"; -  | inherit "foo/bar/baz.pike" : "foo/bar"; -  | // ... -  | "foo.pike"::foo(); -  | "foo/bar"::baz(); -  - o Lookup of named inherits now also looks in indirect inherits. -  -  | class A { int fun() {} } -  | class B { inherit A; } -  | class C { -  | inherit B; -  | // ... -  | // The function fun may here be referred to as any of: -  | B::A::fun(); -  | B::fun(); -  | A::fun(); // New. -  - o Implemented the variant keyword. -  -  The keyword was present before, but did not actually do anything -  useful. -  -  This is used to do function overloading based on the argument types. -  -  As an example: -  | class Test1 { int b(); } -  | class Test2 { int a(); } -  | -  | class Foo -  | { -  | variant string foo( object q ){ return "Genericfoo"; } -  | variant string foo( Test1 x ) { return "Test 1"; } -  | variant string foo( Test2 x ) { return "Test 2"; } -  | -  | variant string bar( int(0..0) s ) { return "0"; } -  | variant float bar( int(1..1) s ) { return 1.0; } -  | variant int bar( int(2..2) s ) { return 2; } -  | } -  -  A common use-case is functions that return different types depending -  on the arguments, such as getenv: -  -  | string|mapping(string:string) getenv( string|void variable ); -  -  can now be rewritten as -  -  | variant string getenv( string variable ); -  | variant mapping(string:string) getenv( ); -  -  which gives significantly better type-checking. -  - o The type-checker has been rewritten. -  -  Mainly it is now much better at finding type errors, and most error -  messages are more readable. -  - o Allow '.' to be used as an index operator in the few places it did -  not work before. -  - o "Safe" index -  -  Copied from a popular extension to other C-like languages. -  -  X[?ind] is equivalent to ((auto _ = X),(_ && _[ind])) -  while X?->ind is equivalent to ((auto _ = X),(_ && _->ind)) -  -  The main use is 'deep indexing' where some elements can be 0: -  -  | request_id?->user?->misc?->x -  -  vs -  -  | request_id && request_id->user && request_id->user->misc -  | && request_id->user->misc->x -  - o Added the '?:' operator for compatibility with other C-like -  languages. It is identical to '||' in pike. -  - o The && operator changed, when doing A && B, and A is false, keep A -  instead of returning 0. -  -  This is especially useful then A is not actually 0, but an object -  that evaluates to false, or UNDEFINED. -  - o Fixed symbol resolution with deep inherits and mixins. -  - o Added multi-character character constants. -  -  'ILBM' is equivalent to (('I'<<24)|('L'<<16)|('B'<<8)|'M'). -  -  Unlike how it works in some C compilers the native byte order is -  never relevant. -  - o Added new syntax for literal-string constants -  -  #{, #( and #[ starts a literal string, and it is ended by the -  corresponding end marker: #}, #) and #] respectively. -  -  No character is modified at all inside the literal string, including -  newlines, \ " and '. -  -  So, the string #["\n\'##] will be equivalent to "\"\\n\\'#". -  -  The main use-case is to write code in code: -  -  | string code = #[ -  | void main(int c, array v) { -  | string x = ""; -  | foreach( v[1..], string elm ) -  | x += reverse(elm)+","; -  | write("Testing: %s\n", reverse( x )); -  | #]; -  -  The three different start/end markers might be useful if you write -  code in code in code, since there is no way to quote the start/end -  markers. -  - o Added a shorthand syntax for integer rages: xbit, where x is a -  number between 1 and 31. This can be used as an example to indicate -  that a string is 8 bits wide only: string(8bit) -  -  This is equivalent to the range (0..255) but can be easier to parse. -  -  Similarly int(1bit) is an alias for 'bool', and int(12bit) is -  the same as int(0..4095). -  -  - o 'this::x' is now equivalent to 'this_program::x' -- access the -  identifier x in the current object. -  -  - New preprocessor features - ------------------------- -  - o Support for the ", ##__VA_ARGS__" cpp feature. -  -  This makes the ‘##’ token paste operator have a special meaning -  when placed between a comma and a variable argument. If you write -  -  | #define err(format, ...) f(debug)werror("ERROR: "+format, ##__VA_ARGS__) -  -  and the variable argument is left out when the err macro is used, -  then the comma before the ‘##’ will be deleted. This does not -  happen if you pass an empty argument, nor does it happen if the -  token preceding ‘##’ is anything other than a comma. -  - o The define __COUNTER__ has been added. It is a unique integer -  value, the first time the macro is expanded it will be 1, the next time -  2 etc. -  - o The preprocessor can now be run with a cpp prefix feature. -  -  This is currently used by the precompiler to avoid two levels of -  preprocessing, one using "#cmod_" as the prefix and the other "#". -  - o Dynamic macros -  -  You can now add programmatic macros. There is currently no syntax -  that can be used to define these while compiling code, but you can -  add them from one program before compiling plug-ins/modules. -  -  The main use is macros like DEBUG(...) and IFDEBUG() that would -  expand to something if a debug setting is enabled in the module but -  nothing otherwise, or, to take an actual example from the Opera -  Mini source code: -  -  | add_predefine( "METRIC()", -  | lambda( string name, string ... code ) -  | { -  | string type = type_of( code ); -  | string aggregate = aggregate_of( code ); -  | string format = format_of( code ); -  | code -= ({ 0 }); -  | return replace( base_metric_class, -  | (["ID":(string)next_metric_id++, -  | "NAME":stringify(name), -  | "TYPE":type, -  | "AGGREGATE":aggregate, -  | "FORMAT":format, -  | "CODE":make_value_function(code), -  | ])); -  | }); -  -  -  That is, a macro that needs does some calculations, and rewrite the -  code more than is possible in normal macros.. -  -  This one expands something along the lines of -  -  | METRIC("requests", Summarize, PerSecond, -  | floating_average_diff(requests)); -  -  into -  -  | class Metric_requests_01 -  | { -  | inherit Server.Metric; -  | constant name = "transcoder:requests"; -  | constant type = Float; -  | constant format = PerSecond; -  | constant aggregate = Summarize; -  | -  | float value() { -  | return floating_average_diff(requests); -  | } -  | } -  - o Dependency declarations -  -  It is now possible to use the CPP directive #require to specify a -  condition that must be true for the file to be seen by the resolver. -  This would typically be the inherited C part of a module or a system -  call. -  -  | #require constant(__WebKit) -  | inherit __WebKit; -  -  - Optimizations - ------------- -  - o New significantly faster block allocator -  -  The free in the old one was O(n^2), which means that as an example -  creating a lot of objects and then free:ing them mainly used CPU in -  the block allocator. -  -  This fix changed the ordo of one of the tests that did that very -  thing (binarytrees) from O(n^2) to O(n), and as such is more than a -  simple percentual speedup in some cases, but it always improves the -  performance some since the base speed is also faster. -  - o Power-of-two hashtables are now used for most hashtables -  -  This speeds up mappings and other hashtables a few percent, and also -  simplifies the code. -  - o Significantly changed x86-32 and an entirely new AMD64/x86-64 -  machine-code compilation backend -  -  The main feature with the x86-32 edition is that it is now using -  normal function call mechanics, which means that it now works with -  modern GCC:s. -  -  The x86-64 backends has been rewritten so that it is easier to add -  new instructions (x86-64) and opcodes (pike) to it, and it is -  significantly more complete than the x86-32 one. -  - o Svalue type renumbering -  -  PIKE_T_INT is now type #0, which makes certain things significantly -  faster. -  -  As an example, clearing of object variables is now done -  automatically when the object is created since all object memory is -  set to 0. -  -  The same thing happens when clearing values on the stack. -  - o Svalue type/subtype setting changed -  -  This halves the number of instructions used to push a value on the -  stack in most cases. -  -  The speedup is not large, but noticeable. -  - o And on a related note, we now lie to the compiler about the -  const:ness of the Pike_interpreter_pointer variable. -  -  This significantly simplifies the code generated by the C-compiler -  for stack manipulation functions, the stack pointer is now only -  loaded once per code block, instead of once per stack operation. -  -  This saves a lot of code when using the stack multiple times in a -  function, and should be safe enough, albeit somewhat unconventional. -  -  If nothing else the binary size shrunk by about 5%. -  - o string(x..y) (constant) types -  -  The strings now keep track of the min/max values in addition to two -  new flags: all-uppercase and all-lowercase. -  -  | > typeof("foo"); -  | (1) Result: string(102..111) -  -  This is used to optimize certain operations, -  lower_case, upper_case, search and string_has_null for now. -  It could be added to other places in the future as well. -  -  The fairly common case where you are doing lower_case or upper_case -  on an already lower or uppercase strings is now significantly -  faster. -  - o Several other optimizations to execution speed has been done -  -  + object indexing (cache, generic speedups) -  -  + lower_apply, changes to apply in general -  Taken together these individually small optimizations speeds up at -  least pike -x benchmark more than 5%. -  -  + A lot of opcodes implemented in machine-code for x86-64 -  This speed up the loop benchmarks close to a factor of 3. But then -  again, most real code is nothing like that benchmark. -  -  + Several new opcodes added -  As an example an observation was that most branch_if_zero is -  followed by an is_eq, is_lt or is_gt or similar. Those opcodes -  always return 1 or 0. So, two new opcodes, quick_branch_if_zero -  and quick_branch_if_non_zero were added that map directly to three -  x86-64 opcodes, there is no need to check the types, do a real -  pop_stack etc. -  -  + Demacroified some code, resulting in smaller code-size -  -  This makes things faster, it is often better to branch to a small -  block of code than to have it inlined in a lot of different -  locations on modern architectures. -  - o Faster hash-function for strings -  -  + Also siphash24 was added and is used in case the string hash table -  becomes inefficient -  -  - Deprecated features and modules - ------------------------------- -  - o Tools.PEM and Tools.X409 deprecated -  -  Use the corresponding modules in Standards. -  - o The built in sandbox is now deprecated -  -  Unless somebody wants to take ownership of the feature and keep it -  up to date the security system will be removed in the next stable -  release. -  - o The compiler now warns about switch statements where the cases -  aren't enumerable, since these will generate random failures -  if the code is read from a dump. -  - o strlen() now only accepts strings -  - o Gdbm.gdbm is now known as Gdbm.DB -  - o Yabu.db and Yabu.table renamed to Yabu.DB and Yabu.Table -  - o The keyword 'static' will now generate deprecation warnings. -  -  - Removed features and modules - ---------------------------- -  - o Removed facets -  -  The optional (and not enabled by default) support for facet classes -  has been removed, since it was only partially done and not really -  used. -  - o It is no longer possible to compile pike without libgmp. -  -  Bignums are now a required language feature -  - o The old low-level 'files' module has been renamed to _Stdio -  - o 'GTK' is now GTK2, not GTK1 unless the system has no GTK2 support. -  - o Locale.Charset -  -  The charset module is now available on the top level as 'Charset' -  - o The ancient syntax for arrays (string * was an alias for -  array(string)) has now been removed completely. -  - o Compatibility for pike versions before 7.6 is no longer available. -  - o decode_value can no longer decode programs using the 'old style' -  program encoding. -  -  Since the format has been deprecated since feb 2003, and those -  programs could not be decoded anyway due to other issues it is not -  much of a loss. -  -  - New modules - ----------- -  - o Pike.Watchdog -  -  A Watchdog that ensures that the process is not hung for an extended -  period of time. The definition of 'hung' is: Has not used the -  default backend. -  -  To use it simply keep an instance of the watchdog around in your -  application: -  -  | Pike.Watchdog x = Pike.Watchdog( 5 ); // max 5s blocking -  -  An important and useful side-effect of this class is that the -  process will start to respond to kill -QUIT by printing a lot of -  debug information to stderr, including memory usage, and if pike is -  compiled with profiling, the CPU used since the last time kill -QUIT -  was called. -  - o Crypto.Password -  -  A module that can be used to verify and create passwd/ldap style -  password hashes. -  -  It tries to support most common password hashing schemes. -  - o Debug.Profiling -  -  Tools useful for collecting and format for output the profiling -  information generated when pike is compiled --with-profiling. -  - o NetUtils -  -  This module contains a lot of functions useful for the storage and -  processing of network addresses, it supports IPv4 and IPv6. -  - 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 Standards.BSON -  -  A new module for working with BSON serialized data. -  See http://bsonspec.org/ -  - o Geography.GeoIP -  -  Does geolocation of IPv4-numbers using databases from maxmind.com -  or software77.net -  - o Protocols.WebSocket -  -  An implementation of the WebSocket (RFC 6455) standard, both server -  and client -  - o Image.WebP -  -  Encoder and decoder for the WEBP image format. -  More information about the format can be found on -  https://developers.google.com/speed/webp/ -  - o Serializer -  -  APIs useful to simplify serialization and deserialization of -  objects Mainly it allows you to easily iterate over the object -  variables, including the private ones. -  -  + Serializer.Encodable -  A class that can be inherit to make an object easily serializable -  using encode_value. -  - o Filesystem.Monitor and the low level System.Inotify + System.FSEvents -  -  Basic filesystem monitoring. -  -  This module is intended to be used for incremental scanning of a -  filesystem. -  -  Supports FSEvents on MacOS X and Inotify on Linux to provide low -  overhead monitoring; other systems currently use a less efficient -  polling approach. -  - o Mysql.SqlTable -  -  This class provides some abstractions on top of an SQL table. -  -  At the core it is generic for any SQL database, but the current -  implementation is MySQL specific on some points, notably the -  semantics of AUTO_INCREMENT, the quoting method, knowledge about -  column types, and some conversion functions. Hence the location in -  the Mysql module. -  -  Among other things, this class handles some convenient conversions -  between SQL and pike data types -  - o Parser.CSV -  -  This is a parser for line oriented data that is either comma, -  semi-colon or tab separated. It extends the functionality -  of the Parser.Tabular with some specific functionality related -  to a header and record oriented parsing of huge datasets. -  - o ZXID -  -  ZXID is a library that implements SAML 2.0, Liberty ID-WSF 2.0 -  and XACML 2.0. -  -  This module implements a wrapper for ZXID. The interface is similar -  to the C one, but using generally accepted Pike syntax. -  - o Git -  -  A module for interacting with the Git distributed version control -  system. -  - o Val -  -  This module contains special values used by various modules, e.g. -  a Val.null value used both by Sql and Standards.JSON. -  -  In many ways these values should be considered constant, but it is -  possible for a program to replace them with extended versions, -  provided they don't break the behavior of the base classes defined -  here. Since there is no good mechanism to handle such extending in -  several steps, pike libraries should preferably ensure that the -  base classes defined here provide required functionality directly. -  - o __builtin -  -  The __builtin module is now a directory module, so that it can provide -  a suitable namespace for code written in Pike intended for being -  inherited from modules written in C (cf precompile). -  -  - Extensions and new functions - ---------------------------- -  - o Bz2.File added -  -  It implements a Stdio.File like API, including support for the same -  iterator API that Stdio.File has, allowing for convenient line -  iterations over BZ2 compressed files. -  -  | foreach( Bz2.File("log.bz2")->line_iterator(); int n; string line ) -  - o Both sscanf and sprintf can now handle binary floats in little endian format -  -  %-8F would be a 64 bit IEEE float binary value in little endian order. -  - o Image.JPEG -  -  + decode now supports basic CMYK/YCCK support -  -  + exif_decode is a new function that will rotate the image -  according to exif information -  - o Image.BMP now supports some more BMP:s. -  -  + Added support for vertical mirroring (images starting at the -  bottom left) -  -  + Added support for 32-bit (non-alpha) BMP:s. -  - o String.Buffer -  -  It is possible to add sprintf-formatted data to a String.Buffer -  object by calling the sprintf() method. This function works just as -  the normal sprintf(), but writes to the buffer instead. -  - o String.range(str) -  -  This returns the minimum and maximum character value in the string. -  -  The precision is only 8 bits, so for wide strings only character -  blocks are known. -  - o String.filter_non_unicode(str) -  -  This function replaces all non-unicode characters in a pike string -  with 0xfffd. -  - o SDL.Music added to SDL. -  -  Allows the playback of audio/music files. -  Requires the SDL_mixed library. -  - o System.TM -  -  Low-level wrapper for struct tm. -  -  This can be used to do (very) simple calendar operations. It is, -  as it stands, not 100% correct unless the local time is set to -  GMT, and does mirror functionality already available in gmtime() -  and localtime() and friends, but in a (perhaps) easier to use API. -  - o decode_value now throws the error object Error.DecodeError. -  -  Useful to catch format errors in the decode string. -  - o Process.daemon -  -  The daemon() function is for programs wishing to detach themselves -  from the controlling terminal and run in the background as system -  daemons. -  - o Debug.pp_object_usage() -  -  Pretty-print debug information, useful to get debug information -  about object counts and memory usage in pike applications. -  -  Uses the new _object_size lfun, if present in objects, to account -  for RAM-usage in C-objects that allocate their own memory. -  - o Mysql -  -  + Added support more modern client libraries (incl. MariaDB) -  -  + Mysql.mysql now has methods to query the id or SQLSTATE of the -  last error. -  - o Protocols.DNS -  -  + Prevent endless loops in maliciously crafted domain names. -  -  + Add QTYPE T_ANY to DNS enum EntryType in DNS.pmod. -  -  + Handle truncated labels -  -  + TCP client and server support -  - o Thread no longer inherits Thread.Thread (aka thread_create) -  - o Thread.Farm now might work -  - o Cmod precompiler. -  -  + inherit "identifier" -  -- inherit the program returned by calling master()->resolve() on -  the specified identifier. Useful to inherit code written in pike. -  - o String.levenshtein_distance() -  -  The function calculates the Levenshtein distance between two -  strings. The Levenshtein distance describes the minimum number of -  edit operations (insert, delete or substitute a character) to get -  from one string to the other. -  -  This can be used in approximate string matching to find matches -  for a short string in many longer texts, when a small number of -  differences is expected. -  - o System.sync() -  -  Synchronizes the filesystem on systems where this is possible -  (currently windows and UNIX-like systems). -  - o System.getloadavg() -  -  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 -  the first (glob pattern) argument. -  -  In this case, if any of the given patterns match the function will -  return true, or, if the second argument is also an array, all -  entries that match any glob in the first array. -  - o Stdio.UDP(): -  -  + added IPv6 multicast support -  -  + added set_buffer -  - o Added client and server support for TCP_FASTCONNECT -  -  To connect using this TCP extension simply pass the data as the -  fifth argument to connect. -  -  The server support is automatically enabled if possible when a -  Stdio.Port object is bound to a port. -  - o Stdio.File(): -  -  + send_fd and receive_fd -  These functions can be used to send and receive an open -  file-descriptor over another file-descriptor. The functions are -  only available on some systems, and they generally only work -  when the file the descriptors are sent over is a UNIX domain -  socket or a pipe. -  -  + Changed internally to remove one level of indirection. -  The Stdio.File object no longer has a _Stdio.Fd_ref in _fd. They -  are instead directly inheriting _Stdio.FD. -  -  _fd is still available for compatibility, but internally it is gone. -  -  + Fixed grantpt() on Solaris failing with EPERM. -  - o Unicode databases updated to 7.0.0 from 5.1.0 -  -  This is the latest released Unicode database from unicode.org. -  - o The Search search engine module has seen several fixes -  -  + Added support for padded blobs. This improves performance when -  incrementally growing blobs. This feature is only enabled if -  Search.Process.Compactor says this is OK, see the documentation -  for more information. -  -  + Several locking optimizations, specifically, avoid locking and -  unlocking for every single iteration when merging and syncing -  blobs. -  -  + Charset conversion fixes -  -  + Fixes for queries where the same world occur multiple times -  ('foo and bar and foo') -  - o pike -x benchmark -  -  + Output format changed -  -  + Also added support for JSON output. -  -  + The results should be more consistent. -  -  + Added options to allow comparison with a previous run. -  - o New stand-alone tools added to make it possible to build -  documentation without the pike build tree -  -  + autodoc_to_html -  AutoDoc XML to HTML converter. -  -  + autodoc_to_split_html -  AutoDoc XML to splitted HTML converter. -  -  + git_export_autodoc -  Exports a stream of autodoc.xml suitable for git-fast-import. -  Used on pike-librarian. -  - o Readline tries to set the charset to the terminal charset -  -  This makes it possible to write non-7bit characters on a terminal -  if the terminal supports it. -  - o Fixed units in pike --help=kladdkaka -  - o Several changes has been done to the GTK2 module -  -  + GTK2.DrawingArea no longer crash in draw_text if you pass odd parameters. -  -  + draw_pixbuf can now be passed width and height -1, which makes it -  take the size from the passed image. -  -  + GDKEvent no longer crash when you extract strings from them -  -  + accelerators now work -  -  + Fixed RadioToolButton -  -  + signal_connect can now connect a signal in front of the list -  -  + Several fixes to Tree related objects -  -  + GTK2.SourceView added -  -  + GTK2.Spinner added -  - o A few issues were fixed that were found by Coverity -  -  + Fixed memory leak in Math.Transform -  -  + Fixed two compares that were written as assignments (errno -  checks for EINTR for sockets) -  - o System.get_home + System.get_user -  -  (mostly) Cross-platform ways to get the user name and home directory. -  - o System.AllocConsole, System.FreeConsole and System.AttachConsole for NT -  -  These are useful to create or close the console window that is -  shown for pike programs. -  - o Process - forkd -  -  Forkd can be used to more cheaply create new processes on UNIX like -  systems. -  -  This is done by first starting a sub-process that is then used to -  create new processes. -  -  If your main process is large, this is significantly faster than -  using the normal create_process, and does not risk running out of -  memory for the forked (temporary) copy of the main process that is -  created. -  - o MacOSX CoreFoundation support in the backend -  -  This makes it somewhat more likely that native libraries can work -  with pike. -  - o Better IPv6 support. -  -  This includes detection of IPV6 mapped IPV4 addresses -  (::FFFF:i.p.v.4) and full support for IPv6 in the UDP -  code. -  - o Asynchronous Protocols.SNMP client -  - o Fixes to Process.run, Process.spawn_pike and friends. -  -  + Support OS/2 path conventions -  -  + Fixed multiple issues with search_path()/locate_binary() -  - locate_binary() is now more reliable on Windows -  - Now invalidates the cached path is PATH is changed -  - Uses locate_binary to scan the path -  - spawn_pike() now uses search_path() -  -  + You can now optionally have System.spawn_pike pass predefines, -  program and include path to the spawned pike, in addition to the -  module path. -  - o Lots of autodoc fixes -  -  A lot more of the previously existing, but broken, documentation is -  now readable. -  - o predef::types -  -  This is equivalent to values and indices, but instead gives the -  types for each value. -  -  Basically only useful for objects. -  - o Builtin._get_setter -  -  This function returns a setter for a variable in an object. -  The setter, when called, will set the variable value to the passed -  argument. -  - o Parser.XML.Tree fixes -  -  + Several namespace improvement and handling fixes -  - o New charsets -  -  A lot of ISO-IR charsets added: -  9-1, 9-2, 31, 232, 234, 231 (aka ANSI/NISO Z39.46, aka ANSEL) 230 -  (aka TDS 565) 225 (SR 14111:1998), 197/209 (sami) 208 (IS 434:1997) -  207 (IS 433:1996), 204,205 and 206 (aka 8859-1, 8859-4 and 8859-13 -  with euro) 201, 200, 138 (ECMA-121) 198 (ISO 8859-8:1999) 182, 181, -  189 (TCVN 5712:1993, aka VSCII) 167, 166 (aka TIS 620-2533 (1990)), -  164, 160, 151 (NC 99-10:81), 68 (APL), 59 (CODAR-U), 202 (KPS -  9566-97). Fixed CSA_Z242.4 -  - o Several fixes to Protocols.HTTP -  -  + Improved Protocols.HTTP.Query.PseudoFile -  (significantly better Stdio.Stream simulation) -  -  + Do not use hard coded Linux errno:s -  -  + Case insensitive handling of header overrides in do_method -  -  + Fixed broken check for URL passwords when querying -  -  + Add more descriptive HTTP responses along with a mostly complete -  list of codes -  -  + Handle non-standards compliant relative redirects -  -  + Cleaner handling of async DNS failures -  -  + Handle chunked transfer encoding correctly when doing async -  queries -  -  + Fixes for the proxy client support -  -  + Several keep-alive handling fixes -  -  + Server: -  - More forgiving MIME parsing for MSIE -  - Fixed range header handling -  - Fixed parsing of broken multipart/form-data data -  - Added optional error_callback to attach_fd -  - The response processor (response_and_finish) now treats the -  reply mapping as read-only. -  - Support if-none-match (etag:s) -  - Ignore errors in close when destroying the object -  - o Multiple threads can now call the Backend `() function (the function -  that waits for events). -  -  The first thread will be the controlling thread, and all callbacks -  will be called in it, the other threads will wake when the -  controlling thread is done. -  - o dtrace support (on MacOSX) -  -  Pike now supports dtrace events on function enter and leaving (and -  when stack frames are notionally popped, for functions doing -  tailrecursion). -  - o sizeof() now supports ADT.struct. -  - o Standards.JSON.encode can now get the initial indentation level -  specified. -  -  This is rather useful for recursive calls encode in pretty print -  mode (common for objects with encode_json methods). -  - o Added Pike.identify_cycle(x) -  -  Checks to see if x contains any circular structures. -  -  This can be useful while optimizing to identify reference cycles in -  Pike data structures, so that the need for garbage collection can be -  reduced. -  - o Most math functions (log, pow, exp sin, cos etc) can now take -  integers as arguments in addition to a floating point number. -  -  The result will still be a float, the argument will be converted. -  - o The random(), random_string() and random_seed() might be more random -  -  On computers with a hardware pseudo random generator random() can -  return significantly more random numbers, however, this means that -  random_seed is a no-op on those machines. -  -  A side-effect of this is that random_string is now actually -  significantly faster on at least x86 cpu:s with rdrnd. -  -  Note: If you want cryptographically random data please use -  Crypto.Random.random_string unless you know for sure the random data -  returned by the RDRND instruction is random enough. -  -  - SSL - --- -  - o SSL now supports TLS 1.0 (SSL 3.1), TLS 1.1 and TLS 1.2. -  - o Several identifiers have changed names: -  -  SSL.alert -> SSL.Alert -  SSL.connection + SSL.handshake -> SSL.{Client,Server,}Connection -  SSL.context -> SSL.Context -  SSL.packet -> SSL.Packet -  SSL.session -> SSL.Session -  SSL.sslfile -> SSL.File -  SSL.sslport -> SSL.Port -  SSL.state -> SSL.State -  - o SSL.File: Changed client/server selection API. -  -  Client and server operation is now selected by calling either -  connect() (client-side) or accept() (server-side) after creating -  the SSL.File object. -  -  Blocking handshaking mode is selected by calling set_blocking() -  before either of the above. -  - o SSL.File: Redesigned I/O state machine. -  -  This reduces the complexity and risk of bugs in the I/O handling. -  - o SSL support for lots of new cipher suites added: -  -  + AEADs and modes: -  -  - CCM and CCM-8 -  -  - CHACH20-POLY1305 -  -  - GCM -  -  + Certificates -  -  - ECDSA -  -  + Ciphers -  -  - AES and AES-256 -  -  - CAMELLIA and CAMELLIA-256 -  -  + Key exchange methods -  -  - DH and DHE -  -  - ECDH and ECDHE -  -  + All suites currently defined consisting of combinations of the above -  (and earlier existing) have been added (~190 suites in total). -  - o TLS Extensions added: -  -  + ALPN (Application Layer Protocol Negotiation) (RFC 7301). -  -  + EC Point Formats (RFC 4492). -  -  + Elliptic Curves (RFC 4492). -  -  + Encrypt then MAC. -  -  + Fallback SCSV. -  -  + Heartbeat (RFC 6520). -  -  + Max Fragment Length (RFC 6066). -  -  + Padding. -  -  + Renegotiation info (RFC 5746). -  -  + Signature Algorithms (RFC 5246). -  -  + SNI (Server Name Indicator) for both client and server (RFC 6066). -  -  + Truncated HMAC (RFC 6066). -  - o Improved protection against various SSL/TLS attacks: -  -  + BEAST protection (aka 1/(n-1)). -  -  Improve resilience against the BEAST client-side attack, -  by splitting the first data packet into two, where the -  first only contains a single byte of payload. -  -  + Heartbleed protection. -  -  The protocol code now probes the peer for the Heartbleed vulnerability, -  and aborts the connection with ALERT_insufficient_protection if so. -  -  + Lucky 13 protection. -  -  Attempts to have HMAC calculation take the same amount of time -  regardless of padding size. -  - o SSL.Context: Improved cipher suite selection: -  -  + Filtering of weak cipher suites. -  -  + Suite B (RFC 6460). -  - o SSL.Context: Support multiple concurrent certificates. -  -  This allows a server to eg have both an RSA and an ECDSA certificate. -  -  - Crypto and Nettle - ----------------- -  - o Nettle refactored -  -  CBC cipher mode is now twice as fast. -  - o Nettle 3.0 supported. -  -  The new APIs in Nettle 3.0 are now detected and utilized. -  - o Crypto.GCM -  -  GCM (Galois Counter Mode) cipher mode added. -  - o Blowfish and Serpent support fixed in Nettle -  - o Crypto.PGP -  -  Added support for SHA256, SHA384 and SHA512 as hash functions. -  Expose the used hash and key types in the out data -  - o Crypto.Arctwo -  -  The 1-128 bit cipher Arctwo is now provided as a block cipher in -  Crypto. This cipher is only intended for compatibility with OLD -  third party code, and should NOT be used for new development. -  - o Crypto.Camellia -  -  The 128/256 bit cipher Camellia is now available as block cipher in -  Crypto. -  - * Crypto.ECC -  -  Elliptic Curve operations are now supported when compiled -  with Nettle 3.0 or later. -  - o Crypto.SALSA20 and Crypto.SALSA20R12 -  -  The 128/256 bit cipher SALSA20 is now available as a stream cipher -  in Crypto. SALSA20R12 is SALSA20 reduced to just 12 rounds. -  - o Crypto.SHA3_224, Crypto.SHA3_256, Crypto.SHA3_384 and Crypto.SHA3_512 -  -  The SHA-3 secure hash algorithm has been added in multiple variants. -  - o Crypto.GOST94 and RIPEMD160 -  -  The lesser used hash functions GOST R 34.11-94 (RFC 4357) and -  RIPEMD160 have been added. -  - o Crypto.RSA and Crypto.DSA -  -  The key generation for RSA and DSA are now done by Nettle. This -  results in 90% faster key generation for RSA. Key generation for DSA -  is 10 times slower, but produces better quality keys. -  - o Crypto.Hash -  -  Added support for pbkdf1 from PKCS#5v1.5 and pbkdf2 from PKCS#5v2.0. -  - o Standards.PEM -  -  + Added some support for encrypted PEM files -  - o Standards.X509 -  -  X509 was moved from Tools to Standards and has been refactored and -  bug fixed. It is now possible to extend both validation and creation -  of certificates with new cipher and hash algorithms. A range of new -  algorithms are supported for both RSA and DSA: -  -  RSA MD2 -  RSA MD5 -  RSA SHA-1 -  RSA SHA-2-256 -  RSA SHA-2-384 -  RSA SHA-2-512 -  DSA SHA-1 -  DSA SHA-2-224 -  DSA SHA-2-256 -  -  Note that the API has changed compared to Tools.X509 and there is -  now a single make_selfsigned_certificate() method for both RSA and -  DSA, though it takes the same arguments. In addition a hash function -  and serial number can be supplied. The hash function defaults to -  SHA-2-256. -  -  - Incompatible C-level API changes - -------------------------------- -  - o New svalue layout -  -  The most obvious change is that the macros TYPEOF() and SUBTYPEOF() -  are now actually needed to directly access the type and subtype of -  an svalue, the svalues no have 'type' and 'subtype' members. -  -  There are also a few additional macros used to set both the type and -  subtype of an svalue at the same time: -  -  SVAL_SET_TYPE_SUBTYPE(sval,type,subtype) and -  SVAL_SET_TYPE_DC(sval,type) -  -  (these are only neede if you do not use the usual push_* macros) -  -  They are useful because they (usually) compiles to significantly -  more compact code, especially if the type and subtype are -  compiletime constants. The _DC variant will either leave the subtype -  unchanged or set it to 0, useful when you do not care about the -  actual subtype (which is, really, most of the time). -  - o get_storage() returns void* -  -  There is no need for casts in non-C++ code. -  -  - Building and installing - ----------------------- -  - o -fvisibility=hidden is now the default -  -  This means that PMOD_EXPORT is now actually needed on systems like -  Linux and MacOSX. It also means that the binary is slightly smaller -  and faster. -  - o clang compilation fixes (bignum overflow checks, misc) -  -  It is now possible to compile pike using a modern clang compiler. -  - o Removed bundles -  -  Pike no longer comes with copies of some libraries, and the support -  for that in the makefile has been removed. -  - o Several OS/2 and windows compilation fixes -  - o C89 assumed -  -  The configure tests will not check for functions defined in C89 -  anymore. -  - Lots of bug fixes - ----------------- -  - o Fixed symbol resolution with deep inherits and mixins -  - o Fixed PNG 4bpl indexed mode with alpha -  - o The _sprintf LFUN now works with %F -  - o foreach( arr[-two()..], string x), where two() returns 2 will no -  longer iterate over the first element in the array three times or -  crash. -  - o Postgres.postgres_result now properly decodes binary blobs and -  strips trailing spaces from CHAR columns. -  - o Fixed a typo from 2001-05-05 that caused a lot of countries to -  reside on the continent ',Europa' instead of "Europa" in -  Geography.Countries. -  -  Obviously the continent is not that often checked. -  - o Fixed interresting bug in the constant number parsing for octal -  numbers in escapes. -  -  For whatever reason 8:s were accepted for every location except the -  first in octal numbers, so 078 was considered an alias for 0100. -  -  This could cause issues at times, and will result in string parsing -  being somewhat different: -  -  | Pike v7.8 release 700 running Hilfe v3.5 (Incremental Pike Frontend) -  | > "\078"; -  | (1) Result: "@" -  | Pike v8.0 release 3 running Hilfe v3.5 (Incremental Pike Frontend) -  | > "\078"; -  | (1) Result: "\a8" -  - o A lot more, see the (more or less) full changelog for more info: -  -  http://pike-librarian.lysator.liu.se/index.xml?m=pike.git&start=forever&branch=7.9,8.0&template=logonly.inc +