@@ -10,32 +10,35 @@ cperl started Feb. 2015 when `:const` was added, parrot was killed and
1010it became clear that optimizing for fun is better than waiting for
1111someone else to allow it.
1212
13- Currently it is about 20% faster than perl5 overall, >2x faster
14- then 5.14 and uses the least amount of memory measured since 5.6,
15- i.e. less than 5.10 and 5.6.2, which were the previous leaders. While
16- perl5.22 uses the most memory yet measured. cperl 5.24 is about 2x faster
17- than 5.22. Function calls with signatures are 2x faster, normal functions with a
18- ` my(..) = @_; ` prolog are automatically promoted to signatures.
13+ Currently it is about 20% faster than perl5 overall, >2x faster then
14+ 5.14 and uses the least amount of memory measured since 5.6, i.e. less
15+ than 5.10 and 5.6.2, which were the previous leaders. While perl5.22
16+ uses the most memory yet measured. cperl 5.24 and 5.26 is about 2x
17+ faster than 5.22 in bigger real-world applications. Esp. function
18+ calls with signatures are 2x faster, normal functions with a `my(..) =
19+ @_ ;` prolog are automatically promoted to signatures.
1920
2021But not all of the wanted features are merged. The plan is to support
2122most perl5-compatible perl6 features (* "do not break CPAN"* ), improve
2223performance and memory usage, re-establish compiler (` B::C ` ) support,
2324re-establish perl5 core development which essentially stopped 2002,
24- use perl6-like development policies, and better security fixes and
25- maintenance than the upstream p5p perl5. See [ README.cperl] ( perlcperl.html ) .
25+ use perl6-like development policies, better security fixes and
26+ maintenance than the upstream p5p perl5, and stop the ongoing
27+ destruction going on in p5p. See [ README.cperl] ( perlcperl.html ) .
2628
2729There's no class keyword yet as this needs proper field and method
2830handling, multi-dispatch, aggregate type handling and class
2931finalization, which is not yet finished. But classes are user-facing
30- types, and type-support is builtin.
32+ types, and type-support is builtin. use base and use fields were
33+ improved to behave almost like classes.
3134
3235Tested and developed on linux and darwin 64bit. darwin 32bit fails
3336on two unrelated core tests (issignaling setpayloadsig + chmod linked in).
3437Windows is smoked with MSVC 10 and 12 for 32 and 64bit.
3538
3639The current stable release is
3740 [ 5.24.2c] ( https://github.com/perl11/cperl/releases/tag/cperl-5.24.2 ) - [ perl5242cdelta] ( perl5242cdelta.html ) ,
38- the latest development release [ 5.25.2c ] ( https://github.com/perl11/cperl/releases/tag/cperl-5.25.2 ) - [ perl5252cdelta ] ( perl5252cdelta .html) .
41+ the latest development release [ 5.25.3c ] ( https://github.com/perl11/cperl/releases/tag/cperl-5.25.3 ) - [ perl5253cdelta ] ( perl5253cdelta .html) .
3942We also have [ 5.22.4c] ( https://github.com/perl11/cperl/releases/tag/cperl-5.22.4 ) , [ perl5224cdelta] ( perl5224cdelta.html ) .
4043
4144All tests pass. CPAN works.
@@ -49,13 +52,17 @@ Patches are needed for `Module::Build`, `IO::Socket::SSL` and `Net::SSLeay`.
4952sloppy types there neither. See below for * Known Problems* .
5053
5154This is still much less than with a typical major perl5 release, and
52- the patches are all provided in my
53- [ rurban/distroprefs] ( https://github.com/rurban/distroprefs/ ) , so the
55+ the patches are all provided in my [ rurban/distroprefs] ( https://github.com/rurban/distroprefs/ ) , so the
5456upgrade is seemless. E.g. Test2 (the new Test::Simple) broke >15
55- modules without any patches.
57+ modules without any patches. Test2 is not yet supported, as it is still 20% slower,
58+ and has no significant benefit over the old Test-Simple.
5659
57- v5.24.0c, v5.24.1c and v5.24.2c have [ about 24 fixes] ( perldelta.html#Known-Problems-fixed-elsewhere ) , for problems which are not fixed in perl-5.24.1.
58- Ditto cperl-5.22.4c has about 20 fixes which are not in the latest perl-5.22.3.
60+ v5.24.0c, v5.24.1c and v5.24.2c have
61+ [ about 24 fixes] ( perldelta.html#Known-Problems-fixed-elsewhere ) , for
62+ problems which are not fixed in perl-5.24.1. Ditto cperl-5.22.4c has
63+ about 20 fixes which are not in the latest perl-5.22.3. Since cperl
64+ development is about 10x faster than p5p development, these numbers do
65+ increase over time.
5966
6067![ Memory usage: perl -e0] ( cperl-m0.png )
6168
@@ -73,6 +80,7 @@ For all versions see [bench-all/](bench-all/index.html)
7380* signatures are 2x faster, not 2x slower as with 5.24 or almost as slow
7481 as without as with 5.26.
7582* function return types declarations as attribute
83+ * type-check assignments, since 5.26 also for user-types
7684* many more builtin function attributes
7785* shaped arrays with compile-time checks and optims
7886* static loop optims, eliminated run-time bounds checks
@@ -87,7 +95,7 @@ For all versions see [bench-all/](bench-all/index.html)
8795 still fast.
8896* cperl has besides java the only secure hash table implementation of all popular
8997 dynamic scripting languages or static languages with internal hash table support.
90- other secure hash tables are only found in glibc, bsd or unix kernels or various
98+ Other secure hash tables are only found in glibc, bsd or unix kernels or various
9199 public services.
92100* seperate XS and PP XS calls dynamically with a new enterxssub op
93101* -DI and -Dk
@@ -130,7 +138,11 @@ For all versions see [bench-all/](bench-all/index.html)
130138* undeprecate qw-as-parens with for. 'for qw(a b c) { print }' works again.
131139* constant fold unpack in scalar context
132140* range works with unicode characters
141+ * length and ref are optimized in boolean context
133142* UNITCHECK global phase introspection
143+ * base/fields classes behave now like closed cperl classes: The ISA is readonly,
144+ inheritance checks are performed at compile-time already. More support for
145+ closed classes, esp. restricted stashes and readonly ISA.
134146
135147Most of them only would have a chance to be merged upstream if a p5p
136148committer would have written it.
@@ -294,20 +306,21 @@ are limited. So they are based on master.
294306
295307 works for the compiler, but does not do COW yet, i.e. slower for
296308 uncompiled perls, faster for compiled.
309+ The upstream COW implementation is still a complete mess.
297310
298311* [ feature/CM-367-cperl-warnings-xs-carp] ( http://github.com/perl11/cperl/commits/feature/CM-367-cperl-warnings-xs-carp )
299312* [ feature/CM-367-cperl-carp-builtin] ( http://github.com/perl11/cperl/commits/feature/CM-367-cperl-carp-builtin )
300313* [ feature/gh9-warnings-xs] ( https://github.com/perl11/cperl/issues/9 )
301314
302315 [ code] ( http://github.com/perl11/cperl/commits/feature/gh9-warnings-xs )
303316
304- much faster and much less memory, but 3 minor scope test fails.
317+ much faster and much less memory, but 3 minor scope tests fails.
305318
306319* [ feature/gh6-no-miniperl] ( https://github.com/perl11/cperl/issues/6 )
307320
308321 [ code] ( http://github.com/perl11/cperl/commits/feature/gh6-no-miniperl )
309322
310- Need to fix some Makefile deps and break cross-references
323+ Need to fix some Makefile deps and break cross-references.
311324
312325* [ feature/CM-626-cperl-use-dots] ( http://github.com/perl11/cperl/commits/feature/CM-626-cperl-use-dots )
313326
@@ -321,7 +334,7 @@ are limited. So they are based on master.
321334
322335 [ code] ( http://github.com/perl11/cperl/commits/feature/gh102-smallhash )
323336
324- optimize the speed for small hashes.
337+ optimize the speed for small hashes, less keys .
325338
326339* [ feature/gh176-unexec] ( https://github.com/perl11/cperl/issues/176 )
327340
@@ -339,7 +352,7 @@ and various [hash tables refactorings]((https://github.com/perl11/cperl/issues/2
339352
340353feature/gh24-base-hash feature/gh24-he-array feature/gh24-oldnew-hash-table
341354featurex/gh24-array_he featurex/gh24-hash-loop featurex/gh24-hash-loop+utf8
342- featurex/gh24-hash-utf8
355+ featurex/gh24-hash-utf8.
343356
344357## A bit more work is needed for
345358
@@ -369,13 +382,14 @@ They also revert some wrong decisions p5p already made.
369382 [ code] ( http://github.com/perl11/cperl/commits/feature/gh24-new-hash-table )
370383
371384 lots of small attempts, but still too hairy. needs a complete hash table rewrite.
385+ getting there, but not yet finished for 5.26.
372386
373387* [ feature/gh16-multi] ( https://github.com/perl11/cperl/issues/16 )
374388
375389 [ code] ( http://github.com/perl11/cperl/commits/feature/gh16-multi )
376390
377- class, method and multi keywords but no dispatch, subtyping and type checks yet.
378- in work.
391+ class, method, multi, has keywords but no dispatch, subtyping and type checks yet.
392+ in work. HvCLASS merged to master with 5.26.
379393
380394* various more hash tables:
381395
@@ -384,10 +398,11 @@ They also revert some wrong decisions p5p already made.
384398
385399## Soon
386400
387- * user facing classes, multiple dispatch (fast for binary, slow for mega)
401+ * user facing classes, multiple dispatch (fast for binary, slow for mega),
402+ internal-only pseudohashes.
388403
389404* builtin macros
390405
391406* builtin ffi
392407
393- 2016-12-16 rurban
408+ 2017-02-20 rurban
0 commit comments