-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathSTATUS.html
499 lines (384 loc) · 24.1 KB
/
STATUS.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
<h1>cperl status</h1>
<p><a href="https://travis-ci.org/perl11/cperl"><img src="https://travis-ci.org/perl11/cperl.svg?branch=master" alt="Build Status" /></a> <a href="https://scan.coverity.com/projects/perl11-cperl"><img src="https://scan.coverity.com/projects/6933/badge.svg" alt="Coverity Status" /></a> <a href="perl11.github.io/cperl/STATUS.html">perl11.github.io/cperl/STATUS.html</a> <a href="https://github.com/users/rurban/sponsorship">Sponsor</a> <a href="http://isitmaintained.com/project/perl11/cperl" title="Average time to resolve an issue"><img src="http://isitmaintained.com/badge/resolution/perl11/cperl.svg" alt="Average time to resolve an issue" /></a> <a href="http://isitmaintained.com/project/perl11/cperl" title="Percentage of issues still open"><img src="http://isitmaintained.com/badge/open/perl11/cperl.svg" alt="Percentage of issues still open" /></a></p>
<p>The name <strong>cperl</strong> stands for <strong>a perl with classes, types, compiler
support, continuation of perl5 development</strong> or just a <strong>company-friendly
perl</strong>.</p>
<p>cperl started Feb. 2015 when <code>:const</code> was added, parrot was killed and
it became clear that optimizing for fun is better than waiting for
someone else to allow it, and the ongoing destruction has to be
stopped, even if it will cause a massive blame game.</p>
<p>Currently it is about 20% faster than perl5 overall, >2x faster then
5.14 and uses the least amount of memory measured since 5.6, i.e. less
than 5.10 and 5.6.2, which were the previous leaders. While perl5.22
uses the most memory yet measured. cperl 5.24-5.28 are about 2x
faster than 5.22 in bigger real-world applications. Esp. function
calls with signatures are 2x faster, normal functions with a <code>my(..) =
@_;</code> prolog are automatically promoted to signatures.</p>
<p>But only a minor number of needed features are yet merged. The plan
was to support most perl5-compatible perl6 features (<em>"do not break
CPAN"</em>), improve performance and memory usage, re-establish compiler
(<code>B::C</code>) support, re-establish perl5 core development which
essentially stopped 2002, use perl6-like development policies, better
security fixes and maintenance than the upstream p5p perl5, and stop
the ongoing destruction going on in p5p. See <a href="perlcperl.html">README.cperl</a>.</p>
<p>Almost perl6-like classes, roles, methods, fields. classes are
user-facing types, and support for types, restricted stashes and fast
fields is builtin.</p>
<p>Tested and developed on linux and darwin 64bit. darwin 32bit fails
on two unrelated core tests (issignaling setpayloadsig + chmod linked in).
Windows is smoked with mingw, cygwin and MSVC 10 and 12 for 32 and 64bit.
The BSD's and Solaris are only tested before a release.</p>
<p>The current stable releases are</p>
<ul>
<li><a href="https://github.com/perl11/cperl/releases/tag/cperl-5.30.0">5.30.0c</a> - <a href="perl5300cdelta.html">perl5300cdelta</a>.</li>
<li><a href="https://github.com/perl11/cperl/releases/tag/cperl-5.28.2">5.28.2c</a> - <a href="perl5282cdelta.html">perl5282cdelta</a>.</li>
<li><a href="https://github.com/perl11/cperl/releases/tag/cperl-5.26.5">5.26.5c</a> - <a href="perl5265cdelta.html">perl5265cdelta</a>.</li>
</ul>
<p>We also have:</p>
<ul>
<li><a href="https://github.com/perl11/cperl/releases/tag/cperl-5.24.4">5.24.4c</a> - <a href="perl5244cdelta.html">perl5244cdelta</a>,</li>
<li><a href="https://github.com/perl11/cperl/releases/tag/cperl-5.22.5">5.22.5c</a> - <a href="perl5225cdelta.html">perl5225cdelta</a>.</li>
</ul>
<p>All tests pass. CPAN works.
Some fixes in my <a href="https://github.com/rurban/distroprefs/">rurban/distroprefs</a> repo for certain CPAN modules are needed.</p>
<p>v5.24.0c, v5.24.1c and v5.24.3c have
<a href="perldelta.html#Known-Problems-fixed-elsewhere">about 24 fixes</a>,
for problems which are not fixed in perl-5.24.1. Ditto with 5.26,
cperl-5.22.4c had about 20 fixes which were not in perl-5.22.3.
Similar numbers for v5.30.0c, as p5p is continuously
adding more API, security and performance problems than fixing.
Since cperl development is about 10x faster than p5p
development, and damage done within p5p increases, these numbers do
increase over time.</p>
<p><img src="cperl-m0.png" alt="Memory usage: perl -e0" /></p>
<p><img src="cperl-p0.png" alt="Memory usage: with Config_heavy" /></p>
<p><img src="cperl-p1.png" alt="Memory usage with unicode s///i" /></p>
<p><a href="bench-all/index.html"><img src="cperl-bench30.png" alt="Benchmarks" /></a>
For all versions see <a href="bench-all/index.html">bench-all/</a></p>
<h1>In the latest stable releases are the following major features:</h1>
<ul>
<li>coretypes (Int, UInt, Num, Str. lowercase native types accepted)</li>
<li>types in signatures as designed and also as attribute.</li>
<li>signatures are 2x faster, not 2x slower as with 5.24 or almost as slow
as without as with 5.26.</li>
<li>function return types declarations as attribute</li>
<li>type-check assignments, since 5.26 also for user-types</li>
<li>many more builtin function attributes</li>
<li>shaped arrays with compile-time checks and optims</li>
<li>static loop optims, eliminated run-time bounds checks, faster loops</li>
<li>fast arithmetic overflow</li>
<li>convert static method to subs</li>
<li>Config as XS</li>
<li>strict, attributes, DynaLoader, XSLoader as builtin packages, rewritten in C.
Security fixes for DynaLoader.</li>
<li>changed default hash function to the fastest FNV1A <em>(as in the stableperl fork)</em></li>
<li>changed the hash collision strategy from randomize to the usual move-to-front</li>
<li>changed the default hash fill rate from 100% to 90%. It's tunable via ccflags and
still fast.</li>
<li>cperl has besides java the only secure hash table implementation of all popular
dynamic scripting languages or static languages with internal hash table support.
Other secure hash tables are only found in glibc, bsd or unix kernels or various
public services. It's still the slowest and worst written though.</li>
<li>seperate XS and PP XS calls dynamically with a new enterxssub op</li>
<li>-DI and -Dk</li>
<li>added many unicode ops</li>
<li>improved build system (make -s, faster, CC vs LD confusion)</li>
<li>hash keys keep the tainted info. see <a href="http://perldoc.perl.org/perlsec.html#Taint-mode">perlsec</a>
There are no known taint loopholes anymore.</li>
<li>fixes ops and modules using lexical <code>$_</code>. The lexical topic feature is supported.</li>
<li>fixed the encoding pragma, it is undeprecated.</li>
<li>readonly packages can be cloned with threads.</li>
<li>security and overlarge data fixes for Storable and YAML.</li>
<li>include B::C (the compiler), Cpanel::JSON::XS, YAML::Safe, Devel::NYTProf, Term::ReadKey</li>
<li>improved redefined warnings.</li>
<li>cperl specific toolchain modules, with support for cperl-only module.
versions with a 'c' suffix, and 10x faster JSON and YAML usage. (esp. with cpan).</li>
<li>many typed and modernized core modules, where signatures and types make
sense and cause not much trouble.</li>
<li>many security fixes for Unicode symbols. no mixed scripts, normalized, no \0.</li>
<li>handle method calls on protected stashes.</li>
<li>disallow silent overflows of hash and array indices or string/name lengths.
New "Too many elements" error and many new "overlarge" or "too large" panics.</li>
<li>harmonize overlarge (>2GB) data, max. I64/I32 string and array lengths,
and U32 hash keys. You can properly access all elements, unlike with perl5.
Do not silently wrap around indices or counts, do not silently truncate
overlarge data as in perl5 upstream.</li>
<li>special handling for security warnings: protect against hash flood DoS. Warn on
all known public attacks, as metasploit bind/reverse shells or the Storable attack
with the new <code>warn_security</code> API.
Since v5.25.1c such security warnings are logged at STDERR/syslog with the
remote user/IP.</li>
<li>Support clang LTO "link time optimizations", using proper linkage attributes.
-fsanitize=cfi instead of -fstack-protector not yet.</li>
<li>Reproducible builds are default since v5.25.2c</li>
<li>Unicode <em>Moderately Restrictive Level</em> security profile for identifiers.
cperl is the only known unicode-enabled language following any
recommended security practice. python 3 does normalization but not any
restriction level. perl5+6, ruby, php, javascript, java, c#, python, julia,
haskell, lua, swift ... allow all insecure confusable characters and arbitrary
mixed scripts in identifiers.</li>
<li>undeprecate qw-as-parens with for. 'for qw(a b c) { print }' works again.</li>
<li>constant fold unpack in scalar context</li>
<li>UNITCHECK global phase introspection</li>
<li>base/fields classes behave now like closed cperl classes: The ISA is readonly,
inheritance checks are performed at compile-time already.</li>
<li>Support restricted stashes, i.e. closed classes, esp. method lookup, destruction
and readonly ISA.</li>
<li>study with HASH, ARRAY, CODE</li>
<li>enhanced dtrace probes</li>
<li>support for long path names, > 4096</li>
<li>support for unicode BOMs, setting the unicode hints</li>
<li>Fast and proper object orientation. User facing classes. class, role, method,
multi, has, is, does keywords, proper fields, Mu superclass.</li>
<li>thread-safety on darwin for uselocale</li>
<li>hash slice consistency, no autovivification as sub args</li>
<li>no perl4 <code>'</code> package seperator, <code>'</code> was illegal with 5.26c, and later not
expanded to <code>::</code> anymore</li>
<li>warn when hash keys are changed during iteration, use hashiter;</li>
<li>Less m/{}/ Unescaped left brace in regex is deprecated here warnings</li>
<li>keep utf8 flag for method names</li>
<li>ffi - a builtin foreign function interface</li>
<li>defaults to -flto compilation "Link Time Optimization"</li>
<li>many more and much better dump functions.</li>
</ul>
<p>Most of them only would have a chance to be merged upstream if a p5p
committer would have written it.</p>
<p>But some features revert decisions p5p already made. See
<a href="perlcperl.html">README.cperl</a>. When in doubt I went with the
decisions and policies perl6 decided on and perl5 made before 2001,
before p5p went downwards. It is very unlikely that p5p will revert
their own design mistakes. It never happened so far.</p>
<h1>Installation</h1>
<h2>From source</h2>
<p>Download the latest .tar.gz or .tar.bz2 from <a href="https://github.com/perl11/cperl/releases/">github.com/perl11/cperl/releases/</a></p>
<pre><code>tar xfz cperl-5.VER
cd cperl-5.VER
./Configure -sde
make -s -j4 test
sudo make install
</code></pre>
<h2>rpm</h2>
<p>add this file to <code>/etc/yum.repos.d/perl11.repo</code>, with either <code>el6</code> or <code>el7</code>.
<code>el6</code> for Centos6 and older Fedora and RHEL, <code>el7</code> for Centos7 and newer variants.</p>
<pre><code>[perl11]
name=perl11
baseurl=http://perl11.github.io/rpm/el7/$basearch
enabled=1
gpgkey==http://perl11.github.io/rpm/RPM-GPG-KEY-rurban
gpgcheck=1
</code></pre>
<p>run as root: <code>yum update; yum install cperl</code></p>
<h2>debian</h2>
<p>add this file to <code>/etc/apt/sources.list.d/perl11.list</code></p>
<pre><code>deb http://perl11.github.io/deb/ sid main
</code></pre>
<p>run as root:</p>
<pre><code>apt update
wget http://perl11.github.io/deb/rurban.gpg.key
apt-key add rurban.gpg.key
apt install cperl
</code></pre>
<h2>osx</h2>
<p>download the pkg installer from <a href="http://perl11.github.io/osx/">http://perl11.github.io/osx/</a></p>
<h2>windows</h2>
<p>download the self-extracting zip from <a href="http://perl11.github.io/win/">http://perl11.github.io/win/</a>
and install it into <code>C:\cperl</code> via the <code>cperl-5.26.1.3407-win32.exe -InstallPath="C:\\cperl"</code>
cmdline option, or install the latest msvc <code>.zip</code> or mingw <code>.tar.xz</code> files.
Preferred is now mingw, which works fine parallel to the current strawberry perl
installation.</p>
<h1>Known bugs</h1>
<p>The -d debugger fails on most signatures.</p>
<p>See the github issues: <a href="https://github.com/perl11/cperl/issues?q=is%3Aissue+is%3Aopen+label%3Abug">github.com/perl11/cperl/issues</a></p>
<p>The following CPAN modules have no patches for 5.28.0c yet:</p>
<ul>
<li>autovivification (mderef rpeep changes)</li>
<li>TryCatch</li>
<li>Catalyst::Runtime</li>
</ul>
<p>Time::Tiny, Date::Tiny, DateTime::Tiny feature DateTime::locale broken
since 5.22. Unrelated to cperl, -f force install.</p>
<p>Many other packages clash with an unneeded mix of Test::More in inc/
or t/. Some other use wrong undocumented Test-Simple calls, which the
modernized improvement complains about, or use Test2, which is
unsupported and not recommended to use in its current state.
In a Test2 branch is a fixed version which is still 20% slower.</p>
<h1>Known problems</h1>
<p>Since 5.24.1c with some modernized core modules some signatures are
pretty strictly typed to catch wrong usages and enforce better code.
See the <code>Test::More::skip()</code> <a href="https://github.com/perl11/cperl/issues/153#issuecomment-224515895">FAQ</a> or below.
Patches are needed for <code>Module::Build</code>, <code>IO::Socket::SSL</code> and <code>Net::SSLeay</code>.</p>
<ul>
<li>-d debugging with signatures is mostly broken.</li>
<li>Stricter Test::More::skip</li>
<li>Stricter Test::More types and API</li>
<li>Readonly Config (XSConfig), use Mock::Config instead.
(<em>also affects perl5 with the XSConfig module</em>)</li>
<li>Readonly use base @ISA (<em>since 5.26.0c</em>)</li>
<li>%hash = map under <a href="/blog/strict-hashpairs.html">use strict</a> (hashpairs since 5.27.0)</li>
<li>subroutine names with <code>'</code> where illegal with 5.26c.</li>
<li>Incomplete OO: native classes, eval, mop. inlining not yet fully implemented.</li>
</ul>
<p>Breakage is much less than with a typical major perl5 release, and the
patches for most common CPAN modules are provided in
my <a href="https://github.com/rurban/distroprefs/">rurban/distroprefs</a>, so
the upgrade is seemless.
E.g. Test2 (the new Test::Simple) broke >15 modules without any
patches. Test2 is not yet supported, as it is still 20% slower, and
has no significant benefit over the old Test-Simple. And they chose to break
the API and performance, instead of letting users select the new Test2 module.</p>
<p>Beware of modules with <code>inc/Test</code>. This is broken. Remove this dir and try
to reinstall again.</p>
<h1>FAQ</h1>
<h2>Test::More::skip errors</h2>
<p><strong>skip</strong> has the historical problem of mixed up arguments of <code>$why</code>
and <code>$count</code>, so those arguments are now stricter typed to catch all
wrong arguments. At compile-time.</p>
<p>When you use one or two args for <code>Test::More::skip()</code>, they need to
properly typed.</p>
<p>I.e.</p>
<p><strong>Mandatory:</strong></p>
<pre><code>skip $why, 1 => skip "$why", 1
plan tests => 1;
SKIP: { skip } => SKIP: { skip "", 1; }
</code></pre>
<p><strong>Recommended:</strong></p>
<pre><code>skip "why", scalar(@skips) => skip "why", int(@skips)
skip "why", 2*$skips => skip "why", int(2*$skips)
</code></pre>
<p><strong>Rationale</strong>:</p>
<p><code>skip()</code> is a special case that the two args are very often mixed
up. This error had previously to be detected at run-time with a
fragile \d regex check. And in most cases this problem was never
fixed, e.g. in <code>Module::Build</code>.</p>
<p>Only with checking for strict types I could detect and fix all of the
wrong usages, get rid of the unneeded run-time check, the code is
better, all errors are detected at compile time, and not covered at
run-time and with the new strict types the code is much more readable,
what is the <code>str $why</code> and what the <code>UInt $count</code> argument.</p>
<p><strong>When the <code>$count</code> can be optional</strong></p>
<p>The Test::More docs state the following:
<em>It's important that $how_many accurately reflects the number of tests
in the SKIP block so the # of tests run will match up with your plan.
If your plan is no_plan $how_many is optional and will default to 1.</em></p>
<p>I.e. Only with plan tests => 'no_plan' a bare skip is allowed.</p>
<p><code>$count</code> can never be a NV, thus <code>:Numeric</code> (which would allow
<code>2*$skip</code>) is wrong. It needs to be <code>:UInt</code>. The used range op
(<code>pp_flip</code>) would die at run-time with a overflowed number. <code>die
"Range iterator outside integer range"</code>. <code>$count := -1</code> will lead to
test timeouts.</p>
<p>Note that cperl doesn't yet check <code>UInt</code> types at run-time for
negative values. This might change in later versions with the <code>use
types</code> pragma. For now the <code>$count</code> type is relaxed to <code>:Numeric</code> to
permit simple arithmetic.</p>
<p><code>scalar(@array)</code> for array or hash length is also bad code, it needs
to be replaced with <code>int(@array)</code>. Such a length can never be a NV or
PV, it is always a UInt. Using <code>int()</code> is clearer and better, at least
for cperl.</p>
<p>This is also the answer to the question why <code>scalar(@array)</code> is
considered bad, and why counts and lengths cannot overflow.</p>
<h1>Branch overview</h1>
<h2>Older bugfixes for perl5 upstream</h2>
<ul>
<li><a href="http://github.com/perl11/cperl/commits/merge-upstream">merge-upstream</a></li>
</ul>
<p>This could have been easily taken up upstream, was already perlbug'ed and
published, and did not violate any of the p5p commit policies and
previous decisions. From those 47 patches 2 were taken, some
were rejected and 2 were butchered, i.e. rewritten in a worse way.</p>
<h2>Almost ready branches, only minor tests are failing</h2>
<p>Those branches could have theoretically been merged upstream, but the chances
are limited. So they are based on master.</p>
<ul>
<li><p><a href="https://github.com/perl11/cperl/issues/23">feature/gh23-inline-subs</a></p>
<p><a href="http://github.com/perl11/cperl/commits/feature/gh23-inline-subs">code</a></p>
<p>Almost done. Already used for roles. Some minor compiler fixes needed.</p></li>
<li><p>feature/unroll-loops</p>
<p><a href="http://github.com/perl11/cperl/commits/feature/unroll-loops">code</a></p>
<p>depends on feature/gh23-inline-subs</p></li>
<li><p><a href="https://github.com/perl11/cperl/issues/8">bugfix/gh8-cowrefcnt</a></p>
<p><a href="http://github.com/perl11/cperl/commits/bugfix/gh8-cowrefcnt">code</a></p>
<p>works for the compiler, but does not do COW yet, i.e. slower for
uncompiled perls, faster for compiled.
The upstream COW implementation is still a complete mess.</p></li>
<li><p><a href="http://github.com/perl11/cperl/commits/feature/CM-367-cperl-warnings-xs-carp">feature/CM-367-cperl-warnings-xs-carp</a></p></li>
<li><a href="http://github.com/perl11/cperl/commits/feature/CM-367-cperl-carp-builtin">feature/CM-367-cperl-carp-builtin</a></li>
<li><p><a href="https://github.com/perl11/cperl/issues/9">feature/gh9-warnings-xs</a></p>
<p><a href="http://github.com/perl11/cperl/commits/feature/gh9-warnings-xs">code</a></p>
<p>much faster and much less memory, but 3 minor scope tests fails.</p></li>
<li><p><a href="https://github.com/perl11/cperl/issues/21">feature/gh21-exact_arith_num</a></p>
<p><a href="http://github.com/perl11/cperl/commits/feature/gh21-exact_arith_num">code</a>
q</p></li>
<li><p><a href="https://github.com/perl11/cperl/issues/6">feature/gh6-no-miniperl</a></p>
<p><a href="http://github.com/perl11/cperl/commits/feature/gh6-no-miniperl">code</a></p>
<p>Need to fix some Makefile deps and break cross-references.</p></li>
<li><p><a href="http://github.com/perl11/cperl/commits/feature/CM-626-cperl-use-dots">feature/CM-626-cperl-use-dots</a></p>
<p>works, but unsure if good enough. <code>.</code> instead of <code>-></code> works only for
a few method calls and clashes with string concat. A disruptive
design decision, which probably cannot be backported. Chip has a
perl6-like patch which changes <code>.</code> to <code>~</code> for string concat also,
but this doesn't accept valid perl5 syntax then. A blocker.</p></li>
<li><p><a href="https://github.com/perl11/cperl/issues/102">feature/gh102-smallhash</a></p>
<p><a href="http://github.com/perl11/cperl/commits/feature/gh102-smallhash">code</a></p>
<p>optimize the speed for small hashes, less keys, inline 3-7 as array.
esp. needed for the new objects. redis has a limit of 256 (zipmap)
favoring linear search over hash lookups. with those we could think
of using hashes again more often. now they are way too slow for everything.</p></li>
<li><p><a href="https://github.com/perl11/cperl/issues/176">feature/gh176-unexec</a></p>
<p><a href="http://github.com/perl11/cperl/commits/feature/gh176-unexec">code</a></p>
<p>compile/dump to native code via emacs unexec, on most platforms.
Questionable if to keep our private malloc soon.</p></li>
<li><p><a href="https://github.com/perl11/cperl/issues/141">feature/gh141-smallstring</a></p>
<p><a href="http://github.com/perl11/cperl/commits/feature/gh141-smallstring">code</a></p>
<p>optimize space for small strings.</p></li>
</ul>
<p>and various <a href="https://github.com/perl11/cperl/issues/24">hash tables refactorings</a>.
See below.</p>
<ul>
<li><p><a href="https://github.com/perl11/cperl/issues/205">feature/gh205-Test2</a></p>
<p><a href="http://github.com/perl11/cperl/commits/feature/gh205-Test2">code</a></p></li>
<li><p><a href="https://github.com/perl11/cperl/issues/21">feature/gh21-locale-hints</a></p>
<p><a href="http://github.com/perl11/cperl/commits/feature/gh21-locale-hints">code</a></p></li>
<li><p>feature/iassign - iassign superop</p>
<p><a href="http://github.com/perl11/cperl/commits/feature/iassign">code</a></p></li>
</ul>
<h2>A bit more work is needed for</h2>
<p>These are major new features, and have no chance to be merged upstream.
They also revert some wrong decisions p5p already made.</p>
<ul>
<li><p><a href="https://github.com/perl11/cperl/issues/16">gh16-multi-master</a></p>
<p>use mro on classes,
array and hash field syntax ($obj->array[0], $obj->hash{key}),
:before, :after, :around method composition,
class :native,
multiple dispatch (fast for binary, slow for mega),
tiny MOP (Metamodel::ClassHOW).</p></li>
<li><p><a href="https://github.com/perl11/cperl/issues/14">feature/gh14-native-types</a></p>
<p><a href="http://github.com/perl11/cperl/commits/feature/gh14-native-types">code</a></p>
<p>int, uint, num, str. unboxed data on the stack and pads. some minor
compiler fixes needed, esp. for typed pads. boxed or unboxed, that's
the question.</p></li>
<li><p><a href="http://github.com/perl11/cperl/commits/feature/CM-712-cperl-types-proto">feature/CM-712-cperl-types-proto</a></p>
<p>constant fold everything, not only with empty <code>()</code> protos.</p></li>
<li><p><a href="https://github.com/perl11/cperl/issues/24">feature/gh24-new-hash-table</a></p>
<p><a href="http://github.com/perl11/cperl/commits/feature/gh24-new-hash-table">code</a></p>
<p>lots of small attempts, but still too hairy. might need a complete hash table rewrite.
getting there, but not yet finished for 5.28. The goal is 5.30c.</p></li>
<li><p>various more hash tables:</p>
<p><a href="http://github.com/perl11/cperl/commits/featurex/gh24-one-word-ahe">featurex/gh24-one-word-ahe</a>,
<a href="http://github.com/perl11/cperl/commits/featurex/gh24-open-hash">featurex/gh24-open-hash</a>,
<a href="http://github.com/perl11/cperl/commits/featurex/gh24-hopscotch-hash">featurex/gh24-hopscotch-hash</a>
featurex/gh24-swiss-hash</p></li>
</ul>
<h2>Soon</h2>
<ul>
<li><p><a href="https://github.com/perl11/cperl/issues/220">the jit</a> code: <a href="http://github.com/perl11/cperl/commits/feature/gh220-llvmjit">feature/gh220-llvmjit</a></p></li>
<li><p><a href="https://github.com/perl11/cperl/issues/261">builtin macros</a></p></li>
<li><p><a href="https://github.com/perl11/cperl/issues/274">feature/gh274-lazyparse</a></p></li>
<li><p><a href="https://github.com/perl11/cperl/issues/333">feature/gh333-oplines</a></p></li>
<li><p><a href="https://github.com/perl11/cperl/issues/127">linear symbol table</a> (not nested stashes)
<a href="http://github.com/perl11/cperl/commits/feature/gh127-gvflat">feature/gh127-gvflat</a></p></li>
<li><p>optree linearization
<a href="http://github.com/perl11/cperl/commits/feature/oplinear">feature/oplinear</a></p></li>
</ul>
<p>--</p>
<p>2019-06-18 rurban</p>