Reini Urban volunteered to show the features of the
cperl fork of
the Perl language. He began the presentation talking about the problems with
Perl 5, which spawned the Perl 6 project.
He stated that cperl is one of implementations of what's being called perl11. This is a movement to rewrite Perl 5 with some of the features developed for Perl 6.
The features that Reini demonstrated included:
- Shaped arrays
Declare an array with a fixed size. Access it normally, but built-ins that change the size of the array (
shift, etc.) don't work. Allows removal of automatic bounds checking in some instances. Works with types to make more efficient implementations in some cases.
- Fast overflow detection
Perl's numeric scalars automatically switch between integer and floating point representations internally as needed in some cases. This change can be triggered when an integer increases to larger than can be represented by the internal integer representation. This change makes detection of that overflow more efficient.
Support type checks at compile-type or run-time, whichever is possible. Evaluation of parameters is guaranteed to be left to right. Current implementation only understands core types. The return type is declared as an attribute of the
suband supports both core and user-defined types.
- Attributes for optimizing function calls
- Static loop optimizations for shaped arrays
Since the size of a shaped array is known at compile-time, some optimizations are available that cannot apply to traditional Perl arrays.
- Remove bounds checking inside loops
- Convert static methods to
Under some circumstances, a method can be promoted to a method on a subclass early instead of walking the inheritance tree to find it.
Configis built-in and written in XS
The data in the
Confighash is knoow at installation time, so he generates a constant, perfect hash that is just loaded into memory instead of building a traditional hash dynamically.
- Unicode optimizations for size
- Hash improvements
Reini has done some extensive research into hash functions and believes he knows them better than almost anyone else. He compared the hashing techniques used by a number of other languages and has identified FNV1A as ideal for his purposes. It's very fast, but not secure against collisions. He argues that the secure property is not useful in hashing functions used for hashes.
He described different techniques for dealing with hash table collisions. He also discussed the rate at which the hash table fills, and different approaches for growing the vector containing the table.
As usual, Reini's presentation was heavy on implementation and design details. If you are not the kind of person who enjoys data structures, the hashing section would probably make your eyes glaze over. Fortunately, the audience had quite a few data structure wonks this time. The audience asked some pretty insightful questions and pushed Reini on the explanations, until we understood his trade-offs.
We had 7 people attending this month. As always, we'd like to thank cPanel, Inc. for providing the meeting space and food for the group.