6bf19a2002-09-15Peter Bortas Changes since Pike 7.2: ----------------------------------------------------------------------
cd683a2001-07-27Johan Sundström 
6bf19a2002-09-15Peter Bortas New functionality: ------------------
cd683a2001-07-27Johan Sundström 
6bf19a2002-09-15Peter Bortas o New Hilfe
cd683a2001-07-27Johan Sundström 
6bf19a2002-09-15Peter Bortas o pike -x rsif pv
cd683a2001-07-27Johan Sundström 
6bf19a2002-09-15Peter Bortas o unbug
d729172002-07-14Honza Petrous 
6bf19a2002-09-15Peter Bortas New concepts: -------------
638b8d2002-09-22Martin Stjernholm o foreach(X; Y; Z) The foreach statement has been extended to allow iterations over mappings, multisets and any object that implements the iterator interface (see below). To make it possible to use this conveniently, a new syntax has been added to get both the index and the value in each iteration: foreach (something; index-expr; value-expr) ... This iterates over something, assigning in turn each index to index-expr and each value to value-expr. The index and value expressions can be declarations or lvalues, and they can also be left out if the index and/or value part isn't interesting. Note that it depends on the data type whether the iteration order is well defined or not; arrays and multisets are iterated over starting with the first element while mappings are visited in some arbitrary order (each element is still visited only once, though). o Iterators As noted above, an iterator interface has been added that is now used in various places to iterate over different data structures. Not only the built-in data types are supported, but actually any object that fulfills the interface for iterators: When iterating over an object o, o->_get_iterator() is called to get an iterator object. It should at least have two functions index() and value() to get the index and value at the current position, a function `+=(int steps) to advance the current position the specified number of steps, and a `!() that returns zero if the position hasn't reached the end of the data set. Also, if the object o lacks a _get_iterator function, it's assumed to be an iterator itself. This makes it possible to pass an iterator explicitly to e.g. the foreach statement. The built-in data types also have iterator classes with this interface. They are found as Array.Iterator, Mapping.Iterator, etc and can be used to iterate over these data types in some custom fashion. This is especially useful for mappings and multisets, which cannot be iterated over directly in any other way. For example, to get some arbitrary index in a mapping m: mixed any_index = Mapping.Iterator(m)->index();
6bf19a2002-09-15Peter Bortas o Automap o Implicit lambda.
638b8d2002-09-22Martin Stjernholm o Access to hidden variables in surrounding scopes. Include the names of the surrounding classes themselves in the lookup for Foo::, to make it possible to adress hidden variables in the scopes of surrounding classes, e.g:
6bf19a2002-09-15Peter Bortas 
638b8d2002-09-22Martin Stjernholm  class Foo { int i; void create (int i) {Foo::i = i;} }
6bf19a2002-09-15Peter Bortas 
638b8d2002-09-22Martin Stjernholm o global:: Added new keyword global to be able to access identifiers on the top level of the compilation unit using global::foo.
3dbeca2002-09-16Johan Sundström  o global. All top level modules (and other identifiers in that scope) can now
638b8d2002-09-22Martin Stjernholm  be accessed with a "global." prefix. This is useful in cases where
3dbeca2002-09-16Johan Sundström  local identifiers overshadow the top level, for instance in the Image module, where the Image.Image class would occasionally block your view.
6bf19a2002-09-15Peter Bortas  o this Added a magic identifier "this" that can be used instead of this_object(). Like this_program, it only exists when there's no
638b8d2002-09-22Martin Stjernholm  other identifier with that name. The primary reason for adding this magic identifier is to make it possible to address the object of a surrounding class with Foo::this.
6bf19a2002-09-15Peter Bortas 
638b8d2002-09-22Martin Stjernholm o The Local module
6bf19a2002-09-15Peter Bortas  o enum reserved o enum and typedef have implicit local binding
638b8d2002-09-22Martin Stjernholm o ::_indices(), ::_values(). There are now two "magic" functions ::_indices() and ::_values() that can be used by an object to list all identifiers and their values in itself. They are primarily intended when the _indices() and _values() lfuns have been defined, to get the default implementations. This is to complement the "magic" ::`->() and ::`->=() functions that exist in earlier releases.
6bf19a2002-09-15Peter Bortas  o
638b8d2002-09-22Martin Stjernholm 
6bf19a2002-09-15Peter Bortas Other: ------ sp -> Pike_sp fp -> Pike_fp fatal -> Pike_fatal empty_string -> empty_pike_string
cd683a2001-07-27Johan Sundström  New modules / classes / methods added: --------------------------------------
6bf19a2002-09-15Peter Bortas o ADT.History
2b873c2002-09-24Henrik Grubbström (Grubba)  Leaking stack.
6bf19a2002-09-15Peter Bortas  o ADT.Relation.Binary Handles binary relations.
3dbeca2002-09-16Johan Sundström 
6bf19a2002-09-15Peter Bortas o Audio.Codec and Audio.Codec Contains decoders and encoders for audio. Currently WAV and MP3.
02c81c2002-09-17Honza Petrous  Note: The API remains marked "unstable".
6bf19a2002-09-15Peter Bortas  o Calendar.verify o Debug.Tracer
02c81c2002-09-17Honza Petrous o Dvb.dvb Digital sattelite handler (linux only).
6bf19a2002-09-15Peter Bortas o Locale.Language
cd683a2001-07-27Johan Sundström 
6bf19a2002-09-15Peter Bortas o Parser.Python o Parser.RCS
3dbeca2002-09-16Johan Sundström  Extracts data from RCS or CVS repositories.
6bf19a2002-09-15Peter Bortas  o XML.NSTree o HTTP.Server
c5bc252002-09-16Johan Sundström o Protocols.X.KeySyms
6bf19a2002-09-15Peter Bortas  o Standards.CIFF o Standards.FIPS10_4 o Standards.ID3
705f932002-09-23Honza Petrous  ID3 tags decoder/encoder. Supports versions: 1.0, 1.1, 2.2-2.4. Uses frequently in MP3 files.
6bf19a2002-09-15Peter Bortas  o Standards.RDF o Stdio.FakeFile o Stdio.GZipFile o Tools.PV Convenience tool that sets up a canvas with GTK, presents a picture on it and delivers a number of image inspection and
3dbeca2002-09-16Johan Sundström  manipulation options.
6bf19a2002-09-15Peter Bortas  Also accessable via "pike -x pv"
3dbeca2002-09-16Johan Sundström 
6bf19a2002-09-15Peter Bortas o Image.Dims Can extract the dimensions of an image withóut loading the entire image. o Image.Fonts High level API for font handling. Should be used instead of accessing the Freetype, TTF and *FIXME* modules directly. o Image.DWG AutoCAD thumbnail images. o Gmp.mpq and Gmp.mpf Multi precision fractions.
3dbeca2002-09-16Johan Sundström 
d107302002-09-22Martin Stjernholm o String.SplitIterator o Stdio.File.line_iterator o String.Replace, String.SingleReplace
638b8d2002-09-22Martin Stjernholm 
cd683a2001-07-27Johan Sundström Optimizations: --------------
d107302002-09-22Martin Stjernholm o Machine code used on some architectures. o Overall speed improvements.
6bf19a2002-09-15Peter Bortas o Improvement and bug tickets closed: 1499 Compatibility changes: ----------------------
638b8d2002-09-22Martin Stjernholm The following changes are known to break compatibility. The old behaviour is emulated in the compatibility layer that is activated by adding the preprocessor directive "#pike 7.2" to your program or by giving the argument "-V7.2" to the pike executable. o "global" has become a reserved keyword. o Changed lookup rule for ::. Previously the identifier in front of :: was only looked up among the preceding inherits. Now the lookup additionally includes the names of the surrounding classes. The inherits inside a class still take precedence over the name of the class, though. o Using local:: on variables is an error. Previously the construct local::foo could be used to access the identifier "foo" in the class scope if it had been overridden by an argument or function variable. That is however only a side-effect of the real use for local::, namely to bind the identifier statically at that point only, to avoid getting an overridden version. In the case of variables this leads to questionable semantics, which is the reason it's been made an error in this version. Pike 7.2 didn't implement it correctly; there local:: on variables had only the effect to access the class scope. Now a proper way to access hidden identifiers has been added, so all such uses of local:: should be replaced with this_program::.
6bf19a2002-09-15Peter Bortas 
1d89c52002-09-24Johan Sundström o Identifier lookup The search algorithm for finding identifiers from inherited classes has been changed to look for the most recent definition in the most recent inherit. In Pike 7.2 and prior, it looked up the last definition regardless of inherit depth, unless there was a definition in the current program. (This actually changed more than once during 7.3 - between 7.3.23 and 7.3.32, it looked up the most recent definition with the least inherit depth.) This example shows what the lookup strategies would find: class A { int foo() {} } class B { int foo() {} inherit A; } class C { inherit B; } class D { inherit B; inherit C; } Lookup of identifier "foo" in D(): D-+-B-+-foo Pike 7.3.23 --- Pike 7.3.32 | | | +-A---foo | +-C---B-+-foo Pike 7.3.33 --- (present day) | +-A---foo --- Pike 7.3.22 Lookup of identifier "foo" in C(): C---B-+-foo Pike 7.3.23 --- (present day) | +-A---foo --- Pike 7.3.22 Lookup of identifier "foo" in B(): B-+-foo All versions of Pike | +-A---foo
6bf19a2002-09-15Peter Bortas o Protocols.LDAP.client The return code from all methods was changed to follow Pike's logic better. 0 is now a failure. The old behaviour is emulated in
705f932002-09-23Honza Petrous  compatibility layer.
6bf19a2002-09-15Peter Bortas  o dirname Now correctly returns a directory instead of just stripping the part after nearest directory seprator. o LR LR has been moved to Parser.LR and the API has been chnged. FIXME: More about this? Bugs fixed: ----------- o Reworked trampolines to cause less circular references. (solves 1937)
638b8d2002-09-22Martin Stjernholm (To browse bug tickets, either visit http://community.roxen.com/crunch/ - or append the ticket id to "http://bugs.roxen.com/" for an address directly to the ticket itself.)