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 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 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. |
|
FIXME: Describe relation with Pike.INDEX_FROM_BEG/END & OPEN_BOUND. |
|
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 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! C-API incompatibility! |
NOTE! |
NOTE! Changed the argument for backend callbacks! |
NOTE! |
NOTE! The argument is now a struct Backend_struct * when called |
NOTE! at entry (was NULL). |
NOTE! The argument is now NULL when called at exit (was 1). |
NOTE! |
|
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 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. |
|
o protected |
|
The modifier protected is now an alias for the modifier static. |
|
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. |
|
NOTE! |
NOTE! C-API incompatibility! |
NOTE! |
|
Extensions and New Functions |
|
o __attribute__ and __deprecated__ |
|
It's now possible to set custom attributes on types. This is |
currently used to improve the argument checking for sprintf() |
and related functions, and for marking symbols as deprecated. |
|
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 (ie lambdas). Note |
also that __func__ behaves like a litteral string, so implicit |
string concatenation is supported. eg: |
|
error("Error in " __func__ ".\n"); |
|
o limit() |
|
The new toplevel function limit(a, x, b) is a convenience function |
that works like min(max(a,x),b). |
|
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 value() on a Queue object. |
|
o ADT.Stack |
|
Stack objects can now be cast to arrays. |
|
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 uint 64 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. |
|
FIXME: Example |
|
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. FIXME: Example |
|
- A new formatting method format_ext_time_short() has been added to |
Time objects. |
|
- Timezones are now read from /etc/localtime, if available. |
|
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. |
|
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 DefaultCompilerEnvironment |
|
The CompilerEnvironment object used by Pike internally. |
|
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. |
|
- Several bug fixes. |
|
o Gz |
|
- Added compress() and uncompress() functions as an simpler and more |
efficient but non-streaming interface. |
|
- Support for RLE And FIXED compression method, if supported by |
zlib. |
|
- Added support for configurable compression window size. |
|
o Image.Colortable |
|
FIXME |
|
greyp() |
partial encode/decode (dithering, lookup mode not saved) |
|
o Image.Dims |
|
Support for parsing out the dimensions of TIFF files has been added. |
|
o Image.FreeType |
|
FIXME |
|
supports monochrome fonts |
|
o Image.GIF |
|
FIXME |
|
fixed image leaks |
fixed some decoding errors |
|
o Image.Image |
|
FIXME |
|
adjusted_cmyk() |
encode/decode |
conversion to/from YUV |
|
o Image.Layer |
|
FIXME |
|
(string)Image.Layer |
|
o Image.PNG |
|
FIXME |
|
- Many speed improvements and bug fixes. |
|
- Properly decode cHRM (chrome), sBIT (sbit), gAMA (gamma), pHYs |
(physical), oFFs (offset), tIME (time) |
|
- zlevel and zstrategy |
|
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 Locale.Charset |
|
FIXME: Rewrite |
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) |
|
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. FIXME: Not |
finished. |
|
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 |
|
Unicode support. FIXME: Document in more detail. C.f. check-in 1.25 |
of lib/modules/Sql.pmod/mysql.pike. |
|
o Odbc |
|
FIXME: Rewrite |
Now supports UnixODBC properly. |
Fixed various issues with Unicode. |
|
o Parser.Pike and Parser.C |
|
Parser.Pike and Parser.C has been rewritten in C for increased |
performance. The #string directives should be handled correctly now. |
|
o Parser.RCS |
|
FIXME: Rewrite |
Handle broken RCS files better. |
|
o Parser.XML.NSTree |
|
- Added add_child_before() and add_child_after() methods to the |
NSNode object. |
|
- Fixed crash bug. |
|
o Parser.XML.Tree |
|
FIXME: Rewrite |
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 |
|
- 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(). FIXME! |
|
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) 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. |
|
- 30% faster hashing of files. |
|
- Many performance and bug fixes. |
|
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 know 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. |
|
o Protocols.LDAP |
|
Added more resilience to UTF-8 encode errors. A new flag |
Protocols.LDAP.SEARCH_RETURN_DECODE_ERRORS may be used to avoid |
throwing errors when this happens. |
|
FIXME: Many changes |
|
o Protocols.SNMP |
|
The readmsg() method in the protocol object now takes an optional |
timout argument. |
|
o Protocols.XMLRPC |
|
The new AsyncClient class implements an asynchronous XMLRPC client. |
|
o Regexp.PCRE.Widestring |
|
This feature 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. |
|
FIXME: mysql |
|
o SSL |
|
FIXME: client certificates: examples? |
|
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 |
|
FIXME |
|
o Stdio |
|
(module.pmod, Readline, Terminfo) FIXME |
|
o String |
|
- The function int2size has been rewritten to fixpoint as well as |
using the more common abbreviation of "B" for byte. |
|
o Tools |
|
FIXME |
|
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. |
|
o sprintf |
|
sprintf() and friends now attempt to perform compile-time argument |
checking. |
|
sprintf() now attempts to lookup the name of the program when |
formatting types of objects and programs. |
|
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. |
|
|
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 Arg |
|
The new argument parser module allows for Getopt style arugment |
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 Kerberos |
|
FIXME |
|
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. |
|
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 |
Fuse |
Protocols.DNS_SD |
Charset gb18030 |
gbk |
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 has been removed. |
|
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 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. |
|
|
-------------------- NOTES------------ |
|
2004/04/26 00:13:30 |
|
backport: |
|
Calendar.pmod/events/regional |
Calendar.pmod/TZnames.pmod |
Protocols.HTTP.Query |
|
update(?): |
|
Geography.pmod/Countries.pmod |
MIME.pmod/ext... |
|
fixme: |
Process.locate_binary |
|
__deprecated__ |
|
---- |
modules/_Charset |
|
|
src: |
CommonLog: fixed sign bug |
files: FIXME |
Gettext: lots of build fixes |
gmp: FIXME |
java: FIXME |
mysql: FIXME |
|