Changes since Pike 7.6.86 |
---------------------------------------------------------------------- |
|
Changes in Pike: |
|
o Added conversion from Gmp.mpz objects to Gmp.bignum when cast to int. |
o Added timeout to Image.PS. Now kills the ghostscript process if it |
hasn't returned after 30s. |
o Added GL 1.2 and 1.3 constants. |
o Added possibility to set offset and stride when creating textures from |
memory objects in GL. |
o Fixed CMYK calculation in Image.Image. |
o Added adjusted_cmyk to Image.Image and use it when decoding with |
Image.PS. |
o Now handles more eps images internally in Image.PS without spawning |
ghostscript. |
o Added Standards.IIM that handles IPTC IPTC Information Interchange |
Model data in JPEG or Postscript images created with PhotoShop. |
o Added support for little endian TIFFs. |
o Added support for TIFF to Image.Dims. |
o Changed HTTP.Query to close connections explicitly. |
o Changed sslfile to avoid blocking IO in destroy() as that could lock |
up the gc. You should explicitly close() SSL connections since the close |
packet might block. |
o Improved Parser.XML.Validating. |
o More paranoid checks of image headers when using Image.AVS. |
o Fixes to make describe_value work as usual in the free pass of the |
gc, so that e.g. sprintf("%O",...) behave well when called from |
destroy(). |
o Fixed truncated field names in ODBC. |
o Fixed masking of file positions larger than 2 GiB on 64-bit. |
o Fixed low-level parsing of HTTP headers to not reorder the headers. |
o Added set_charset and get_charset proxy functions to Sql.Sql. |
o Changed Protocols.HTTP.Query async_close() to care about the value |
returned by ponder_answer(). Fixes requests to broken servers that |
don't send proper results. |
o Fixed bad free_string() in exit_bytecode(). |
o Fixed an off-by-one crash when drawing alpha boxes all the way to |
the bottom of the image. |
o Fixed a multiset bug that could cause incorrect multiset sizes. |
o Fixed a multiset bug that caused ints to be called as sorting |
function when no sorting function was set. |
o Fixed hour formatting in Calendar.Time.format_smtp(). |
o Fixed TTL parsing of SRV records in Protocols.DNS. |
o Fixed an inverted error test in Mysql.set_charset. |
o Added support to Mysql for the charsetnr column attribute and proper |
recognition of binary fields in unicode decode mode by using charsetnr |
instead of the binary flag (which might be set for nonbinary columns |
too, e.g. "VARCHAR(17) BINARY"). |
|
Unfortunately this means that unicode decode mode is disabled if |
Pike is compiled with a client lib without support for the charsetnr |
attribute. That means libs before 4.1.0. If you want to enable it |
for compatibility reasons, set the environment variable |
PIKE_BROKEN_MYSQL_UNICODE_MODE when starting pike. |
|
Other: |
|
o Improved Valgrind support. |
o Now checks the return code from win32 VirtualProtect. This breaks |
assembler optimized builds on Windows. It never worked in the first |
place, but used to fail silently, so this is better. This has been |
fixed in 7.7 by using another heap manager, but it has not been |
decided if it should be be backported. |
o Adjusted array growth policy in array_insert to double the size |
instead of growing with approximately one eighth of the size. This to |
ensure O(1) time complexity and lessen fragmentation. (This affects |
ADT.Sequence._insert_element and ADT.CircularList._insert_element.) |
o Fixed support for UnixODBC. |
o Made IA32 machine code compatible with Darwin IA32 ABI. Enabled |
machine code for Darwin. |
|
Build fixes: |
|
o Support GNU Java (GCJ) |
o Did away with the use of the undocumented internal MS win32 CRT |
functions __loctotime_t and __dtoxmode. |
o Fixed typo that caused the configure script to search for lots of |
nonapplicable include dirs on windows. |
o Backported new INT_TYPE_{ADD,NEG}_OVERFLOW implementation from 7.7. |
The old one does not work with GCC 4.1. |
o Fixed problem where mysql_character_set_name exists in mysql.h but |
not in the lib for some old mysql clients. |
o Fixed epoll support to not require /dev/epoll on Linux. That means |
epoll will be enabled all mainstream Linux distributions running on a |
2.6 kernel. If for some reason you want to disable it use |
--without-epoll. |
o Added Objective C support to the module build system. |
|
|
Changes since Pike 7.6.66 |
---------------------------------------------------------------------- |
|
Changes in Pike: |
|
o Added support for "100 Continue" to Protocols.HTTP.Server. |
o Fixed Keep alive issues in Protocols.HTTP.Server. |
o Fixed SSL.sslfile to ensure that a read callback gets a call if it's |
installed when there already is data in the internal read buffer. |
o Fixed Cache.cache to work without threads again. |
o Fixed a typo in Array.diff3 that in some rare cases caused it to |
merge a difference into a three-way equality. |
o Fixed a bug where reused local variables weren't cleared properly. |
o Fixed sorting order for huge characters. |
o The values returned by Thread.status is now available as constants |
in the Thread module. |
o Added peek() method to ADT.Heap and Priority_queue. |
o Fixed "file not open" error when performing multiple operations on a |
Filesystem.Tar file. |
o Fixed a rare PNG decoding issue. |
o Proper handling of NULL elements in Postgres. |
o Fix for potential SQL injection vulnerability in Postgres. |
o Added support for WSAECONNRESET in SSL on win32. |
|
Other: |
|
o Fixed bug causing local variables to never be reused, which in turn |
leads to huge stack frames. |
o Fix to avoid the cleanup thread becoming garbage when the cache |
object is destructed. |
o Various UCS-2/SQLWCHAR related fixes in Odbc. Potentially fixes |
problems where wchar_t is 4 bytes (eg MacOS X). |
o More multiset gc fixes. |
o Fixed support for running dmalloc Pike with -d. |
|
Build fixes: |
|
o Fixed VC8 compilation. |
o Fixed support for C++ modules. |
o Improved support for Darwin x86. |
|
|
Changes since Pike 7.6.50 |
---------------------------------------------------------------------- |
|
Changes in Pike: |
|
o Added support for chunked transfer encoding and handle unexpected |
multiple headers in HTTP.Server.Request. |
o Added support for "urlencoded" as an alias for "url-encoded" in |
HTTP.Server.Request. |
o Added callback support to Stdio.FakeFile. |
o Added iso_646.irv, iso_4873.dv and iso_4873 to charsets. |
o Added UCS-2 API support to Odbc. |
o Fixed some bugs in Protocol.HTTP.Server.HeaderParser. |
o Fixed decoding boolean datatype in Protocols.XMLRPC. |
o Fixed short names in Standards.XML.Wix. |
o Fixed time(0) to behave like time(), not time(1). This is considered |
a bugfix and does not have backward compatibility. |
o Allow _disable_callbacks and _enable_callbacks on closed fd's. |
|
Other: |
|
o Added compatibility for more odbc drivers. |
o Optimized XML.Tree simplenode creation. |
o Fixed reference underflow in modify_shared_string() |
o Fixed segfault when exiting uninitialized mutex keys. |
o Fixed segfault for two special cases of indexing unexisting stuff. |
o Fixed gc problem that could produce an error "gc_mark() called for |
thing in zap weak pass that wasn't marked before" in pikes compiled |
with rtldebug. |
o Fixed multiset node ref bugs that affected iterators when the |
multisets contain destructed objects. |
o Fixed out of C-stack errors when resizing unbalanced mappings. |
|
Build fixes: |
|
o Fixed win32 compilation. |
o Fixed detection of SDL.Joystick on win32 |
o Automaticly add Pike icon to win32 binary. |
o Fixed signal_handler compilation on OperBSD. |
o Fixed gcc 4.0 compatibility. |
o Added mmap PROT_EXEC support to MacOS X via MAP_ANON. |
|
|
Changes since Pike 7.6.24 |
---------------------------------------------------------------------- |
|
Changes in Pike code: |
|
o added Standards.UUID |
o added Standards.XML.Wix, Tools.Standalone.make_wxs |
o Parser.XML: added 7.2 compatibility mode that allows multiple tags |
at the top level. Also fixed bug where comments and PI:s after the |
top level element weren't allowed. PIs are allowed at the top level. |
o Parser.XML: Added additional validity checks which may be turned on |
to get stricter XML parsing. |
o Parser.XML: added compatibility wrapper for 7.2 parse_input() |
o Parser.XML: can pass compat_allow_errors to XML parser in |
simple_parse_input() and parse_input(). |
o Parser.XML: stricter detection of RXML entities. |
o better garbage generation for Remote. |
o SSL.sslfile: added wrapper for Stdio.File.is_open(). |
o Protocols.HTTP.Query: keepalive operation fixed when remote has |
closed. |
o Protocols.HTTP.Quert: added timed_async_fetch(). |
o UNDEFINED arguments are better described in backtraces. |
o Protocols.DNS: improved support for T_TXT. |
o Cache.Policy: made some debug output optional. |
o ADT.Relation.Binary: bugfixes, added cast(). |
o Hilfe: added result formatter for binary, octal and hexadecimal |
integers. |
o Protocols.LDAP.client: filter value unescaping function complies |
more closely to the somewhat peculiar escape method in RFC 1960. |
o Protocols.LDAP.client: The paged result control should be optional |
in the first search query and critical in the rest, not the other |
way around. This fixes servers that don't support paged queries in |
the whole tree. |
o SSL.sslfile: Various fixes: notably the close callback is also |
called on errors, which is consistent with Stdio.File. Added |
set_(non)blocking_keep_callbacks. See also Pike.Backend. |
o Stdio: Propogates return values from callbacks properly. |
o Stdio: Always check that the user callbacks are installed before |
calling them. |
o Protocols.HTTP.Server.Request: allow methods other than POST to send |
data in the request body, as long as the content-length header is |
set. |
o Added support for versioned pike -x. |
o Standards.EXIF: bugfix for BIAS. |
o Web.Crawler: bugfix to cope better with non-absolute redirects. |
|
Changes in C code: |
|
o is_eq() works properly with objects now. |
o Improvements made in rtldebug, valgrind and cleanup-on-exit. |
o Searches for 64 bit mysql libraries. |
o Displays errors when the compile time replace() optimizer fails. |
o Zero-type is correctly cleared in a number of opcodes. |
o Fixed leak in Oracle module when Oracle.Date objects are created or |
cast. |
o Several fixes for improved performance and compatibility with |
Oracle 9. |
o Fixes for compiling under Solaris 10, AmigaOS4, OpenBSD and Mac OS X. |
o Machine code disabled under FreeBSD 5.x. |
o Preprocessor now handles escaped newlines in ordinary text. |
o #if expressions can now be broken with escaped newlines. |
o sprintf() %f segfaults fixed. |
o Stdio.UDP->wait() now handles EINTR. |
o Stdio.File sockets are properly released when connect() fails. |
o XML parser fixes (see Pike code changes). |
o mktime() works before 1970 now in all situations. |
o gmtime() works for localtime now, and maps to closest valid time |
when presented with an invalid time. |
o Odbc: configure fixes for modern libiodbc. |
o fixes for modify_shared_string() and rehash_string_backwards() |
o Pike.Backend: Fixed bug in timeout calculation that caused the |
timeout to be zero (effectively causing busylooping) if one |
requested infinite timeout to Backend.(). (This doesn't affect the |
default backend since it has a timeout of 3600.0.) |
o Pike.Backend: proper closing of kqueue descriptors on *BSD systems |
that use kqueue instead of poll(). |
o Pike.Backend: fixed a bug that caused delays when setting callbacks. |
Fixes bad performance for SSL.sslfile based servers. |
o Sybase: SybaseOpenClient framework on Mac OS X. |
o CMOD precompiler: fixes for polymorphic function overloading and |
module level functions. |
o Do not decode non-shortest forms in utf8_to_string and _Charset, for |
security reasons and unicode 3.1 compliance. |
o Image.PNG: fix a memory leak. |
o Image.FreeType: Added support for monochrome pixel fonts. |
o Postgres: Fixes to create() variable 5 parsing. |
o GTK: a number of typos were fixed. |
o A large number of fixes for 64 bit architectures. |
o Significant optimization of sscanf %*s and %*[...]. |
o Optimized Mac OS X cache management in machine code generation |
resulting in better performance in some areas (e.g. startup time). |
|
Other Changes: |
|
o Windows installer fixes |
o Updated Nettle included |
o Bug reports fixed: 3855, 3928, 3941, 3950 |
|
Changes since Pike 7.6.6 |
---------------------------------------------------------------------- |
|
Changes in Pike code: |
|
o Fixed a cyclic resolver problem when running Pike with -V7.4 |
o Fixed #if constant so it doesn't rethrow a compilation error when |
#if constant failes to to compilation error. |
o Better sslfile backward compatibility. |
o Fix to prevent Regexp from throwing an error when PCRE isn't |
installed. |
o Fixed pop() in ADT.Priority_queue. |
o Fixes in Calendar.dwim_day for better accuracy. |
o Major fixes and extensions of Parser.XML.Tree. |
o Protocols.LMTP now displays correct error information. |
o Content-type can now be set manually in Protocols.HTTP.Session. |
o Protocols.LDAP now support paged searches. Fixed bugs related to |
dequoting and escaping values in filters. |
o Fixed memory leak in Protocols.LysKOM. |
o Fixed argument order in Remote.Client->provide. |
o Fixed setting DES and DES3 keys. |
o SSL now falls back to TLS 1.0 when accessed with SSL 3.2 (TLS 1.1). |
o Fixed bug in decoding SSL2 hello messaged that caused incorrect |
padding of client challenges longer than 16 bytes. This caused some |
clients, typically based on OpenSSL, to fail to connect. |
o Fixed an SSL bug that caused the session cache from working. |
o Fixed an SSL bug where calls to the read callback could get lost |
when frequent switches between callback and non-callback mode |
occurs. |
o Added EXIF kludge to handle broken FUJIFILM MakerNote. |
o Fixed close in Stdio.FakeFile. |
o Fixed Stdio.exist. |
o Ensure that errno() is relevant if recurse_rm returns with an error. |
o Fixed a type parser bug in Hilfe. |
o rdf:ID and rdf:about now takes xml:base into account in Web.RDF. |
o Fix for Protocols.DNS on MacOS X. |
|
Changes in C code: |
|
o Fixed bug in profiling support. |
o Backend and UDP fixes for poll and AIX. |
o Fixed bug in f_exit when called with multiple arguments. |
o Fix for segmentation fault in random_string with negative argument. |
o Added mprotect workaround. |
o Avoid default usage of machine code on OpenBSD. |
o Improved handling out-of-stack errors. |
o find_external_context() now supports objects being destructed. |
o Fixed copy_mapping_recursively(). |
o Fixed indices() and values() on objects to hide hidden items. |
o rusage fix for system without 64 bit integer support. |
o Fixes in create_process(). |
o Fixed memory leak when createing tuned boxed images. |
o MMX no longer used for `* and `+ image object operators because of |
precision problems. |
o New module: Kerberos |
o Mysql module support Mysql 4.1.3. |
o Bugfix in dbdate_cast() in the Oracle module. |
o Several bugfixes in Shuffler. |
o Added Stdio.Port()->bind_unix(). |
o Several bugfixes for rare array problems. |
o Several cpp fixes to ensure that #if constant never interrupts |
compiliation. Use --show-all-cpp-warnings to see such failures. |
o cpp expressions are now short-circuited. |
|
Other chages: |
|
o Several fixes in the Pike package generation to make them work with |
GNU tar 1.14. |
o Preliminary support for local variable extraction in unbug. |
o New installer system for Microsoft Windows. |
|
|
Changes since Pike 7.4: |
---------------------------------------------------------------------- |
|
New/improved functionality: |
--------------------------- |
|
o fewer magical hacks |
Several Pike modules have been cleaned up from old hacks and |
workarounds for problems which now have proper solutions. This |
should reduce size, and improve performance, dumpability and |
readability of the affected code. In addition lots of internal |
types in Pike have been tightened up and several more files now |
use the pragma strict_types, which has helped locating and fixing |
some previously undiscovered bugs. |
|
o garbage collection strategy is now configurable |
The garbage collector can now be configured to take both the amount |
of garbage and the cpu time spent in the gc into account. Automatic |
garbage collections can also be disabled in critical regions. (Use |
the function Pike.gc_parameters for this.) |
|
o hash() modified |
The string hash functions are now byte-order independent. The old |
hash function is available as hash_7_4 or as hash when running in |
7.4 compatibility mode or lower. |
|
o --help |
The Pike --help message has been improved, and it is possible to |
retrieve further information about options and environment |
variables. In addition, most of the tools and build scripts now |
accept --help and describes what they do and what options they |
take. |
|
o INT64 |
On 64 bit architectures Pike will now use full 64 bits integer |
before resorting to Gmp.mpz objects for large numbers. |
|
o IPv6 |
Networking code in Pike has been updated to work with IPv6. This |
includes both low-level fixes in the socket handling as well as |
high-level changes such as IP parsing and protocol additions such |
as AAAA records in Protocol.DNS. |
|
o module system improved |
Both dynamic and static modules now appears as objects, and they both |
support having an identifier _module_value, which will then be |
what is presented by the resolver as the module. _module_value can |
be a constant, which will prevent the program from being automatically |
cloned. |
|
o mysqls |
The Mysql glue can operate over SSL, providing additional data |
security. Use the "mysqls://" protocol in the Sql.Sql module to |
access this feature. |
|
o reworked codec |
The codec for serialization of Pike data types has been updated |
and has a significally improved success rate at encoding modules. |
(See the encode_value and decode_value functions.) |
|
o sort() is portable |
Sort is now locale and platform independent. In other words, |
strings are now compared only according to the unicode value of |
every character. |
|
o sort() is stable |
Unlike previous releases, sort() will keep the original order |
of elements that are equal. At first, we considered keeping the old |
sort function in parallel with the new one, as a "faster but |
unstable" alternative, but it turned out that there was no noticable |
difference in speed between the new and the old function. |
|
o trace() can trace all threads |
The configure option --without-thread-trace has been removed, but |
instead the trace() function has been extended to make it possible |
to set the trace level in all threads simultaneously. |
|
o the debug trace system is more configurable |
In addition to the trace levels set by the trace function or by |
the command line argument -t, trace can now be turned on and off |
for the individual subsystems. All trace levels have also been |
increased by one to make room for gc only messages at level 1. |
|
o unbug |
The Pike debugger unbug has been significtly optimized. |
|
o Unicode |
Pike 7.6 uses the Unicode 4.0.1 tables for case info and |
normalization. |
|
o upper_case() and lower_case() extended |
The built-in functions upper_case and lower_case now also works on |
single characters represented as integers. |
|
o #warning |
A new The Pike preprocessor directive #warning has been added. It |
simply writes the rest of the line to stderr. |
|
|
The Pike master: |
---------------- |
|
o The new option --dumpversion prints out the Pike version in a more |
easily parsed way than --version. |
|
o The master now supplies argv to the started application, so it can |
use the create() method for execution. Some people find it a more |
elegant solution than having a main function. |
|
o The "-e" flag to Pike has been improved with a number of convenience |
wrappers. When compiling code with "pike -e", the macro NOT(X) will |
expand to !(X) and CHAR(X) to 'X', making it easier to solve quote |
problems from a shell. If the return from a pike -e statement is a |
positive integer it will be used as pikes exit code. If the return |
value is a string it will be output (with a "\n" added, if the string |
didn't already end in "\n"). Finally there is a predefined variable |
env that contains the environment variables as a string:string mapping. |
|
|
Building and installing pike: |
----------------------------- |
|
o To simplify the process of building Pike source distributions it is |
now possible to bundle less common libraries such as Nettle with |
Pike. The bundles, found in the "bundles" directory, will be compiled |
and statically linked if no matching library is found on the system. |
|
o The Pike build process no longer builds a bootstrap pike, used to |
run various small programs to generate source files. This means that |
in order to build Pike from CVS you need the latest major version of |
Pike installed on your system. Pike source distributions contain |
these generated files, and are not affected. |
|
o By default, pike want to build a documentation source file, i.e. |
"make && make doc && make install". This makes it possible for third |
party modules to integrate its documentation into the system Pike |
documentation. If you do not want to build a documentation source |
file, use "make install_nodoc" instead of "make install". |
|
|
Changes and additions to -x utilities: |
-------------------------------------- |
|
o benchmark |
A set of benchmarks is available in the benchmark tool. They are |
based on the Great Computer Language Shootout, but have been |
modified to make more sense in the context of Pike, and to test |
various aspects of Pike we suspect (or at least at one time |
suspected) to have bad performance. |
|
o cgrep |
Context sensitive grep is very helpful when you are looking for |
substrings that are common. The implemented search modes are: |
o Complete token |
o Part of a token |
o Complete string literal |
o Part of a string literal |
o Part of a comment |
|
Example: |
$ cd Pike/7.6/src |
$ grep or * | wc -l |
18907 |
$ pike -x cgrep -T or * | wc -l |
14 |
|
o dump |
Dumps Pike .pike and .pmod module files to precompiled .o files |
for shorter load times. Previously available as |
src/dumpmodule.pike in the Pike source tree, but moved into the |
Pike builtin tools to facilitate dumping of external modules. |
|
o extract_locale |
Locale extractor utility used to extract localizable strings from |
an application into an xml format, to later be used by the Locale |
module. |
|
o monger |
A new utility to download, install and otherwise manage external |
modules from the Fresh Pike project (modules.gotpike.com). |
|
o rsif |
rsif can now work recursively in a file structure if given the |
flag -r or --recursive. Example: |
pike -x rsif -r 7.4 7.6 |
|
|
|
New modules / classes / methods added: |
-------------------------------------- |
|
o ADT.BitBuffer |
When operating on data formats that are defined on bit level, the |
ADT.BitBuffer presents a convenient interface. It operates as a |
FIFO buffer on bit level, which allows you to read and write bits |
and bytes. |
|
> ADT.BitBuffer b=ADT.BitBuffer(); |
> b->put1(2); |
(1) Result: ADT.BitBuffer(11) |
> b->put0(15); |
(2) Result: ADT.BitBuffer("À\0"0) |
> b->drain(); |
(3) Result: "À\0" |
> sizeof(b); |
(4) Result: 1 |
|
o ADT.CircularList |
This is an circular list implemented as a C wrapper around an |
array. It has a constant time complexity for pop and push. It has |
a limited max size but it can be increased manually by calling the |
allocate() method. It supports pushing, popping and peeking at both |
ends of the list, as well as removing and insering elements at any |
position in the list. |
|
o ADT.Sequence |
The sequence work similar to an array but has the ability to |
insert and remove elements at any position. It also has functions |
to retrieve iterators for forward and backward iteration over the |
elements in the sequence. |
|
o ADT.Struct |
This module makes it possible to work with binary formats of the |
"packed struct" type. Simply create a class inheriting ADT.Struct, |
specify its members in order, create an object with a file object |
as argument, and then read the decoded values from the object as |
ordinary variables. An example, reading ID3 metadata headers from |
an MP3 file: |
|
class ID3 { |
inherit ADT.Struct; |
Item head = Chars(3); |
Item title = Chars(30); |
Item artist = Chars(30); |
Item album = Chars(30); |
Item year = Chars(4); |
Item comment = Chars(30); |
Item genre = Byte(); |
} |
|
Stdio.File f = Stdio.File("foo.mp3"); |
f->seek(-128); |
ADT.Struct tag = ID3(f); |
if(tag->head=="TAG") { |
write("Title: %s\n", tag->title); |
tag->title = "A new title" + "\0"*19; |
f->seek(-128); |
f->write( (string)tag ); |
} |
|
o Array |
The Array module has been extended with Array.all and Array.any |
which determine if all or any of the elements in an array meet a |
given condition. The function Array.partition has also been added, |
which divides the elements of an array into two arrays, selected |
according to a given condition. |
|
o Bz2 |
Support for the compression format used by the bzip2 program. The |
module interface is almost identical to that of the Gz module. |
|
o Calendar module |
The %S format was added to Calendar.parse() to parse seconds since |
the Epoch. The TimeRange class is extended with a format method |
format_commonlog(), a tzname_utc_offset (+HHMM) and |
tzname_location(), which, when available, returns zone names like |
"Europe/Stockholm". The database has been updated with Swedish |
pre-1901 namedays and Finnish namedays. |
|
o Crypto/Nettle |
The crypto module has been almost completely rewritten, and now |
uses libnettle as backend instead of the built-in crypto |
algorithms that Pike had before. This way Pike will benefit from |
the more active development and optimization work in the Nettle |
project. The most common hash and cipher methods are already |
written in assembler for several platforms. As an example SHA1 is |
about 40% faster than before on Intel platforms. |
|
With the new nettle support comes support for two new cipher |
algorithms, Blowfish and Serpent, and the new NIST hash algorithm |
SHA256. Note that the new Crypto module has renamed its |
identifiers to be consistent with the rest of Pike, and in some |
cases to clarify or correct bad names. The old names still work, |
but produce a warning unless Pike is run in compatibility mode. |
Compatibility outside compatibility mode will be removed in the |
future. |
|
The interfaces for the hash and cipher algorithms have been |
improved, and no longer only conform to predefined interfaces, |
but actually inherits Hash/HashState and Cipher/CipherState. Every |
algorithm is in itself a module in the Crypto module, and inherits |
the Hash/Cipher class. This module contains instance non-specific |
methods such as digest_size or key_size. By calling the `() method |
in the module a HashState/CipherState object is returned, which is |
a hash/cipher instance which can be used for streaming operations. |
|
Examples: |
|
Crypto.MD5.hash("Hash this string"); |
|
Crypto.MD5()->update("Hash this ")->update("string")->digest(); |
|
The confusing and hard-to-use Crypto.randomness has been obsoleted |
by the Nettle implementation of the Yarrow random generator. The |
Nettle implementation of Yarrow uses AES and SHA256. The |
Crypto.Random module acts as a frontend before system crypto |
sources, and ensure that almost no matter how bad your OS is, you |
will still get cryptographically strong random data. |
|
o Crypto.PGP |
The start of a PGP/GPG toolkit. It still cannot handle all types |
of signatures nor generate any, but it is useful to verify |
selfsigned code and data. |
|
o Debug.Wrapper |
A simple litte wrapper that can be placed around another object to |
get printouts about what is happening to it. Only a few LFUNs are |
currently supported. |
|
> object x=Debug.Wrapper(Crypto.MD5()); |
Debug.Wrapper is proxying ___Nettle.MD5_State() |
> x->name(); |
___Nettle.MD5_State()->name |
(1) Result: "md5" |
> !x; |
!___Nettle.MD5_State() |
(2) Result: 0 |
|
|
o Error |
The root of the Pike exception hiearchy. Even though it is work |
in progress, it is already usable. |
|
> mixed err = catch( 1/0 ); |
> err; |
(1) Result: Error.Math("Division by zero.\n") |
> object_program(err)==Error.Math; |
(2) Result: 1 |
|
o EXIF |
The EXIF module is now much more robust than before, and can handle |
some of the erroneous EXIF tags some cameras procduce. Extended |
support for Nikon cameras. |
|
o Filesystem.Traversion |
The Filesystem.Traversion iterator is a handy way to descend into |
a directory structure (depth first) and perform actions on all or |
some of the files. |
|
Example: |
|
foreach(Filesystem.Traversion("."); string dir; string file) |
if(file[-1]=='~' || file=="core") rm(dir+file); |
|
o Float |
Here constants and functions that deal specifically with the |
float data type is stored. Currently, it only contains various |
constants that describe the precision and limitations of the float |
type with which Pike was compiled. |
|
o Function |
The Function module has been extended with the fixpoint combinator |
"Y", useful when writing recursive lambdas, a curry function, to |
partially evaluate a function call, and a callback caller function |
that protects the caller from exceptions in the callback function. |
|
o Geography |
The Geography.Position object can now also convert to and from the |
Swedish RT38 (Rikets Triangulering 1938) position format. |
|
o GLUE |
The GL Universal Environment is a GL toolkit that makes |
implementing GL applications in Pike really simple. GLUE has |
several orthogonal components like object oriented encapsulation |
of GL, drawing primitives, texture handling and text generation. |
The most fundamental part is however an abstract interface to a |
GL area driver, like GTK or SDL. |
|
int main() { |
GLUE.init(); |
draw_frame(); |
return -1; |
} |
|
void draw_frame() { |
call_out(draw_frame, 0.02); // 1/(50 fps) |
do_gl_code(); |
GLUE.swap_buffers(); |
} |
|
o Image.NEO |
Support for one of the major image formats on Atari ST/STE, |
including decoding of color cycling. The C bitmap and palette |
handler can be used to implement other atari image formats. |
|
o Int |
The Int module contains a few functions and constants that deal |
specifically with the integer data type. Currently it contains |
parity and byte swapping functions, and constants for the system |
maxint and minint. |
|
o Pike.Security |
Functions and classes that deal with the Pike security system |
(requires Pike to be compiled with --with-security to be present) |
are stored in this module. Beware that the Pike security system is |
still very experimental. |
|
o Process.Process |
The Process.Process class is extended to handle a time-out |
callback and a read callback, to make it easier to manage |
processes in an asynchronous way. |
|
o Protocols.Bittorrent |
This is a Pike implementation of the client side of the popular |
Bittorrent protocol. Both creating torrent files and seeding as |
well as downloading and verifying files are supported. There are |
also several functions to retreive auxillary information such as |
identifying the other peer clients. |
|
o Protocols.HTTP.Session |
Handles an HTTP connection as a session, with cookies, redirects, |
HTTP keep-alive, etc. |
|
o Protocols.LMTP/Protocols.SMTP |
Protocols.LMTP implements a server for the Local Mail Transfer |
Protocol, LMTP, as specified in RFC2033. This module has been well |
tested against Postfix clients. Protocols.LMTP is based on a new |
server implementation in Protocols.SMTP. |
|
o Protocols.OBEX |
An implementation of the IrDA(R) Object Exchange Protocol. OBEX is |
a protocol for sending and receiving binary objects to mobile |
devices using transports such as IR and Bluetooth. |
|
o Regexp.PCRE added to give libpcre support. |
Are you a closet perler? For those who missed the richer flora of |
regexp syntax that Perl supports, the Perl Compatible Regular |
Expression module is the answer. If you compile libpcre with UTF-8 |
support you will also get transparent wide string support. Several |
convenience functions are also added to the Regexp module to |
enable easier access to regular expressions. |
|
o SSL |
Large parts of the SSL module have been rewritten, either as part |
of the rewrite of the Crypto module or in an attempt to fix various |
issues regarding blocking/nonblocking files, threads, etc. |
|
o Standards.IDNA |
This module implements various algorithms specified by the |
Internationalizing Domain Names in Applications (IDNA) memo by the |
Internet Engineering Task Force (IETF), RFC 3490. Your most likely |
application of this will be the encoding and decoding of punycode: |
|
Standards.IDNA.zone_to_unicode("www.xn--rksmrgs-5wao1o.org"); |
|
|
o Thread |
Thread.Fifo and Thread.Queue have been extended with try_* |
varieties of all functions that can block, and with functions that |
make them both implement the same interface. Both also have |
fallbacks for running in nonthreaded mode. |
|
o Web.RDF/RDFS/OWL/RSS |
Pike now has support for the W3C semantic web formats OWL, RDF |
and RDFS, which are used for expressing structure and metadata |
information. There is also some support for the syndication |
format RSS (which happens to be a simple application of RDF). |
|
This sample program reads an OWL file, parses the dataset |
contained in it, and then lists the data classes in that |
dataset: |
|
int main(int argc, array argv) |
{ |
object owlset = Web.OWL(); |
string input = Stdio.read_file(argv[1]); |
owlset->parse_owl(input); |
|
write("Classes:\n"); |
|
foreach(owlset->find_statements(0, |
owlset->rdf_type, |
owlset->owl_Class); |
array statement) |
write("- %O\n", statement[0]); |
|
return 0; |
} |
|
|
Optimizations: |
-------------- |
|
o Instantiation and destruction of pike classes is now significantly |
faster. |
|
o Handling of bignums has been optimized, especially conversion |
to/from normal integers. |
|
o String case conversion is now five times faster than before on |
average. |
|
|
Compatibility changes: |
---------------------- |
|
o Incompatible changes have been made in ADT.Heap, Array.diff3_old, |
Crypto, Locale.Charset, Protocols.SMTP, SSL, Sql.sql, |
Standards.ASN1, Standards.PKCS, Stdio.File, Thread.Mutex and |
rusage(). Please refer to the 7.4 namespace in the compatibility |
section of the documentation for a complete description of these |
changes. Using #pike 7.4 or starting Pike with -V7.4 activates the |
compatibility layer, which should make it possible to run old code |
with newer pikes. |
|
|
Compatibility changes without backward compatibility: |
----------------------------------------------------- |
|
o Module ABI changed |
The pike_frame struct has a new member, which makes modules compiled |
with Pike 7.4, and earlier versions of Pike, incompatible with Pike 7.6. |
|
|
C level/development changes: |
---------------------------- |
|
o The security.h include file is renamed to pike_security.h |
|
o The testsuite has three new, handy macros: cond_resolv, |
test_program_eq and test_program_equal, all defined in mktestsuite. A |
testsuite test that produces a warning, unless it is a test_warning |
test, will now be considered an error. The test program can now run |
testsuites in forked processes. By default every testsuite file will |
now be run in a forked process. If a directory named extra_tests |
exists on the top level of the Pike source directory, that directory |
will also be recursed for testsuite.in files. |
|
o The cmod API has been extended in many details, making it easier to |
work with. Variable declarations may now use the object(programname) |
syntax. Void in parameters may be 0. Varargs and optional arguments |
are now typechecked properly. It is possible to INHERIT a program |
into a PIKECLASS. It is possible to set attributes on a PIKEVAR. A |
program may be flagged as a prototype, which will make the function |
bodies to be ignored. It is also possible to set program flags, such |
as PROGRAM_DESTRUCT_IMMEDIATE. See bin/precompile.pike for |
documentation. |
|
o The make file has a few new targets that should be self explanatory: |
gdb_hilfe, valgrind_hilfe and valgrind_verify. |
|
o The header file module_magic.h is deprecated. Use the |
PIKE_MODULE_INIT and PIKE_MODULE_EXIT macros in your modules |
instead. |
|
o The backend has a new interface to handle references from backend |
objects to callbacks in files. |
|