pike.git
/
CHANGES
version
»
Context lines:
10
20
40
80
file
none
3
pike.git/CHANGES:108:
a[*] + b[*]; // the result has as many elements as the shortest array Multiplying all elements in a by a constant: a[*] * 4711; Make an array of what sprintf("%O", a[n]) returns for all elements in a: sprintf("%O", a[*]);
-
o Implicit lambda
.
+
o Implicit lambda
A convenient way to embed code that needs pre- and/or post-
-
initialization.
+
initialization.
If a statement starts with a function call
+
followed directly by a brace block, then the block is transformed
+
to a lambda function which is passed as the last argument to the
+
function being called.
-
FIXME:
Not
stable.
mast
type
here.
+
The
following
example
embeds
OpenGL
calls that modifies the matrix
+
in an implicit lambda that will save the matrix before execution
+
and restore it afterwards:
-
This example embeds OpenGL calls that modifies the matrix in an
-
implicit lambda that will save the matrix before execution and
-
restore it afterwards.
-
+
void PushPop( function f ) {
-
GL.
glPushMatrix();
+
glPushMatrix();
mixed err = catch(f());
-
GL.
glPopMatrix();
+
glPopMatrix();
+
if (err) throw(err);
}
-
+
void do_something()
+
{
PushPop() { glTranslate( ((1.0-0.08)-pcs)/2, 0.0, 0.0 );
-
drawstuff
();
+
draw_stuff
();
};
-
+
}
-
+
Note that although useful, this feature has important
+
disadvantages and will probably be obsoleted by a better
+
alternative in the future. The problem is that the inner brace
+
block become a completely separate function instead of remaining a
+
block. The difference (apart from being slower) is shown by this
+
example:
-
o Access to hidden variables in surrounding scopes
.
+
void do_something()
+
{
+
PushPop() {
+
if (glError()) return;
+
glTranslate( ((1.0-0.08)-pcs)/2, 0.0, 0.0 );
+
draw_stuff();
+
};
+
draw_more_stuff();
+
}
+
+
Since the inner block is a separate function, the return statement
+
doesn't exit do_something() as one might expect, causing
+
draw_more_stuff() to be called even when there's a GL error.
+
Another effect is that break and continue can't be associated with
+
statements outside the implicit lambda block.
+
+
Another method that overcomes these problems will likely be
+
implemented. The problem is that it can give compatibility
+
problems to change old code that uses implicit lambdas to that
+
one, since e.g. return will work differently without giving any
+
sort of error.
+
+
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: class Foo { int i; void create (int i) {Foo::i = i;} } o global::
pike.git/CHANGES:167:
o The Local module All Pike modules and classes found in the directory hierarchies /usr/local/pike_modules, /opt/pike_modules, /opt/share/pike_modules, /usr/local/share/pike_modules, $HOME/pike_modules, and $PIKE_LOCAL_PATH (a :-separated list of directories) are available with the prefix "Local.". Local.add_path() and Local.remove_path() respectively adds and removes entries from the list of paths to inspect when resolving Local.* symbols.
+
o The program type can be specialized
+
It's possible to specialize a program variable by adding a program
+
identifier, much like an object variable can be specialized. E.g:
+
+
program(Stdio.File) fd = Stdio.File;
+
o enum reserved An enum construct similar to that in C has been introduced. For example: enum AlphaMode { Squares, Solid, None, AlphaOnly,
pike.git/CHANGES:195:
and _values() lfuns have been defined, to get the default implementations. This is to complement the "magic" ::`->() and ::`->=() functions that exist in earlier releases. o UNDEFINED To generate a 0 (zero) with a zero_type(var) == 1, you previously had to use constructs like ([])[0]. This is now available as the globally available symbol UNDEFINED. o _m_delete
-
There
is
now
an
LFUN
mixed _m_delete(mixed index) to
overload in
-
your
classes
to
imitate
mappings
.
It
gets invoked when
m_delete
-
is
performed
on
your
object
.
+
A
class
can
now
define
a
function
mixed _m_delete(mixed index) to
+
make
the
objects
work
like
mappings
with
m_delete
(). (This feature
+
has
been
added
to
later 7
.
2 releases too.)
-
o
::
includes
current
class
-
class
X
{
-
int
i;
-
void
create
(int
i)
{X::i
=
i;}
-
}
+
o
sprintf("%O",
foo)
is
more descriptive
+
If
foo
is a program or an object then Pike will try to find the
+
resolved
name
instead
of returning just "program" or "object".
+
However,
if
an
object
contains
an
_sprintf
function
it will still
+
be called in this case.
New modules / classes / methods added: -------------------------------------- o ADT.History ADT implementation of a "leaking stack". Hilfe example: > object h=ADT.History(3); > for(int i=17; i<22; i++) h->push(i); Ok. > h->get_first_entry_num(); (1) Result: 3 > h[3]; (2) Result: 19
-
+
o ADT.Relation.Binary Handles binary relations. Hilfe example: > object r=ADT.Relation.Binary("test"); > r->add(1,2)->add(2,3)->add(3,5)->add(1,4)->add(4,5); (1) Result: ADT.Relation.Binary("test") > r->find_shortest_path(1,5); (2) Result: ({ /* 3 elements */ 1, 4, 5
pike.git/CHANGES:243:
> r->add(5,1); (4) Result: ADT.Relation.Binary("test") > r->find_shortest_path(1,5); (5) Result: ({ /* 4 elements */ 1, 2, 3, 5 })
-
+
o Audio.Codec and Audio.Codec Contains decoders and encoders for audio. Currently WAV and MP3. Note: The API remains marked "unstable". o Calendar.verify o Crypto.MD4 Hash used for NT Lanmanager passwords. o Crypto.crypt_md5
pike.git/CHANGES:316:
o Image.Dims Can extract the dimensions of an image with a minimal amount of data loading. Currently handles JPEG, GIF and PNG images. Hilfe example: > Image.Dims.get(Stdio.File("test.gif")); (1) Result: ({ /* 2 elements */ 1412, 1120 })
-
+
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 Decodes AutoCAD thumbnail images. o Image.SVG
-
+
o Shuffler
+
o Gmp.mpq and Gmp.mpf Multi precision fractions. o String.SplitIterator o Stdio.File.line_iterator o String.Replace, String.SingleReplace
-
+
o Return value from catch blocks.
+
The return value from catch blocks that exit normally has been
+
changed from a normal zero (i.e. zero_type 0) to UNDEFINED (i.e.
+
zero_type 1).
-
+
Optimizations: -------------- o Machine code used on some architectures. o Computed goto o Better module dumping o Overall speed improvements.
pike.git/CHANGES:416:
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
+
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)
pike.git/CHANGES:501:
LR has been moved to Parser.LR and the API has been chnged. FIXME: More about this? o wmml documentation removed Use the documentation in the refdoc directory instead. o .build_lobotomize_crypto removed Use the Makefile target lobotomize_crypto to lobotomize Pike. Should preferably be executed in an unused tree straight from CVS.
+
C level/development changes: ---------------------------- o Some global symbols have been renamed to avoid name clashes. sp -> Pike_sp fp -> Pike_fp fatal -> Pike_fatal empty_string -> empty_pike_string o --with-internal-profiling o Module symbols not available from other modules. Bugs fixed: ----------- o Reworked trampolines to cause less circular references. (solves 1937)
-
+
(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.) Uncategorized: --------------
-
o --with-new-multisets
-
o PIKE_RUN_UNLOCKED
+
o Works with Autoconf 2.50 o Saved 8 bytes per object for objects not using their parent scope o constant objects (Gmp.Bignum, Math.Matrix, Image.Color) o basetype() o it is possible to change predefines without forking a new pike o dynamic loading o #pragma save_parent o #pragma dont_save_parent (overrides constant __pragma_save_parent__) o dont_dump_module
-
o modules can no longer call functions in other modules directly
+
o
C
modules can no longer call functions in other
dynamic C
modules directly
o it is possible to inherit pike programs from C programs. o separate weak flags for indices and values in mappings Math.inf Math.nan Gz._file Image.Image()->blur Image.Image()->grey_blur Image.PVR: VQ compression/decompression added MIME.Message: guess mode added
pike.git/CHANGES:567:
_Ffmpeg Image.JPEG: transforms Stdio.File->sync Stdio.get_all_active_fd (from spider) system.normalize_path system.gettimeofday system.get_netinfo_property (Max OS X) system.usleep/nanosleep system.Memory (a class to read/write from mmap'ed or allocated memory) SDL
-
Shuffler
+