ffd9ed2002-12-05Martin Nilsson Changes since Pike 7.4:
6bf19a2002-09-15Peter Bortas ----------------------------------------------------------------------
cd683a2001-07-27Johan Sundström 
bf7e8e2002-09-26Martin Nilsson New/improved functionality: ---------------------------
cd683a2001-07-27Johan Sundström 
670abd2003-01-12Martin Stjernholm o The automatic garbage collection strategy is configurable The garbage collector can be configured to take both the amount of
60a3942003-04-28Martin Stjernholm  garbage and the cpu time spent in the gc into account. Automatic gc runs can also be disabled in critical regions. See the function Pike.gc_parameters. o sort() is stable Unlike previous releases, sort() will keep the original order between elements that are equal. This was not implemented as a separate function since it could be done with virtually no extra overhead.
670abd2003-01-12Martin Stjernholm 
a594a12003-07-23Martin Nilsson 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 Reworked codec The codec for serialization of Pike data types has been updated and has a significally improved successrate at encoding modules.
8d23b02003-09-30Martin Nilsson o Less magic hacks
a6a1f12003-09-30Johan Sundström  Several Pike modules have been cleaned up from old hacks and workarounds for problems which now have proper solutions. This should improve size, 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 resulted in some additional bugfixes.
8d23b02003-09-30Martin Nilsson  o INT64
0876ef2004-02-19Martin Nilsson  On 64 bit architechtures Pike will now use full 64 bits integer before resorting to Gmp.mpz objects for large numbers. o IPv6
b15a162004-05-01Martin Nilsson  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.
8d23b02003-09-30Martin Nilsson 
582dd62004-04-25Martin Nilsson o mysqls The Mysql glue can operate over SSL. Use the "mysqls://" protocol
8d7bed2004-05-05Johan Sundström  in the Sql.Sql module to use this security feature.
582dd62004-04-25Martin Nilsson  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.
8416432004-05-01Martin Nilsson 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 accepts --help and describes what they do and what options they take. o unbug The Pike debugger unbug has been significtly optimized. o Module system. Both dynamic and static modules 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, thus preventing the program from being automatically cloned.
c3371f2004-05-03Martin Nilsson o Unicode Pike 7.6 uses the Unicode 4.0.1 tables for case info and normalization. o upper_case/lower_case The built in functions upper_case and lower_case now also works on single characters, represented as integers. o hash The string hash functions is 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 #warning A new The Pike preprocessor directive #warning has been added. It
8d7bed2004-05-05Johan Sundström  simply writes the rest of the line to stderr.
c3371f2004-05-03Martin Nilsson 
8416432004-05-01Martin Nilsson 
dfaa782004-05-02Martin Nilsson The Pike master: ----------------
8416432004-05-01Martin Nilsson  o The new option --dumpversion prints out the Pike version in a more
8d7bed2004-05-05Johan Sundström  easily parsed way than --version.
8416432004-05-01Martin Nilsson 
8d7bed2004-05-05Johan Sundström o The master now supplies argv to the started application's create() callback, so it can be used for execution. Some people find it a more elegant solution than having a main function.
8416432004-05-01Martin Nilsson  o The -e Pike environment has been improved with a lot of convenience wrappings. 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
8d7bed2004-05-05Johan Sundström  value is a string it will be output, and with a trailing "\n", if it
8416432004-05-01Martin Nilsson  lacked one. Finally there is a predefined variable env that contains the environment variables as a string:string mapping.
dfaa782004-05-02Martin Nilsson 
8416432004-05-01Martin Nilsson Building and installing pike: -----------------------------
dfaa782004-05-02Martin Nilsson  o To simplify the process of building Pike source distributions it is now possible to bundle less common libraries such as Nettle with
8d7bed2004-05-05Johan Sundström  Pike. The bundles, found in the bundle/ directory, will be compiled
dfaa782004-05-02Martin Nilsson  and statically linked if the 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
8d7bed2004-05-05Johan Sundström  Pike installed on your system. Pike source distributions will still contain the generated files and are not affected (except they compile in less time).
dfaa782004-05-02Martin Nilsson  o By default pike want you 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".
deeeee2004-04-20Martin Nilsson 
582dd62004-04-25Martin Nilsson Changes and additions to -x utilities: -------------------------------------- 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 o benchmark A set of benchmarks is available in the benchmark tool. They are
8d7bed2004-05-05Johan Sundström  based on the Great Computer Language Shootout, but have been
582dd62004-04-25Martin Nilsson  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
8d7bed2004-05-05Johan Sundström  suspected) perform badly.
582dd62004-04-25Martin Nilsson  o cgrep
8d7bed2004-05-05Johan Sundström  Context sensitive grep (grepping through tokenized code, at present handling Pike and C source files) is very helpful when you are looking for substrings that are common. The implemented search modes are:
582dd62004-04-25Martin Nilsson  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
8d7bed2004-05-05Johan Sundström  modules from the Fresh Pike project (modules.gotpike.org).
582dd62004-04-25Martin Nilsson 
cd683a2001-07-27Johan Sundström 
8a6b142002-11-29Martin Nilsson New modules / classes / methods added: --------------------------------------
cd683a2001-07-27Johan Sundström 
8d23b02003-09-30Martin Nilsson o Regexp.PCRE added to give libpcre support.
0876ef2004-02-19Martin Nilsson  Are you a closet-perlet? 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 Crypto/Nettle The crypto module has been almost completely rewritten and now
412eb12004-04-20Martin Nilsson  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.
aa1f342004-05-05Johan Sundström  The interfaces for the hash and cipher algorithms have been
412eb12004-04-20Martin Nilsson  improved and they 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();
6f68f42004-04-21Martin Nilsson  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 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.
8d23b02003-09-30Martin Nilsson 
deeeee2004-04-20Martin Nilsson 
8d23b02003-09-30Martin Nilsson o ADT.Struct
6f68f42004-04-21Martin Nilsson  This module makes it possible to work with binary formats of the
aa1f342004-05-05Johan Sundström  packed-struct-type. Simply create a class inheriting ADT.Struct, specify the members with type and size, in order, instantiate an object with a file object as argument and then read the decoded values from the object as ordinary variables.
6f68f42004-04-21Martin Nilsson  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 ); }
deeeee2004-04-20Martin Nilsson o ADT.BitBuffer
6f68f42004-04-21Martin Nilsson  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
8d23b02003-09-30Martin Nilsson o Debug.Wrapper
6f68f42004-04-21Martin Nilsson  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 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.
582dd62004-04-25Martin Nilsson 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 orientation
aa1f342004-05-05Johan Sundström  encapsulation of GL, drawing primitives, texture handling and text
582dd62004-04-25Martin Nilsson  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(); }
6f68f42004-04-21Martin Nilsson 
addcdd2004-05-05Martin Nilsson o ADT.CircularList
aa1f342004-05-05Johan Sundström  This is a circular list implemented as a C wrapper around an
addcdd2004-05-05Martin Nilsson  array. It has a constant time complexity for pop and push. It has
aa1f342004-05-05Johan Sundström  a limited max size but it can be increased manually by calling
addcdd2004-05-05Martin Nilsson  allocate. It supports pushing, popping and peeking at both ends of
aa1f342004-05-05Johan Sundström  the list, as well as removing and insering elements at any position in the list.
addcdd2004-05-05Martin Nilsson  o ADT.Sequence
aa1f342004-05-05Johan Sundström  The sequence works similar to an array but has the possibilities to insert and remove elements at any position. It also has methods
addcdd2004-05-05Martin Nilsson  to retrieve iterators that work from either side of the sequence.
aa1f342004-05-05Johan Sundström  Both of the above ADT:s share a common set of interface primitives described in a thesis work available for download and review at http://pike.ida.liu.se/projects/docs/cmods/ADTs%20in%20Pike.pdf
6f68f42004-04-21Martin Nilsson 
addcdd2004-05-05Martin Nilsson  o Geography The Geography.Position object can now convert to and from the Swedish RT38 (Rikets Triangulering 1938) position format.
dfaa782004-05-02Martin Nilsson 
8d23b02003-09-30Martin Nilsson o Int
aa1f342004-05-05Johan Sundström  The Int module contains a few functions and constants that deal
dfaa782004-05-02Martin Nilsson  specifically with the integer data type. Currently it contains parity and byte swapping functions and constants for the system maxint and minint.
8d23b02003-09-30Martin Nilsson o Pike.Security
aa1f342004-05-05Johan Sundström  Functions and classes that deal with the Pike security system
dfaa782004-05-02Martin Nilsson  (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.
cbfba52004-05-01Leif Stensson 
3f15bc2004-05-01Martin Nilsson o Protocols.HTTP.Session Handles an HTTP connection as a session, with cookies, redirects,
aa1f342004-05-05Johan Sundström  HTTP keep-alive et cetera.
cbfba52004-05-01Leif Stensson 
8d23b02003-09-30Martin Nilsson o Bz2
b15a162004-05-01Martin Nilsson  Support for the compression format used by the bzip2 program. The
dfaa782004-05-02Martin Nilsson  module interface is almost identical with the Gz module, so
aa1f342004-05-05Johan Sundström  changing between Bz2 and Gz is just a matter of a few characters'
dfaa782004-05-02Martin Nilsson  difference.
cbfba52004-05-01Leif Stensson 
820ec72004-02-03Martin Nilsson o Process.Process
dfaa782004-05-02Martin Nilsson  The Process.Process class is extended to handle a time out callback and a read callback, to better manage processes in an
aa1f342004-05-05Johan Sundström  asynchronous way.
dfaa782004-05-02Martin Nilsson 
deeeee2004-04-20Martin Nilsson o Error
dfaa782004-05-02Martin Nilsson  The beginning 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
addcdd2004-05-05Martin Nilsson 
deeeee2004-04-20Martin Nilsson o Float
aa1f342004-05-05Johan Sundström  Here, constants and functions that deals specifically with the float data type are stored. Currently contains only various
dfaa782004-05-02Martin Nilsson  constants that describe the precision and limitations of the float type Pike is compiled with.
deeeee2004-04-20Martin Nilsson o Protocols.Bittorrent
addcdd2004-05-05Martin Nilsson  This is a Pike implementation of the client side of the popular
aa1f342004-05-05Johan Sundström  Bittorrent protocol. Both creating torrent files and seeding, as well as downloading and verifying files is supported. There are
addcdd2004-05-05Martin Nilsson  also several functions to retreive auxillary information such as
aa1f342004-05-05Johan Sundström  identifying the other peer clients. Contains all the primitives you would expect, except for the tracker.
b15a162004-05-01Martin Nilsson 
3f15bc2004-05-01Martin Nilsson o Protocols.LMTP/Protocols.SMTP
aa1f342004-05-05Johan Sundström  Protocols.LMTP implements a server for the Local Mail Transfer
3f15bc2004-05-01Martin Nilsson  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.
b15a162004-05-01Martin Nilsson  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.
3546102004-04-30Leif Stensson 
b15a162004-05-01Martin Nilsson o Web.RDF/RDFS/OWL/RSS
3546102004-04-30Leif Stensson  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,
aa1f342004-05-05Johan Sundström  owlset->owl_Class), array statement)
3546102004-04-30Leif Stensson  write("- %O\n", statement[0]);
aa1f342004-05-05Johan Sundström  }
addcdd2004-05-05Martin Nilsson 
dfaa782004-05-02Martin Nilsson o Array The Array module has been extended with Array.all and Array.any
aa1f342004-05-05Johan Sundström  which determines if all or any of the elements in an array meet a
dfaa782004-05-02Martin Nilsson  given condition. Also the function Array.partition has been added, which divides the elements of an array into two arrays, selected by a given condition. o Function The Function module has been extended with the fixpoint combinator "Y", useful when writing recursive lambdas, a curry function, to
aa1f342004-05-05Johan Sundström  partially evaluate a function call and a callback caller function
dfaa782004-05-02Martin Nilsson  that protects the caller from exceptions in the callback function.
8416432004-05-01Martin Nilsson  o Thread
aa1f342004-05-05Johan Sundström  Thread.Fifo and Thread.Queue have been extended with try_*
b15a162004-05-01Martin Nilsson  varieties of all functions that can block and with functions that
aa1f342004-05-05Johan Sundström  make them both implement the same interface. Both also have
b15a162004-05-01Martin Nilsson  fallbacks for running in nonthreaded mode. 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);
addcdd2004-05-05Martin Nilsson 
b15a162004-05-01Martin Nilsson o Calendar module The %S format is 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.
8416432004-05-01Martin Nilsson 
3f15bc2004-05-01Martin Nilsson o SSL
aa1f342004-05-05Johan Sundström  Large parts of the SSL module have been rewritten, either as part
addcdd2004-05-05Martin Nilsson  of the rewrite of the Crypto module or in an attempt to fix many
aa1f342004-05-05Johan Sundström  issues regarding blocking/nonblocking files, threads et cetera.
3f15bc2004-05-01Martin Nilsson  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 Standards.IDNA
dfaa782004-05-02Martin Nilsson  This module implements various algorithms specified by the Internationalizing Domain Names in Applications (IDNA) memo by the Internet Engineering Task Force (IETF), RFC 3490.
8416432004-05-01Martin Nilsson 
0f11b82004-05-02Martin Nilsson 
cd683a2001-07-27Johan Sundström Optimizations: --------------
addcdd2004-05-05Martin Nilsson o Instantiation and destruction of pike-classes is now significantly faster.
770a0b2003-07-23Henrik Grubbström (Grubba) 
60a3942003-04-28Martin Stjernholm o Handling of bignums has been optimized, especially conversion to/from normal integers.
38a6742002-12-31Per Hedbor 
6f68f42004-04-21Martin Nilsson o String case conversion is now five times faster than before on average.
412eb12004-04-20Martin Nilsson 
6bf19a2002-09-15Peter Bortas  Compatibility changes: ----------------------
addcdd2004-05-05Martin Nilsson o Incompatible changes has been done to 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.
e2a7382002-11-24Peter Bortas Compatibility changes without backward compatibility: -----------------------------------------------------
deeeee2004-04-20Martin Nilsson o Module ABI changed The pike_frame struct has a new member, which makes modules compiled
6f68f42004-04-21Martin Nilsson  with earlier versions of Pike incompatible.
deeeee2004-04-20Martin Nilsson 
fc7f8d2002-11-24Martin Stjernholm 
bf7e8e2002-09-26Martin Nilsson C level/development changes: ----------------------------
deeeee2004-04-20Martin Nilsson o The security.h include file is renamed to pike_security.h
c3371f2004-05-03Martin Nilsson  o The testsuite has three new, handy macros, cond_resolv, test_program_eq, 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.