Changes since Pike 7.6: |
---------------------------------------------------------------------- |
|
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 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. This is convenient to e.g. chop off the last |
element in an array: a[..<1]. |
|
o 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 New `[..] operator function. |
Range operations have been separated from the `[] operator function |
and is handled by a new `[..] which provides greater control in how |
the range bounds are specified. For compatibility, if there is no |
`[..] then `[] is still called for range operations. |
|
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 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 New (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 Added generic attributes for types. |
Provides a method to hook into the type checker, so that it is |
possible to make custom type checking. |
No syntax yet. |
Added such a type checker for sprintf(). |
|
o Stricter typing of strings. |
The string type may now have an (optional) value range. Example: |
string(0..255) bytes; |
|
o Stdio.* |
Stdio.cp can now work recursively in a directory tree. |
Stdio.cp now keeps permissions when copying. |
Added Stdio.recursive_mv which works on every OS and also when the |
destination isn't on the same filesystem as the source. |
|
o Prepared for having multiple different active backend implementations. |
... |
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! |
NOTE! Changed the argument for backend callbacks! |
NOTE! |
NOTE! The argument is now a struct Backend_struct * when called at entry (was NULL). |
NOTE! The argument is now NULL when called at exit (was 1). |
NOTE! |
|
o Process.popen |
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. |
|
o bin/precompile.pike |
Voidable pointer types are no longer promoted to mixed. |
|
o cpp |
The preprocessor now supports macro expansion in the #include and #string |
directives. |
|
o PIKE_PORTABLE_BYTECODE |
--with-portable-bytecode is now the default. Pike programs that have |
been dumped on one architecture now can be decoded on another. |
|
o Math.Matrix |
Multiplication were bugged and gave B*A instead of A*B. Now fixed. |
|
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 |
DESCTRUCT_EXPLICIT, DESTRUCT_NO_REFS, DESTRUCT_GC and |
DESTRUCT_CLEANUP. |
|
o Support for class symbols with storage in parent scope. |
Also added support for aliased symbols. |
|
o Improved support for mixin. |
The Pike compiler now supports mixin for symbols that have been |
declared static. |
|
o Implicit and explicit create(). |
The compiler now supports defining classes with both an implicit |
and an explicit create(). |
|
o Warnings for unused private symbols. |
The compiler now checks that all symbols that have been declared |
private actually are used. |
|
o Unicode |
Case information and the Unicode module are updated to Unicode |
5.0.0. |
|
|
Extensions and New Functions |
|
o ADT.BitBuffer |
read() added. Bugfixes. |
|
o ADT.Priotity_queue |
Fixed pop bug. |
|
o ADT.Queue |
Added _sizeof, _values |
|
o ADT.Struct |
Signed integers. |
Structs can be Items in other Structs. |
_sizeof in every Item. |
|
o ADT.Relation.Binary |
iterator API fix. |
Fixed creating relation with initial relation. |
Added cast to mapping. |
|
o Array |
Added combinations() |
Bugfixed Array.diff3 |
Added push(), pop(), shift() and unshift() for Perl weirdos. |
|
o Cache |
Data.recursive_low_size() now supports floats. |
thread fixes |
|
o Calendar |
Fixed bugs in discordian. year off by 1166 and now 5 month per year. |
Islamic days start at sunset |
New national day |
fixed hour formatting for format_smtp() |
Time: * and / now handle floats. split implemented. |
how_many() now returns the correct value. was off by one. |
Updated timezone information. |
|
o Crypto.Random |
Now thread safe. |
|
o Debug |
count_objects() added. |
|
o Filesystem |
ignore_error added to traverse |
|
o Float |
Added isnan() |
|
o Geography.Position |
Now possible to encode. |
|
o GLUE |
mipmap to flags |
supports clamped textures in BaseTexture and BaseDWIM |
|
o Image.Dims |
supports TIFF |
|
o _Image ? |
Added support for DOS EPS |
|
o Int |
inf + operations |
|
o Locale.Charset |
Remapped and documented the use of the private character space. |
ISO-IR non-spacers are now converted into combiners. |
Added some support for pluggable character sets. |
Added GB18030/GBK |
UTF-EBCDIC |
unicode prefix, e.g. unicode-1-1-utf-7 |
CP949 |
GBK (cp936) |
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) |
|
o MIME |
Fix for casting MIME.Message objects to strings |
Added remapping variants of the encode words functions. |
|
o Odbc |
Now supports UnixODBC properly. |
Fixed various issues with Unicode. |
|
o Parser.Pike |
Now uses parser written in C. |
Fixed parsing of #string |
|
o Parser.RCS |
Handle broken RCS files better. |
|
o Parser.XML.Tree |
Added rendering of DTD ENTITY nodes. |
The renderer now knows about the internal_subset attribute for the |
DOCTYPE tag. |
Added rendering of DTD ELEMENT nodes. |
Added functions to inser new childe node. |
Moved parser code into the nodes allowing for extendability. |
set_tag_name() |
simple-stuff |
AbstractSimpleNode, VirtualNode, SimpleNode. |
Node.zap_tree |
|
o Pike |
get_runtime_info() |
Encoder, Decoder, Codec |
|
o Process |
run() |
spawn_pike() |
Extended system() to pass args to spawn() |
New popen implementation. |
|
o protected |
The modifier protected is now an alias for the modifier static. |
|
o Protocols.DNS |
Added support for NAPTR (RFC 3403) records. |
Fix for TTL parsing in SRV records. |
gethostbyname() now returns IPv6 addresses too, if available. |
Improved support for T_TXT. |
|
o Protocols.Bittorrent |
Support for gzipped and compact tracker responses. |
30% faster hashing of files. |
|
o Protocols.HTTP.Query |
|
Many async bug fixes. |
Added timed_async_fetch() |
|
Don't silently downgrade to http from https if there is no crypto |
support. |
|
Addedunicode_data() |
|
Keep alive fixes. |
|
o Protocols.HTTP.Session |
Now possible to manually set content type. |
|
o Protocols.HTTP |
http_encode_string() now know how to encode UCS-2 characters. |
|
o sprintf |
sprintf() now attempts to lookup the name of the program when |
formatting types of objects and programs. |
|
PROTOCOLS NOT DONE |
|
o ADT.Table |
Fixed sorting of columns typed num. |
|
o Calendar.Badi |
Support for the Badi calendar used in the Baha'i religion. |
|
New Modules |
|
o ADT.List |
|
o ADT.Trie |
|
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 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 compares |
the time 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 compares 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. |
|
New lib: |
Protocols.LDAP module.pmod |
Sql.Sql dsn |
sqlite |
sql_array_result |
sql_object_result |
tds |
-x test_pike |
|
New src: |
embed/libpike |
tmodule |
code/amd64 |
Fuse |
Protocols.DNS_SD |
Charset gb18030 |
gbk |
Parser c.c / pike.c |
GTK2 |
SQLite |
|
Incompatible changes |
|
These incompatible changes can be solved by adding #pike 7.6 to your |
source file or starting Pike with -V7.6. |
|
o Array.transpose_old |
This function is removed. |
|
o _Charset |
This internal module has had most of its content removed. |
|
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 spider.XML |
The spider module no longer contains the XML parser. The functions |
isbasechar(), iscombiningchar(), isdigit(), isextender(), |
isfirstnamechar(), ishexchar(), isidiographic(), isletter(), |
isnamechar() and isspace() has 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() has 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 upon errors, to allow easier |
use as errno doesn't have to be checked. read_file() and |
read_bytes() still returns 0 if the file does not exists. |
|
o The modules Mird, Perl, Pipe and Ssleay have been removed. |
|