Pike 8.1: Changes since Pike 8.0 (scratch area for future release notes) |
---------------------------------------------------------------------- |
|
New language features |
--------------------- |
|
o Unlimited character constant size. |
|
There is no longer any limit to the size of character constants, |
e.g. 'acdefghijk' creates the bignum 0x61636465666768696a6b. |
|
o 'auto' type added. |
|
This is much like a strict typed mixed. The actual type is deduced |
compile-time. |
|
The main use case is as variables in foreach when looping over |
complexly typed values, or as types in macro-defined functions and |
such. |
|
auto can be used as return type for a function, it will be the |
logical or of all the types of the return statements in the |
function. |
|
o typeof(X) can now be used as a type. |
|
The main use case is in macros, but it might be useful for other |
things as well (as an example in a typedef). |
|
typedef typeof(Val.true)|typeof(Val.false) bool; |
|
typeof, when used like this, behaves very much like the C++ |
decltype() expression. |
|
o Random rewrite |
|
The random functions have been rewritten to ensure security by |
default. random_string() and random() now gets its data directly |
from the operating system random generator, e.g. /dev/urandom on |
unix. This is about half the speed compared with the random_string |
function in Pike 8.0, but is now as secure as the system random |
generator. |
|
For consumers of random data that have additional requirements, |
different random generators are exposed in the new module |
Random. The module have the following generators. |
|
- Random.Interface |
|
This is not actually a generator, but an interface class that is |
inherited into all the other generators. It contains code that can |
turn the output from the random_string method into random numbers |
with different limits without introducing bias. It also contains |
code for all the different variants of random() on different |
types. This is currently not possible to implement in Pike code, |
as the typing is too complicated and it is not possible to access |
private/protected _random methods in objects. |
|
- Random.System |
|
This generator maps directly on top of the system random |
generator. This is the default generator used for random() and |
random_string(). |
|
- Random.Deterministic |
|
This generator cretes the same sequence of random numbers for a |
given seed, with good pseudo random properties. |
|
- Random.Hardware |
|
This generator accesses he hardware random generator, when |
available. |
|
- Random.Fast |
|
This generator takes entropy from the Random.System, but feeds |
that into a cryptographic pseudo random number generator to be |
able to output data fast. This is not the default random number |
generator to avoid loading crypto code all the times. |
|
Comparing the different generators with eachother gives the |
following approximate speeds on a Linux system with hardware random |
support. |
|
Random.System 1.0 |
Pike 8.0 random_string 0.45 |
Random.Hardware 0.25 |
Random.Fast 0.20 |
Random.Deterministic 0.20 |
|
|
Incompatible changes |
-------------------- |
|
o Gz.crc32 now only returns positive results. |
|
Removed features and modules |
---------------------------- |
|
o Compatibility for Pike versions before 7.8 is no longer available. |
|
o GTK1 library is deprecated, so glue code is removed. |
|
|
New modules |
----------- |
|
o ADT.Scheduler |
o ADT.TreeScheduler |
o Filesystem.Zip |
o Stdio.FakePipe |
o Parser.Markdown |
|
o Crypto.Checksum |
|
This module collect non-cryptographic checksums. Support for crc32, |
adler32 and Castagnoli CRC (CRC32C). |
|
o Protocols.HTTP2 |
o Bittorrent.DHT |
o MsgPack |
|
New features |
------------ |
|
o Gmp.mpf is now implemented using gmpf if the library is available. |
|
C-level API changes |
------------------- |
|
o The contract for functions is now changed so that a function is no |
longer required to clean the stack. The topmost value of the stack |
will be regarded as the return value and the rest of the items on |
the stack, compared to before the function arguments were pushed, |
will be popped and discarded. Efuns still have to clean their stack |
as previously. |
|
Building and installing |
----------------------- |
|
o GMP 4.1 or later is now required. |
|
o C99 assumed |
|
The configure tests will not check for functions defined in C99 |
anymore and C99 compiler support is assumed. |
|