Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / sam-t2 / devtools / v9 / man / man1 / perltodo.1
CommitLineData
920dae64
AT
1.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32
2.\"
3.\" Standard preamble:
4.\" ========================================================================
5.de Sh \" Subsection heading
6.br
7.if t .Sp
8.ne 5
9.PP
10\fB\\$1\fR
11.PP
12..
13.de Sp \" Vertical space (when we can't use .PP)
14.if t .sp .5v
15.if n .sp
16..
17.de Vb \" Begin verbatim text
18.ft CW
19.nf
20.ne \\$1
21..
22.de Ve \" End verbatim text
23.ft R
24.fi
25..
26.\" Set up some character translations and predefined strings. \*(-- will
27.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
28.\" double quote, and \*(R" will give a right double quote. | will give a
29.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
30.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
31.\" expand to `' in nroff, nothing in troff, for use with C<>.
32.tr \(*W-|\(bv\*(Tr
33.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
34.ie n \{\
35. ds -- \(*W-
36. ds PI pi
37. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
38. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
39. ds L" ""
40. ds R" ""
41. ds C` ""
42. ds C' ""
43'br\}
44.el\{\
45. ds -- \|\(em\|
46. ds PI \(*p
47. ds L" ``
48. ds R" ''
49'br\}
50.\"
51.\" If the F register is turned on, we'll generate index entries on stderr for
52.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
53.\" entries marked with X<> in POD. Of course, you'll have to process the
54.\" output yourself in some meaningful fashion.
55.if \nF \{\
56. de IX
57. tm Index:\\$1\t\\n%\t"\\$2"
58..
59. nr % 0
60. rr F
61.\}
62.\"
63.\" For nroff, turn off justification. Always turn off hyphenation; it makes
64.\" way too many mistakes in technical documents.
65.hy 0
66.if n .na
67.\"
68.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
69.\" Fear. Run. Save yourself. No user-serviceable parts.
70. \" fudge factors for nroff and troff
71.if n \{\
72. ds #H 0
73. ds #V .8m
74. ds #F .3m
75. ds #[ \f1
76. ds #] \fP
77.\}
78.if t \{\
79. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
80. ds #V .6m
81. ds #F 0
82. ds #[ \&
83. ds #] \&
84.\}
85. \" simple accents for nroff and troff
86.if n \{\
87. ds ' \&
88. ds ` \&
89. ds ^ \&
90. ds , \&
91. ds ~ ~
92. ds /
93.\}
94.if t \{\
95. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
96. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
97. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
98. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
99. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
100. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
101.\}
102. \" troff and (daisy-wheel) nroff accents
103.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
104.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
105.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
106.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
107.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
108.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
109.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
110.ds ae a\h'-(\w'a'u*4/10)'e
111.ds Ae A\h'-(\w'A'u*4/10)'E
112. \" corrections for vroff
113.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
114.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
115. \" for low resolution devices (crt and lpr)
116.if \n(.H>23 .if \n(.V>19 \
117\{\
118. ds : e
119. ds 8 ss
120. ds o a
121. ds d- d\h'-1'\(ga
122. ds D- D\h'-1'\(hy
123. ds th \o'bp'
124. ds Th \o'LP'
125. ds ae ae
126. ds Ae AE
127.\}
128.rm #[ #] #H #V #F C
129.\" ========================================================================
130.\"
131.IX Title "PERLTODO 1"
132.TH PERLTODO 1 "2006-01-07" "perl v5.8.8" "Perl Programmers Reference Guide"
133.SH "NAME"
134perltodo \- Perl TO\-DO List
135.SH "DESCRIPTION"
136.IX Header "DESCRIPTION"
137This is a list of wishes for Perl. The tasks we think are smaller or easier
138are listed first. Anyone is welcome to work on any of these, but it's a good
139idea to first contact \fIperl5\-porters@perl.org\fR to avoid duplication of
140effort. By all means contact a pumpking privately first if you prefer.
141.PP
142Whilst patches to make the list shorter are most welcome, ideas to add to
143the list are also encouraged. Check the perl5\-porters archives for past
144ideas, and any discussion about them. One set of archives may be found at:
145.PP
146.Vb 1
147\& http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/
148.Ve
149.PP
150What can we offer you in return? Fame, fortune, and everlasting glory? Maybe
151not, but if your patch is incorporated, then we'll add your name to the
152\&\fI\s-1AUTHORS\s0\fR file, which ships in the official distribution. How many other
153programming languages offer you 1 line of immortality?
154.SH "The roadmap to 5.10"
155.IX Header "The roadmap to 5.10"
156The roadmap to 5.10 envisages feature based releases, as various items in this
157\&\s-1TODO\s0 are completed.
158.Sh "Needed for a 5.9.4 release"
159.IX Subsection "Needed for a 5.9.4 release"
160.IP "\(bu" 4
161Review assertions. Review syntax to combine assertions. Assertions could take
162advantage of the lexical pragmas work. \*(L"What hooks would assertions need?\*(R"
163.Sh "Needed for a 5.9.5 release"
164.IX Subsection "Needed for a 5.9.5 release"
165.ie n .IP "* Implement ""_ prototype character""" 4
166.el .IP "* Implement ``_ prototype character''" 4
167.IX Item "Implement _ prototype character"
168.PD 0
169.ie n .IP "* Implement ""state variables""" 4
170.el .IP "* Implement ``state variables''" 4
171.IX Item "Implement state variables"
172.PD
173.Sh "Needed for a 5.9.6 release"
174.IX Subsection "Needed for a 5.9.6 release"
175Stabilisation. If all goes well, this will be the equivalent of a 5.10\-beta.
176.SH "Tasks that only need Perl knowledge"
177.IX Header "Tasks that only need Perl knowledge"
178.Sh "common test code for timed bail out"
179.IX Subsection "common test code for timed bail out"
180Write portable self destruct code for tests to stop them burning \s-1CPU\s0 in
181infinite loops. This needs to avoid using alarm, as some of the tests are
182testing alarm/sleep or timers.
183.Sh "\s-1POD\s0 \-> \s-1HTML\s0 conversion in the core still sucks"
184.IX Subsection "POD -> HTML conversion in the core still sucks"
185Which is crazy given just how simple \s-1POD\s0 purports to be, and how simple \s-1HTML\s0
186can be. It's not actually \fIas\fR simple as it sounds, particularly with the
187flexibility \s-1POD\s0 allows for \f(CW\*(C`=item\*(C'\fR, but it would be good to improve the
188visual appeal of the \s-1HTML\s0 generated, and to avoid it having any validation
189errors. See also \*(L"make \s-1HTML\s0 install work\*(R", as the layout of installation tree
190is needed to improve the cross\-linking.
191.PP
192The addition of \f(CW\*(C`Pod::Simple\*(C'\fR and its related modules may make this task
193easier to complete.
194.Sh "Parallel testing"
195.IX Subsection "Parallel testing"
196The core regression test suite is getting ever more comprehensive, which has
197the side effect that it takes longer to run. This isn't so good. Investigate
198whether it would be feasible to give the harness script the \fBoption\fR of
199running sets of tests in parallel. This would be useful for tests in
200\&\fIt/op/*.t\fR and \fIt/uni/*.t\fR and maybe some sets of tests in \fIlib/\fR.
201.PP
202Questions to answer
203.IP "1" 4
204.IX Item "1"
205How does screen layout work when you're running more than one test?
206.IP "2" 4
207.IX Item "2"
208How does the caller of test specify how many tests to run in parallel?
209.IP "3" 4
210.IX Item "3"
211How do setup/teardown tests identify themselves?
212.PP
213Pugs already does parallel testing \- can their approach be re\-used?
214.Sh "Make Schwern poorer"
215.IX Subsection "Make Schwern poorer"
216We should have for everything. When all the core's modules are tested,
217Schwern has promised to donate to \f(CW$500\fR to \s-1TPF\s0. We may need volunteers to
218hold him upside down and shake vigorously in order to actually extract the
219cash.
220.PP
221See \fIt/lib/1_compile.t\fR for the 3 remaining modules that need tests.
222.Sh "Improve the coverage of the core tests"
223.IX Subsection "Improve the coverage of the core tests"
224Use Devel::Cover to ascertain the core's test coverage, then add tests that
225are currently missing.
226.Sh "test B"
227.IX Subsection "test B"
228A full test suite for the B module would be nice.
229.Sh "A decent benchmark"
230.IX Subsection "A decent benchmark"
231\&\f(CW\*(C`perlbench\*(C'\fR seems impervious to any recent changes made to the perl core. It
232would be useful to have a reasonable general benchmarking suite that roughly
233represented what current perl programs do, and measurably reported whether
234tweaks to the core improve, degrade or don't really affect performance, to
235guide people attempting to optimise the guts of perl. Gisle would welcome
236new tests for perlbench.
237.Sh "fix tainting bugs"
238.IX Subsection "fix tainting bugs"
239Fix the bugs revealed by running the test suite with the \f(CW\*(C`\-t\*(C'\fR switch (via
240\&\f(CW\*(C`make test.taintwarn\*(C'\fR).
241.Sh "Dual life everything"
242.IX Subsection "Dual life everything"
243As part of the \*(L"dists\*(R" plan, anything that doesn't belong in the smallest perl
244distribution needs to be dual lifed. Anything else can be too. Figure out what
245changes would be needed to package that module and its tests up for \s-1CPAN\s0, and
246do so. Test it with older perl releases, and fix the problems you find.
247.ie n .Sh "Improving ""threads::shared"""
248.el .Sh "Improving \f(CWthreads::shared\fP"
249.IX Subsection "Improving threads::shared"
250Investigate whether \f(CW\*(C`threads::shared\*(C'\fR could share aggregates properly with
251only Perl level changes to shared.pm
252.Sh "\s-1POSIX\s0 memory footprint"
253.IX Subsection "POSIX memory footprint"
254Ilya observed that use \s-1POSIX\s0; eats memory like there's no tomorrow, and at
255various times worked to cut it down. There is probably still fat to cut out \-
256for example \s-1POSIX\s0 passes Exporter some very memory hungry data structures.
257.SH "Tasks that need a little sysadmin-type knowledge"
258.IX Header "Tasks that need a little sysadmin-type knowledge"
259Or if you prefer, tasks that you would learn from, and broaden your skills
260base...
261.Sh "Relocatable perl"
262.IX Subsection "Relocatable perl"
263The C level patches needed to create a relocatable perl binary are done, as
264is the work on \fIConfig.pm\fR. All that's left to do is the \f(CW\*(C`Configure\*(C'\fR tweaking
265to let people specify how they want to do the install.
266.Sh "make \s-1HTML\s0 install work"
267.IX Subsection "make HTML install work"
268There is an \f(CW\*(C`installhtml\*(C'\fR target in the Makefile. It's marked as
269\&\*(L"experimental\*(R". It would be good to get this tested, make it work reliably, and
270remove the \*(L"experimental\*(R" tag. This would include
271.IP "1" 4
272.IX Item "1"
273Checking that cross linking between various parts of the documentation works.
274In particular that links work between the modules (files with \s-1POD\s0 in \fIlib/\fR)
275and the core documentation (files in \fIpod/\fR)
276.IP "2" 4
277.IX Item "2"
278Work out how to split \f(CW\*(C`perlfunc\*(C'\fR into chunks, preferably one per function
279group, preferably with general case code that could be used elsewhere.
280Challenges here are correctly identifying the groups of functions that go
281together, and making the right named external cross-links point to the right
282page. Things to be aware of are \f(CW\*(C`\-X\*(C'\fR, groups such as \f(CW\*(C`getpwnam\*(C'\fR to
283\&\f(CW\*(C`endservent\*(C'\fR, two or more \f(CW\*(C`=items\*(C'\fR giving the different parameter lists, such
284as
285.Sp
286.Vb 1
287\& =item substr EXPR,OFFSET,LENGTH,REPLACEMENT
288.Ve
289.Sp
290.Vb 1
291\& =item substr EXPR,OFFSET,LENGTH
292.Ve
293.Sp
294.Vb 1
295\& =item substr EXPR,OFFSET
296.Ve
297.Sp
298and different parameter lists having different meanings. (eg \f(CW\*(C`select\*(C'\fR)
299.Sh "compressed man pages"
300.IX Subsection "compressed man pages"
301Be able to install them. This would probably need a configure test to see how
302the system does compressed man pages (same directory/different directory?
303same filename/different filename), as well as tweaking the \fIinstallman\fR script
304to compress as necessary.
305.Sh "Add a code coverage target to the Makefile"
306.IX Subsection "Add a code coverage target to the Makefile"
307Make it easy for anyone to run Devel::Cover on the core's tests. The steps
308to do this manually are roughly
309.IP "\(bu" 4
310do a normal \f(CW\*(C`Configure\*(C'\fR, but include Devel::Cover as a module to install
311(see \fI\s-1INSTALL\s0\fR for how to do this)
312.IP "\(bu" 4
313.Vb 1
314\& make perl
315.Ve
316.IP "\(bu" 4
317.Vb 1
318\& cd t; HARNESS_PERL_SWITCHES=-MDevel::Cover ./perl -I../lib harness
319.Ve
320.IP "\(bu" 4
321Process the resulting Devel::Cover database
322.PP
323This just give you the coverage of the \fI.pm\fRs. To also get the C level
324coverage you need to
325.IP "\(bu" 4
326Additionally tell \f(CW\*(C`Configure\*(C'\fR to use the appropriate C compiler flags for
327\&\f(CW\*(C`gcov\*(C'\fR
328.IP "\(bu" 4
329.Vb 1
330\& make perl.gcov
331.Ve
332.Sp
333(instead of \f(CW\*(C`make perl\*(C'\fR)
334.IP "\(bu" 4
335After running the tests run \f(CW\*(C`gcov\*(C'\fR to generate all the \fI.gcov\fR files.
336(Including down in the subdirectories of \fIext/\fR
337.IP "\(bu" 4
338(From the top level perl directory) run \f(CW\*(C`gcov2perl\*(C'\fR on all the \f(CW\*(C`.gcov\*(C'\fR files
339to get their stats into the cover_db directory.
340.IP "\(bu" 4
341Then process the Devel::Cover database
342.PP
343It would be good to add a single switch to \f(CW\*(C`Configure\*(C'\fR to specify that you
344wanted to perform perl level coverage, and another to specify C level
345coverage, and have \f(CW\*(C`Configure\*(C'\fR and the \fIMakefile\fR do all the right things
346automatically.
347.Sh "Make Config.pm cope with differences between build and installed perl"
348.IX Subsection "Make Config.pm cope with differences between build and installed perl"
349Quite often vendors ship a perl binary compiled with their (pay\-for)
350compilers. People install a free compiler, such as gcc. To work out how to
351build extensions, Perl interrogates \f(CW%Config\fR, so in this situation
352\&\f(CW%Config\fR describes compilers that aren't there, and extension building
353fails. This forces people into choosing between re-compiling perl themselves
354using the compiler they have, or only using modules that the vendor ships.
355.PP
356It would be good to find a way teach \f(CW\*(C`Config.pm\*(C'\fR about the installation setup,
357possibly involving probing at install time or later, so that the \f(CW%Config\fR in
358a binary distribution better describes the installed machine, when the
359installed machine differs from the build machine in some significant way.
360.Sh "make parallel builds work"
361.IX Subsection "make parallel builds work"
362Currently parallel builds (such as \f(CW\*(C`make \-j3\*(C'\fR) don't work reliably. We believe
363that this is due to incomplete dependency specification in the \fIMakefile\fR.
364It would be good if someone were able to track down the causes of these
365problems, so that parallel builds worked properly.
366.Sh "linker specification files"
367.IX Subsection "linker specification files"
368Some platforms mandate that you provide a list of a shared library's external
369symbols to the linker, so the core already has the infrastructure in place to
370do this for generating shared perl libraries. My understanding is that the
371\&\s-1GNU\s0 toolchain can accept an optional linker specification file, and restrict
372visibility just to symbols declared in that file. It would be good to extend
373\&\fImakedef.pl\fR to support this format, and to provide a means within
374\&\f(CW\*(C`Configure\*(C'\fR to enable it. This would allow Unix users to test that the
375export list is correct, and to build a perl that does not pollute the global
376namespace with private symbols.
377.SH "Tasks that need a little C knowledge"
378.IX Header "Tasks that need a little C knowledge"
379These tasks would need a little C knowledge, but don't need any specific
380background or experience with \s-1XS\s0, or how the Perl interpreter works
381.Sh "Make it clear from \-v if this is the exact official release"
382.IX Subsection "Make it clear from -v if this is the exact official release"
383Currently perl from \f(CW\*(C`p4\*(C'\fR/\f(CW\*(C`rsync\*(C'\fR ships with a \fIpatchlevel.h\fR file that
384usually defines one local patch, of the form \*(L"\s-1MAINT12345\s0\*(R" or \*(L"\s-1RC1\s0\*(R". The output
385of perl \-v doesn't report that a perl isn't an official release, and this
386information can get lost in bugs reports. Because of this, the minor version
387isn't bumped up until \s-1RC\s0 time, to minimise the possibility of versions of perl
388escaping that believe themselves to be newer than they actually are.
389.PP
390It would be useful to find an elegant way to have the \*(L"this is an interim
391maintenance release\*(R" or \*(L"this is a release candidate\*(R" in the terse \-v output,
392and have it so that it's easy for the pumpking to remove this just as the
393release tarball is rolled up. This way the version pulled out of rsync would
394always say \*(L"I'm a development release\*(R" and it would be safe to bump the
395reported minor version as soon as a release ships, which would aid perl
396developers.
397.PP
398This task is really about thinking of an elegant way to arrange the C source
399such that it's trivial for the Pumpking to flag \*(L"this is an official release\*(R"
400when making a tarball, yet leave the default source saying \*(L"I'm not the
401official release\*(R".
402.Sh "Tidy up global variables"
403.IX Subsection "Tidy up global variables"
404There's a note in \fIintrpvar.h\fR
405.PP
406.Vb 4
407\& /* These two variables are needed to preserve 5.8.x bincompat because
408\& we can't change function prototypes of two exported functions.
409\& Probably should be taken out of blead soon, and relevant prototypes
410\& changed. */
411.Ve
412.PP
413So doing this, and removing any of the unused variables still present would
414be good.
415.ie n .Sh "Ordering of ""global"" variables."
416.el .Sh "Ordering of ``global'' variables."
417.IX Subsection "Ordering of global variables."
418\&\fIthrdvar.h\fR and \fIintrpvarh\fR define the \*(L"global\*(R" variables that need to be
419per-thread under ithreads, where the variables are actually elements in a
420structure. As C dictates, the variables must be laid out in order of
421declaration. There is a comment
422\&\f(CW\*(C`/* Important ones in the first cache line (if alignment is done right) */\*(C'\fR
423which implies that at some point in the past the ordering was carefully chosen
424(at least in part). However, it's clear that the ordering is less than perfect,
425as currently there are things such as 7 \f(CW\*(C`bool\*(C'\fRs in a row, then something
426typically requiring 4 byte alignment, and then an odd \f(CW\*(C`bool\*(C'\fR later on.
427(\f(CW\*(C`bool\*(C'\fRs are typically defined as \f(CW\*(C`char\*(C'\fRs). So it would be good for someone
428to review the ordering of the variables, to see how much alignment padding can
429be removed.
430.Sh "bincompat functions"
431.IX Subsection "bincompat functions"
432There are lots of functions which are retained for binary compatibility.
433Clean these up. Move them to mathom.c, and don't compile for blead?
434.Sh "am I hot or not?"
435.IX Subsection "am I hot or not?"
436The idea of \fIpp_hot.c\fR is that it contains the \fIhot\fR ops, the ops that are
437most commonly used. The idea is that by grouping them, their object code will
438be adjacent in the executable, so they have a greater chance of already being
439in the \s-1CPU\s0 cache (or swapped in) due to being near another op already in use.
440.PP
441Except that it's not clear if these really are the most commonly used ops. So
442anyone feeling like exercising their skill with coverage and profiling tools
443might want to determine what ops \fIreally\fR are the most commonly used. And in
444turn suggest evictions and promotions to achieve a better \fIpp_hot.c\fR.
445.Sh "emulate the per-thread memory pool on Unix"
446.IX Subsection "emulate the per-thread memory pool on Unix"
447For Windows, ithreads allocates memory for each thread from a separate pool,
448which it discards at thread exit. It also checks that memory is \fIfree()\fRd to
449the correct pool. Neither check is done on Unix, so code developed there won't
450be subject to such strictures, so can harbour bugs that only show up when the
451code reaches Windows.
452.PP
453It would be good to be able to optionally emulate the Window pool system on
454Unix, to let developers who only have access to Unix, or want to use
455Unix-specific debugging tools, check for these problems. To do this would
456involve figuring out how the \f(CW\*(C`PerlMem_*\*(C'\fR macros wrap \f(CW\*(C`malloc()\*(C'\fR access, and
457providing a layer that records/checks the identity of the thread making the
458call, and recording all the memory allocated by each thread via this \s-1API\s0 so
459that it can be summarily \fIfree()\fRd at thread exit. One implementation idea
460would be to increase the size of allocation, and store the \f(CW\*(C`my_perl\*(C'\fR pointer
461(to identify the thread) at the start, along with pointers to make a linked
462list of blocks for this thread. To avoid alignment problems it would be
463necessary to do something like
464.PP
465.Vb 7
466\& union memory_header_padded {
467\& struct memory_header {
468\& void *thread_id; /* For my_perl */
469\& void *next; /* Pointer to next block for this thread */
470\& } data;
471\& long double padding; /* whatever type has maximal alignment constraint */
472\& };
473.Ve
474.PP
475although \f(CW\*(C`long double\*(C'\fR might not be the only type to add to the padding
476union.
477.Sh "reduce duplication in sv_setsv_flags"
478.IX Subsection "reduce duplication in sv_setsv_flags"
479\&\f(CW\*(C`Perl_sv_setsv_flags\*(C'\fR has a comment
480\&\f(CW\*(C`/* There's a lot of redundancy below but we're going for speed here */\*(C'\fR
481.PP
482Whilst this was true 10 years ago, the growing disparity between \s-1RAM\s0 and \s-1CPU\s0
483speeds mean that the trade offs have changed. In addition, the duplicate code
484adds to the maintenance burden. It would be good to see how much of the
485redundancy can be pruned, particular in the less common paths. (Profiling
486tools at the ready...). For example, why does the test for
487\&\*(L"Can't redefine active sort subroutine\*(R" need to occur in two places?
488.SH "Tasks that need a knowledge of XS"
489.IX Header "Tasks that need a knowledge of XS"
490These tasks would need C knowledge, and roughly the level of knowledge of
491the perl \s-1API\s0 that comes from writing modules that use \s-1XS\s0 to interface to
492C.
493.Sh "IPv6"
494.IX Subsection "IPv6"
495Clean this up. Check everything in core works
496.ie n .Sh "shrink ""GV""\fPs, \f(CW""CV""s"
497.el .Sh "shrink \f(CWGV\fPs, \f(CWCV\fPs"
498.IX Subsection "shrink GVs, CVs"
499By removing unused elements and careful re\-ordering, the structures for \f(CW\*(C`AV\*(C'\fRs
500and \f(CW\*(C`HV\*(C'\fRs have recently been shrunk considerably. It's probable that the same
501approach would find savings in \f(CW\*(C`GV\*(C'\fRs and \f(CW\*(C`CV\*(C'\fRs, if not all the other
502larger\-than\-\f(CW\*(C`PVMG\*(C'\fR types.
503.Sh "merge Perl_sv_2[inpu]v"
504.IX Subsection "merge Perl_sv_2[inpu]v"
505There's a lot of code shared between \f(CW\*(C`Perl_sv_2iv_flags\*(C'\fR,
506\&\f(CW\*(C`Perl_sv_2uv_flags\*(C'\fR, \f(CW\*(C`Perl_sv_2nv\*(C'\fR, and \f(CW\*(C`Perl_sv_2pv_flags\*(C'\fR. It would be
507interesting to see if some of it can be merged into common shared static
508functions. In particular, \f(CW\*(C`Perl_sv_2uv_flags\*(C'\fR started out as a cut&paste
509from \f(CW\*(C`Perl_sv_2iv_flags\*(C'\fR around 5.005_50 time, and it may be possible to
510replace both with a single function that returns a value or union which is
511split out by the macros in \fIsv.h\fR
512.Sh "\s-1UTF8\s0 caching code"
513.IX Subsection "UTF8 caching code"
514The string position/offset cache is not optional. It should be.
515.Sh "Implicit Latin 1 => Unicode translation"
516.IX Subsection "Implicit Latin 1 => Unicode translation"
517Conversions from byte strings to \s-1UTF\-8\s0 currently map high bit characters
518to Unicode without translation (or, depending on how you look at it, by
519implicitly assuming that the byte strings are in Latin\-1). As perl assumes
520the C locale by default, upgrading a string to \s-1UTF\-8\s0 may change the
521meaning of its contents regarding character classes, case mapping, etc.
522This should probably emit a warning (at least).
523.PP
524This task is incremental \- even a little bit of work on it will help.
525.Sh "autovivification"
526.IX Subsection "autovivification"
527Make all autovivification consistent w.r.t \s-1LVALUE/RVALUE\s0 and strict/no strict;
528.PP
529This task is incremental \- even a little bit of work on it will help.
530.Sh "Unicode in Filenames"
531.IX Subsection "Unicode in Filenames"
532chdir, chmod, chown, chroot, exec, glob, link, lstat, mkdir, open,
533opendir, qx, readdir, readlink, rename, rmdir, stat, symlink, sysopen,
534system, truncate, unlink, utime, \-X. All these could potentially accept
535Unicode filenames either as input or output (and in the case of system
536and qx Unicode in general, as input or output to/from the shell).
537Whether a filesystem \- an operating system pair understands Unicode in
538filenames varies.
539.PP
540Known combinations that have some level of understanding include
541Microsoft \s-1NTFS\s0, Apple \s-1HFS+\s0 (In Mac \s-1OS\s0 9 and X) and Apple \s-1UFS\s0 (in Mac
542\&\s-1OS\s0 X), \s-1NFS\s0 v4 is rumored to be Unicode, and of course Plan 9. How to
543create Unicode filenames, what forms of Unicode are accepted and used
544(\s-1UCS\-2\s0, \s-1UTF\-16\s0, \s-1UTF\-8\s0), what (if any) is the normalization form used,
545and so on, varies. Finding the right level of interfacing to Perl
546requires some thought. Remember that an \s-1OS\s0 does not implicate a
547filesystem.
548.PP
549(The Windows \-C command flag \*(L"wide \s-1API\s0 support\*(R" has been at least
550temporarily retired in 5.8.1, and the \-C has been repurposed, see
551perlrun.)
552.ie n .Sh "Unicode in %ENV"
553.el .Sh "Unicode in \f(CW%ENV\fP"
554.IX Subsection "Unicode in %ENV"
555Currently the \f(CW%ENV\fR entries are always byte strings.
556.Sh "use less 'memory'"
557.IX Subsection "use less 'memory'"
558Investigate trade offs to switch out perl's choices on memory usage.
559Particularly perl should be able to give memory back.
560.PP
561This task is incremental \- even a little bit of work on it will help.
562.ie n .Sh "Re-implement "":unique"" in a way that is actually thread-safe"
563.el .Sh "Re-implement \f(CW:unique\fP in a way that is actually thread-safe"
564.IX Subsection "Re-implement :unique in a way that is actually thread-safe"
565The old implementation made bad assumptions on several levels. A good 90%
566solution might be just to make \f(CW\*(C`:unique\*(C'\fR work to share the string buffer
567of SvPVs. That way large constant strings can be shared between ithreads,
568such as the configuration information in \fIConfig\fR.
569.Sh "Make tainting consistent"
570.IX Subsection "Make tainting consistent"
571Tainting would be easier to use if it didn't take documented shortcuts and
572allow taint to \*(L"leak\*(R" everywhere within an expression.
573.Sh "readpipe(\s-1LIST\s0)"
574.IX Subsection "readpipe(LIST)"
575\&\fIsystem()\fR accepts a \s-1LIST\s0 syntax (and a \s-1PROGRAM\s0 \s-1LIST\s0 syntax) to avoid
576running a shell. \fIreadpipe()\fR (the function behind qx//) could be similarly
577extended.
578.SH "Tasks that need a knowledge of the interpreter"
579.IX Header "Tasks that need a knowledge of the interpreter"
580These tasks would need C knowledge, and knowledge of how the interpreter works,
581or a willingness to learn.
582.Sh "lexical pragmas"
583.IX Subsection "lexical pragmas"
584Document the new support for lexical pragmas in 5.9.3 and how %^H works.
585Maybe \f(CW\*(C`re\*(C'\fR, \f(CW\*(C`encoding\*(C'\fR, maybe other pragmas could be made lexical.
586.Sh "Attach/detach debugger from running program"
587.IX Subsection "Attach/detach debugger from running program"
588The old perltodo notes "With \f(CW\*(C`gdb\*(C'\fR, you can attach the debugger to a running
589program if you pass the process \s-1ID\s0. It would be good to do this with the Perl
590debugger on a running Perl program, although I'm not sure how it would be
591done." ssh and screen do this with named pipes in /tmp. Maybe we can too.
592.Sh "Constant folding"
593.IX Subsection "Constant folding"
594The peephole optimiser should trap errors during constant folding, and give
595up on the folding, rather than bailing out at compile time. It is quite
596possible that the unfoldable constant is in unreachable code, eg something
597akin to \f(CW\*(C`$a = 0/0 if 0;\*(C'\fR
598.Sh "\s-1LVALUE\s0 functions for lists"
599.IX Subsection "LVALUE functions for lists"
600The old perltodo notes that lvalue functions don't work for list or hash
601slices. This would be good to fix.
602.Sh "\s-1LVALUE\s0 functions in the debugger"
603.IX Subsection "LVALUE functions in the debugger"
604The old perltodo notes that lvalue functions don't work in the debugger. This
605would be good to fix.
606.Sh "_ prototype character"
607.IX Subsection "_ prototype character"
608Study the possibility of adding a new prototype character, \f(CW\*(C`_\*(C'\fR, meaning
609\&\*(L"this argument defaults to \f(CW$_\fR\*(R".
610.Sh "state variables"
611.IX Subsection "state variables"
612\&\f(CW\*(C`my $foo if 0;\*(C'\fR is deprecated, and should be replaced with
613\&\f(CW\*(C`state $x = "initial value\en";\*(C'\fR the syntax from Perl 6.
614.Sh "@INC source filter to Filter::Simple"
615.IX Subsection "@INC source filter to Filter::Simple"
616The second return value from a sub in \f(CW@INC\fR can be a source filter. This isn't
617documented. It should be changed to use Filter::Simple, tested and documented.
618.Sh "regexp optimiser optional"
619.IX Subsection "regexp optimiser optional"
620The regexp optimiser is not optional. It should configurable to be, to allow
621its performance to be measured, and its bugs to be easily demonstrated.
622.Sh "\s-1UNITCHECK\s0"
623.IX Subsection "UNITCHECK"
624Introduce a new special block, \s-1UNITCHECK\s0, which is run at the end of a
625compilation unit (module, file, eval(\s-1STRING\s0) block). This will correspond to
626the Perl 6 \s-1CHECK\s0. Perl 5's \s-1CHECK\s0 cannot be changed or removed because the
627O.pm/B.pm backend framework depends on it.
628.Sh "optional optimizer"
629.IX Subsection "optional optimizer"
630Make the peephole optimizer optional. Currently it performs two tasks as
631it walks the optree \- genuine peephole optimisations, and necessary fixups of
632ops. It would be good to find an efficient way to switch out the
633optimisations whilst keeping the fixups.
634.Sh "You \s-1WANT\s0 *how* many"
635.IX Subsection "You WANT *how* many"
636Currently contexts are void, scalar and list. split has a special mechanism in
637place to pass in the number of return values wanted. It would be useful to
638have a general mechanism for this, backwards compatible and little speed hit.
639This would allow proposals such as short circuiting sort to be implemented
640as a module on \s-1CPAN\s0.
641.Sh "lexical aliases"
642.IX Subsection "lexical aliases"
643Allow lexical aliases (maybe via the syntax \f(CW\*(C`my \e$alias = \e$foo\*(C'\fR.
644.Sh "entersub \s-1XS\s0 vs Perl"
645.IX Subsection "entersub XS vs Perl"
646At the moment pp_entersub is huge, and has code to deal with entering both
647perl and \s-1XS\s0 subroutines. Subroutine implementations rarely change between
648perl and \s-1XS\s0 at run time, so investigate using 2 ops to enter subs (one for
649\&\s-1XS\s0, one for perl) and swap between if a sub is redefined.
650.Sh "Self ties"
651.IX Subsection "Self ties"
652self ties are currently illegal because they caused too many segfaults. Maybe
653the causes of these could be tracked down and self-ties on all types re\-
654instated.
655.ie n .Sh "Optimize away @_"
656.el .Sh "Optimize away \f(CW@_\fP"
657.IX Subsection "Optimize away @_"
658The old perltodo notes \*(L"Look at the \*(R"reification" code in \f(CW\*(C`av.c\*(C'\fR".
659.Sh "What hooks would assertions need?"
660.IX Subsection "What hooks would assertions need?"
661Assertions are in the core, and work. However, assertions needed to be added
662as a core patch, rather than an \s-1XS\s0 module in ext, or a \s-1CPAN\s0 module, because
663the core has no hooks in the necessary places. It would be useful to
664investigate what hooks would need to be added to make it possible to provide
665the full assertion support from a \s-1CPAN\s0 module, so that we aren't constraining
666the imagination of future \s-1CPAN\s0 authors.
667.SH "Big projects"
668.IX Header "Big projects"
669Tasks that will get your name mentioned in the description of the \*(L"Highlights
670of 5.10\*(R"
671.Sh "make ithreads more robust"
672.IX Subsection "make ithreads more robust"
673Generally make ithreads more robust. See also \*(L"iCOW\*(R"
674.PP
675This task is incremental \- even a little bit of work on it will help, and
676will be greatly appreciated.
677.Sh "iCOW"
678.IX Subsection "iCOW"
679Sarathy and Arthur have a proposal for an improved Copy On Write which
680specifically will be able to \s-1COW\s0 new ithreads. If this can be implemented
681it would be a good thing.
682.Sh "(?{...}) closures in regexps"
683.IX Subsection "(?{...}) closures in regexps"
684Fix (or rewrite) the implementation of the \f(CW\*(C`/(?{...})/\*(C'\fR closures.
685.Sh "A re-entrant regexp engine"
686.IX Subsection "A re-entrant regexp engine"
687This will allow the use of a regex from inside (?{ }), (??{ }) and
688(?(?{ })|) constructs.