pike.git / CHANGES

version» Context lines:

pike.git/CHANGES:30:       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: +  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;    | // ...    | }   
pike.git/CHANGES:168:    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). +  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 +  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. +  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 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 run 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: +  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++,
pike.git/CHANGES:331:      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 +  search and string_has_null for now. It could be added to other    places in the future as well.       A fairly common case is where you are doing lower_case or upper_case    on an already lower or uppercased string. This 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
pike.git/CHANGES:390:       Use the corresponding modules in Standards.      o The built in security 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. +  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.      
pike.git/CHANGES:481:    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/ +  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 +  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/       Requires libwebp.      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. +  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 inherited to make an object easily    serializable using encode_value.      o Filesystem.Monitor (and the low level System.Inotify +    System.FSEvents)       Basic filesystem monitoring.   
pike.git/CHANGES:540:    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 +  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 +  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
pike.git/CHANGES:587:   ----------------------------      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 + 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. +  %-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 +  + 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   
pike.git/CHANGES:632:      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. +  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.
pike.git/CHANGES:693:    C-compiler preprocessor will then be used on the generated file    (like before)       + inherit "identifier"    -- inherit the program returned by calling master()->resolve() on    the specified identifier. Useful to inherit code written in pike.       + Object types on return and argument types are now resolved    dynamically when needed.    -  This means that the typing information is sifnificantly more strict. +  This means that the typing information is sifnificantly more +  strict.       If you use classes that are not defined in the file (or    src/program_id.h) they will be resolved when your .so-file is    loaded.       Note: Circular dependencies does not work (currently, at least).       Also, the parser still often have problems with types containing    '.'. You can use object(X.Y) instead of X.Y.   
pike.git/CHANGES:722:    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. +  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.
pike.git/CHANGES:783:    optimized for both reading from it and adding data to it at the    same time.       The main intent of the class is buffering for binary and non-binary    protocol parsing and output, and also buffering when using    non-blocking I/O.      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. +  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.       + The callbacks now get the file object as the first object if no    other id has been set.       + Added support for buffering via Stdio.Buffer.    -  This can be used to greatly simplify the writing of non-blocking code. +  This can be used to greatly simplify the writing of non-blocking +  code.       - When read and/or write buffer is enabled the corresponding    callbacks get a buffer object as the second argument    -  - The only thing the callback has to do is add data to the buffer or read from it, depending on what callback it is. +  - The only thing the callback has to do is add data to the buffer +  or read from it, depending on what callback it is.       - The write callback will now only be called when the buffer    contains no more output, and data that is not read in one read    callback is kept for the next time data arrives.       + Fixed grantpt() on Solaris failing with EPERM.         o Unicode databases updated to 7.0.0 from 5.1.0   
pike.git/CHANGES:859:       + 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. +  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. +  + 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   
pike.git/CHANGES:889:    + 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) +  + 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. +  (mostly) Cross-platform ways to get the user name and home +  directory.    - o System.AllocConsole, System.FreeConsole and System.AttachConsole for NT + o System.AllocConsole, System.FreeConsole and System.AttachConsole for +  Windows NT    -  These are useful to create or close the console window that is -  shown for pike programs. +  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
pike.git/CHANGES:922:    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. +  (::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
pike.git/CHANGES:955:      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 +  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
pike.git/CHANGES:1075:    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. +  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:   
pike.git/CHANGES:1111:    - 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). +  + 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.
pike.git/CHANGES:1144:    + 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. +  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. +  The protocol code can probe 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. +  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.