Commit | Line | Data |
---|---|---|
86530b38 AT |
1 | .\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13 |
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 "2002-06-08" "perl v5.8.0" "Perl Programmers Reference Guide" | |
133 | .SH "NAME" | |
134 | perltodo \- Perl TO\-DO List | |
135 | .SH "DESCRIPTION" | |
136 | .IX Header "DESCRIPTION" | |
137 | This is a list of wishes for Perl. Send updates to | |
138 | \&\fIperl5\-porters@perl.org\fR. If you want to work on any of these | |
139 | projects, be sure to check the perl5\-porters archives for past ideas, | |
140 | flames, and propaganda. This will save you time and also prevent you | |
141 | from implementing something that Larry has already vetoed. One set | |
142 | of archives may be found at: | |
143 | .PP | |
144 | .Vb 1 | |
145 | \& http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/ | |
146 | .Ve | |
147 | .SH "To do during 5.6.x" | |
148 | .IX Header "To do during 5.6.x" | |
149 | .Sh "Support for I/O disciplines" | |
150 | .IX Subsection "Support for I/O disciplines" | |
151 | \&\f(CW\*(C`perlio\*(C'\fR provides this, but the interface could be a lot more | |
152 | straightforward. | |
153 | .Sh "Autoload bytes.pm" | |
154 | .IX Subsection "Autoload bytes.pm" | |
155 | When the lexer sees, for instance, \f(CW\*(C`bytes::length\*(C'\fR, it should | |
156 | automatically load the \f(CW\*(C`bytes\*(C'\fR pragma. | |
157 | .ie n .Sh "Make ""\eu{\s-1XXXX\s0}"" et al work" | |
158 | .el .Sh "Make ``\eu{\s-1XXXX\s0}'' et al work" | |
159 | .IX Subsection "Make u{XXXX} et al work" | |
160 | Danger, Will Robinson! Discussing the semantics of \f(CW"\ex{F00}"\fR, | |
161 | \&\f(CW"\exF00"\fR and \f(CW"\eU{F00}"\fR on P5P \fIwill\fR lead to a long and boring | |
162 | flamewar. | |
163 | .Sh "Create a char *sv_pvprintify(sv, \s-1STRLEN\s0 *lenp, \s-1UV\s0 flags)" | |
164 | .IX Subsection "Create a char *sv_pvprintify(sv, STRLEN *lenp, UV flags)" | |
165 | For displaying PVs with control characters, embedded nulls, and Unicode. | |
166 | This would be useful for printing warnings, or data and regex dumping, | |
167 | \&\fInot_a_number()\fR, and so on. | |
168 | .PP | |
169 | Requirements: should handle both byte and \s-1UTF8\s0 strings. \fIisPRINT()\fR | |
170 | characters printed as\-is, character less than 256 as \exHH, Unicode | |
171 | characters as \ex{\s-1HHH\s0}. Don't assume ASCII\-like, either, get somebody | |
172 | on \s-1EBCDIC\s0 to test the output. | |
173 | .PP | |
174 | Possible options, controlled by the flags: | |
175 | \&\- whitespace (other than ' ' of \fIisPRINT()\fR) printed as-is | |
176 | \&\- use \fIisPRINT_LC()\fR instead of \fIisPRINT()\fR | |
177 | \&\- print control characters like this: \*(L"\ecA\*(R" | |
178 | \&\- print control characters like this: \*(L"^A\*(R" | |
179 | \&\- non-PRINTables printed as '.' instead of \exHH | |
180 | \&\- use \eOOO instead of \exHH | |
181 | \&\- use the C/Perl\-metacharacters like \en, \et | |
182 | \&\- have a maximum length for the produced string (read it from *lenp) | |
183 | \&\- append a \*(L"...\*(R" to the produced string if the maximum length is exceeded | |
184 | \&\- really fancy: print unicode characters as \eN{...} | |
185 | .PP | |
186 | \&\s-1NOTE:\s0 \fIpv_display()\fR, \fIpv_uni_display()\fR, \fIsv_uni_display()\fR are already | |
187 | doing something like the above. | |
188 | .Sh "Overloadable regex assertions" | |
189 | .IX Subsection "Overloadable regex assertions" | |
190 | This may or may not be possible with the current regular expression | |
191 | engine. The idea is that, for instance, \f(CW\*(C`\eb\*(C'\fR needs to be | |
192 | algorithmically computed if you're dealing with Thai text. Hence, the | |
193 | \&\fB\eb\fR assertion wants to be overloaded by a function. | |
194 | .Sh "Unicode" | |
195 | .IX Subsection "Unicode" | |
196 | .IP "\(bu" 4 | |
197 | Allow for long form of the General Category Properties, e.g | |
198 | \&\f(CW\*(C`\ep{IsOpenPunctuation}\*(C'\fR, not just the abbreviated form, e.g. | |
199 | \&\f(CW\*(C`\ep{IsPs}\*(C'\fR. | |
200 | .IP "\(bu" 4 | |
201 | Allow for the metaproperties: \f(CW\*(C`XID Start\*(C'\fR, \f(CW\*(C`XID Continue\*(C'\fR, | |
202 | \&\f(CW\*(C`NF*_NO\*(C'\fR, \f(CW\*(C`NF*_MAYBE\*(C'\fR (require the DerivedCoreProperties and | |
203 | DerviceNormalizationProperties files). | |
204 | .Sp | |
205 | There are also multiple value properties still unimplemented: | |
206 | \&\f(CW\*(C`Numeric Type\*(C'\fR, \f(CW\*(C`East Asian Width\*(C'\fR. | |
207 | .IP "\(bu" 4 | |
208 | .Vb 1 | |
209 | \& Case Mappings? http://www.unicode.org/unicode/reports/tr21/ | |
210 | .Ve | |
211 | .Sp | |
212 | Mostly implemented (all of 1:1, 1:N, N:1), only the \*(L"final sigma\*(R" | |
213 | and locale-specific rules of SpecCase are not implemented. | |
214 | .IP "\(bu" 4 | |
215 | \&\s-1UTF\-8\s0 identifier names should probably be canonicalized: \s-1NFC\s0? | |
216 | .IP "\(bu" 4 | |
217 | \&\s-1UTF\-8\s0 in package names and sub names? The first is problematic | |
218 | because of the mapping to pathnames, ditto for the second one if | |
219 | one does autosplitting, for example. Some of this works already | |
220 | in 5.8.0, but essentially it is unsupported. Constructs to consider, | |
221 | at the very least: | |
222 | .Sp | |
223 | .Vb 11 | |
224 | \& use utf8; | |
225 | \& package UnicodePackage; | |
226 | \& sub new { bless {}, shift }; | |
227 | \& sub UnicodeMethod1 { ... $_[0]->UnicodeMethod2(...) ... } | |
228 | \& sub UnicodeMethod2 { ... } # in here caller(0) should contain Unicode | |
229 | \& ... | |
230 | \& package main; | |
231 | \& my $x = UnicodePackage->new; | |
232 | \& print ref $x, "\en"; # should be Unicode | |
233 | \& $x->UnicodeMethod1(...); | |
234 | \& my $y = UnicodeMethod3 UnicodePackage ...; | |
235 | .Ve | |
236 | .Sp | |
237 | In the above all \fIUnicodeXxx\fR contain (identifier\-worthy) characters | |
238 | beyond the code point 255, for example 256. Wherever package/class or | |
239 | subroutine names can be returned needs to be checked for Unicodeness. | |
240 | .PP | |
241 | See \*(L"\s-1UNICODE\s0 \s-1REGULAR\s0 \s-1EXPRESSION\s0 \s-1SUPPORT\s0 \s-1LEVEL\s0\*(R" in perlunicode for what's | |
242 | there and what's missing. Almost all of Levels 2 and 3 is missing, | |
243 | and as of 5.8.0 not even all of Level 1 is there. | |
244 | They have some tricks Perl doesn't yet implement, such as character | |
245 | class subtraction. | |
246 | .PP | |
247 | .Vb 1 | |
248 | \& http://www.unicode.org/unicode/reports/tr18/ | |
249 | .Ve | |
250 | .Sh "Work out exit/die semantics for threads" | |
251 | .IX Subsection "Work out exit/die semantics for threads" | |
252 | There are some suggestions to use for example something like this: | |
253 | default to \*(L"(thread exiting first will) wait for the other threads | |
254 | until up to 60 seconds\*(R". Other possibilities: | |
255 | .PP | |
256 | .Vb 1 | |
257 | \& use threads wait => 0; | |
258 | .Ve | |
259 | .PP | |
260 | Do not wait. | |
261 | .PP | |
262 | .Vb 1 | |
263 | \& use threads wait_for => 10; | |
264 | .Ve | |
265 | .PP | |
266 | Wait up to 10 seconds. | |
267 | .PP | |
268 | .Vb 1 | |
269 | \& use threads wait_for => -1; | |
270 | .Ve | |
271 | .PP | |
272 | Wait for ever. | |
273 | .PP | |
274 | http://archive.develooper.com/perl5\-porters@perl.org/msg79618.html | |
275 | .Sh "Better support for nonpreemptive threading systems like \s-1GNU\s0 pth" | |
276 | .IX Subsection "Better support for nonpreemptive threading systems like GNU pth" | |
277 | To better support nonpreemptive threading systems, perhaps some of the | |
278 | blocking functions internally in Perl should do a \fIyield()\fR before a | |
279 | blocking call. (Now certain threads tests ({basic,list,thread.t}) | |
280 | simply do a \fIyield()\fR before they \fIsleep()\fR to give nonpreemptive thread | |
281 | implementations a chance). | |
282 | .PP | |
283 | In some cases, like the \s-1GNU\s0 pth, which has replacement functions that | |
284 | are nonblocking (pth_select instead of select), maybe Perl should be | |
285 | using them instead when built for threading. | |
286 | .Sh "Typed lexicals for compiler" | |
287 | .IX Subsection "Typed lexicals for compiler" | |
288 | .Sh "Compiler workarounds for Win32" | |
289 | .IX Subsection "Compiler workarounds for Win32" | |
290 | .Sh "AUTOLOADing in the compiler" | |
291 | .IX Subsection "AUTOLOADing in the compiler" | |
292 | .Sh "Fixing comppadlist when compiling" | |
293 | .IX Subsection "Fixing comppadlist when compiling" | |
294 | .Sh "Cleaning up exported namespace" | |
295 | .IX Subsection "Cleaning up exported namespace" | |
296 | .Sh "Complete signal handling" | |
297 | .IX Subsection "Complete signal handling" | |
298 | Add \f(CW\*(C`PERL_ASYNC_CHECK\*(C'\fR to opcodes which loop; replace \f(CW\*(C`sigsetjmp\*(C'\fR with | |
299 | \&\f(CW\*(C`sigjmp\*(C'\fR; check \f(CW\*(C`wait\*(C'\fR for signal safety. | |
300 | .Sh "Out-of-source builds" | |
301 | .IX Subsection "Out-of-source builds" | |
302 | This was done for 5.6.0, but needs reworking for 5.7.x | |
303 | .Sh "\s-1POSIX\s0 realtime support" | |
304 | .IX Subsection "POSIX realtime support" | |
305 | \&\s-1POSIX\s0 1003.1 1996 Edition support\*(--realtime stuff: \s-1POSIX\s0 semaphores, | |
306 | message queues, shared memory, realtime clocks, timers, signals (the | |
307 | metaconfig units mostly already exist for these) | |
308 | .Sh "\s-1UNIX98\s0 support" | |
309 | .IX Subsection "UNIX98 support" | |
310 | Reader-writer locks, realtime/asynchronous \s-1IO\s0 | |
311 | .Sh "IPv6 Support" | |
312 | .IX Subsection "IPv6 Support" | |
313 | There are non-core modules, such as \f(CW\*(C`Socket6\*(C'\fR, but these will need | |
314 | integrating when IPv6 actually starts to really happen. See \s-1RFC\s0 2292 | |
315 | and \s-1RFC\s0 2553. | |
316 | .Sh "Long double conversion" | |
317 | .IX Subsection "Long double conversion" | |
318 | Floating point formatting is still causing some weird test failures. | |
319 | .Sh "Locales" | |
320 | .IX Subsection "Locales" | |
321 | Locales and Unicode interact with each other in unpleasant ways. | |
322 | One possible solution would be to adopt/support \s-1ICU:\s0 | |
323 | .PP | |
324 | .Vb 1 | |
325 | \& http://oss.software.ibm.com/developerworks/opensource/icu/project/ | |
326 | .Ve | |
327 | .Sh "Arithmetic on non-Arabic numerals" | |
328 | .IX Subsection "Arithmetic on non-Arabic numerals" | |
329 | \&\f(CW\*(C`[1234567890]\*(C'\fR aren't the only numerals any more. | |
330 | .Sh "\s-1POSIX\s0 Unicode character classes" | |
331 | .IX Subsection "POSIX Unicode character classes" | |
332 | (\f(CW\*(C`[=a=]\*(C'\fR for equivalence classes, \f(CW\*(C`[.ch.]\*(C'\fR for collation.) | |
333 | These are dependent on Unicode normalization and collation. | |
334 | .Sh "Factoring out common suffices/prefices in regexps (trie optimization)" | |
335 | .IX Subsection "Factoring out common suffices/prefices in regexps (trie optimization)" | |
336 | Currently, the user has to optimize \f(CW\*(C`foo|far\*(C'\fR and \f(CW\*(C`foo|goo\*(C'\fR into | |
337 | \&\f(CW\*(C`f(?:oo|ar)\*(C'\fR and \f(CW\*(C`[fg]oo\*(C'\fR by hand; this could be done automatically. | |
338 | .Sh "Security audit shipped utilities" | |
339 | .IX Subsection "Security audit shipped utilities" | |
340 | All the code we ship with Perl needs to be sensible about temporary file | |
341 | handling, locking, input validation, and so on. | |
342 | .Sh "Sort out the uid-setting mess" | |
343 | .IX Subsection "Sort out the uid-setting mess" | |
344 | Currently there are several problems with the setting of uids ($<, $> | |
345 | for the real and effective uids). Firstly, what exactly \fIsetuid()\fR call | |
346 | gets invoked in which platform is simply a big mess that needs to be | |
347 | untangled. Secondly, the effects are apparently not standard across | |
348 | platforms, (if you first set $< and then $>, or vice versa, being | |
349 | uid == euid == zero, or just euid == zero, or as a normal user, what are | |
350 | the results?). The test suite not (usually) being run as root means | |
351 | that these things do not get much testing. Thirdly, there's quite | |
352 | often a third uid called saved uid, and Perl has no knowledge of that | |
353 | feature in any way. (If one has the saved uid of zero, one can get | |
354 | back any real and effective uids.) As an example, to change also the | |
355 | saved uid, one needs to set the real and effective uids \fBtwice\fR\-\- in | |
356 | most systems, that is: in HP-UX that doesn't seem to work. | |
357 | .Sh "Custom opcodes" | |
358 | .IX Subsection "Custom opcodes" | |
359 | Have a way to introduce user-defined opcodes without the subroutine call | |
360 | overhead of an \s-1XSUB\s0; the user should be able to create \s-1PP\s0 code. Simon | |
361 | Cozens has some ideas on this. | |
362 | .Sh "\s-1DLL\s0 Versioning" | |
363 | .IX Subsection "DLL Versioning" | |
364 | Windows needs a way to know what version of an \s-1XS\s0 or \f(CW\*(C`libperl\*(C'\fR \s-1DLL\s0 it's | |
365 | loading. | |
366 | .Sh "Introduce @( and @)" | |
367 | .IX Subsection "Introduce @( and @)" | |
368 | \&\f(CW$(\fR may return \*(L"foo bar baz\*(R". Unfortunately, since groups can | |
369 | theoretically have spaces in their names, this could be one, two or | |
370 | three groups. | |
371 | .Sh "Floating point handling" | |
372 | .IX Subsection "Floating point handling" | |
373 | \&\f(CW\*(C`NaN\*(C'\fR and \f(CW\*(C`inf\*(C'\fR support is particularly troublesome. | |
374 | (\fIfp_classify()\fR, \fIfp_class()\fR, \fIfp_class_d()\fR, \fIclass()\fR, \fIisinf()\fR, | |
375 | \&\fIisfinite()\fR, \fIfinite()\fR, \fIisnormal()\fR, \fIunordered()\fR, <ieeefp.h>, | |
376 | <fp_class.h> (there are metaconfig units for all these) (I think), | |
377 | \&\fIfp_setmask()\fR, \fIfp_getmask()\fR, \fIfp_setround()\fR, \fIfp_getround()\fR | |
378 | (no metaconfig units yet for these). Don't forget \fIfinitel()\fR, \fIfp_classl()\fR, | |
379 | \&\fIfp_class_l()\fR, (yes, both do, unfortunately, exist), and \fIunorderedl()\fR.) | |
380 | .PP | |
381 | As of Perl 5.6.1, there is a Perl macro, \fIPerl_isnan()\fR. | |
382 | .Sh "\s-1IV/UV\s0 preservation" | |
383 | .IX Subsection "IV/UV preservation" | |
384 | Nicholas Clark has done a lot of work on this, but work is continuing. | |
385 | \&\f(CW\*(C`+\*(C'\fR, \f(CW\*(C`\-\*(C'\fR and \f(CW\*(C`*\*(C'\fR work, but guards need to be in place for \f(CW\*(C`%\*(C'\fR, \f(CW\*(C`/\*(C'\fR, | |
386 | \&\f(CW\*(C`&\*(C'\fR, \f(CW\*(C`oct\*(C'\fR, \f(CW\*(C`hex\*(C'\fR and \f(CW\*(C`pack\*(C'\fR. | |
387 | .Sh "Replace pod2html with something using Pod::Parser" | |
388 | .IX Subsection "Replace pod2html with something using Pod::Parser" | |
389 | The \s-1CPAN\s0 module \f(CW\*(C`Marek::Pod::Html\*(C'\fR may be a more suitable basis for a | |
390 | \&\f(CW\*(C`pod2html\*(C'\fR converter; the current one duplicates the functionality | |
391 | abstracted in \f(CW\*(C`Pod::Parser\*(C'\fR, which makes updating the \s-1POD\s0 language | |
392 | difficult. | |
393 | .Sh "Automate module testing on \s-1CPAN\s0" | |
394 | .IX Subsection "Automate module testing on CPAN" | |
395 | When a new Perl is being beta tested, porters have to manually grab | |
396 | their favourite \s-1CPAN\s0 modules and test them \- this should be done | |
397 | automatically. | |
398 | .Sh "sendmsg and recvmsg" | |
399 | .IX Subsection "sendmsg and recvmsg" | |
400 | We have all the other \s-1BSD\s0 socket functions but these. There are | |
401 | metaconfig units for these functions which can be added. To avoid these | |
402 | being new opcodes, a solution similar to the way \f(CW\*(C`sockatmark\*(C'\fR was added | |
403 | would be preferable. (Autoload the \f(CW\*(C`IO::whatever\*(C'\fR module.) | |
404 | .Sh "Rewrite perlre documentation" | |
405 | .IX Subsection "Rewrite perlre documentation" | |
406 | The new-style patterns need full documentation, and the whole document | |
407 | needs to be a lot clearer. | |
408 | .Sh "Convert example code to IO::Handle filehandles" | |
409 | .IX Subsection "Convert example code to IO::Handle filehandles" | |
410 | .Sh "Document Win32 choices" | |
411 | .IX Subsection "Document Win32 choices" | |
412 | .Sh "Check new modules" | |
413 | .IX Subsection "Check new modules" | |
414 | .Sh "Make roffitall find pods and libs itself" | |
415 | .IX Subsection "Make roffitall find pods and libs itself" | |
416 | Simon Cozens has done some work on this but it needs a rethink. | |
417 | .SH "To do at some point" | |
418 | .IX Header "To do at some point" | |
419 | These are ideas that have been regularly tossed around, that most | |
420 | people believe should be done maybe during 5.8.x | |
421 | .Sh "Remove regular expression recursion" | |
422 | .IX Subsection "Remove regular expression recursion" | |
423 | Because the regular expression engine is recursive, badly designed | |
424 | expressions can lead to lots of recursion filling up the stack. Ilya | |
425 | claims that it is easy to convert the engine to being iterative, but | |
426 | this has still not yet been done. There may be a regular expression | |
427 | engine hit squad meeting at \s-1TPC5\s0. | |
428 | .Sh "Memory leaks after failed eval" | |
429 | .IX Subsection "Memory leaks after failed eval" | |
430 | Perl will leak memory if you \f(CW\*(C`eval "hlagh hlagh hlagh hlagh"\*(C'\fR. This is | |
431 | partially because it attempts to build up an op tree for that code and | |
432 | doesn't properly free it. The same goes for non-syntactically-correct | |
433 | regular expressions. Hugo looked into this, but decided it needed a | |
434 | mark-and-sweep \s-1GC\s0 implementation. | |
435 | .PP | |
436 | Alan notes that: The basic idea was to extend the parser token stack | |
437 | (\f(CW\*(C`YYSTYPE\*(C'\fR) to include a type field so we knew what sort of thing each | |
438 | element of the stack was. The \fIperly.c\fR code would then have to be | |
439 | postprocessed to record the type of each entry on the stack as it was | |
440 | created, and the parser patched so that it could unroll the stack | |
441 | properly on error. | |
442 | .PP | |
443 | This is possible to do, but would be pretty messy to implement, as it | |
444 | would rely on even more sed hackery in \fIperly.fixer\fR. | |
445 | .Sh "bitfields in pack" | |
446 | .IX Subsection "bitfields in pack" | |
447 | .Sh "Cross compilation" | |
448 | .IX Subsection "Cross compilation" | |
449 | Make Perl buildable with a cross\-compiler. This will play havoc with | |
450 | Configure, which needs to know how the target system will respond to | |
451 | its tests; maybe \f(CW\*(C`microperl\*(C'\fR will be a good starting point here. | |
452 | (Indeed, Bart Schuller reports that he compiled up \f(CW\*(C`microperl\*(C'\fR for | |
453 | the Agenda \s-1PDA\s0 and it works fine.) A really big spanner in the works | |
454 | is the bootstrapping build process of Perl: if the filesystem the | |
455 | target systems sees is not the same what the build host sees, various | |
456 | input, output, and (Perl) library files need to be copied back and forth. | |
457 | .PP | |
458 | As of 5.8.0 Configure mostly works for cross-compilation | |
459 | (used successfully for iPAQ Linux), miniperl gets built, | |
460 | but then building DynaLoader (and other extensions) fails | |
461 | since MakeMaker knows nothing of cross\-compilation. | |
462 | (See INSTALL/Cross\-compilation for the state of things.) | |
463 | .Sh "Perl preprocessor / macros" | |
464 | .IX Subsection "Perl preprocessor / macros" | |
465 | Source filters help with this, but do not get us all the way. For | |
466 | instance, it should be possible to implement the \f(CW\*(C`??\*(C'\fR operator somehow; | |
467 | source filters don't (quite) cut it. | |
468 | .Sh "Perl lexer in Perl" | |
469 | .IX Subsection "Perl lexer in Perl" | |
470 | Damian Conway is planning to work on this, but it hasn't happened yet. | |
471 | .Sh "Using \s-1POSIX\s0 calls internally" | |
472 | .IX Subsection "Using POSIX calls internally" | |
473 | When faced with a \s-1BSD\s0 vs. SysV \-style interface to some library or | |
474 | system function, perl's roots show in that it typically prefers the \s-1BSD\s0 | |
475 | interface (but falls back to the SysV one). One example is \fIgetpgrp()\fR. | |
476 | Other examples include \f(CW\*(C`memcpy\*(C'\fR vs. \f(CW\*(C`bcopy\*(C'\fR. There are others, mostly in | |
477 | \&\fIpp_sys.c\fR. | |
478 | .PP | |
479 | Mostly, this item is a suggestion for which way to start a journey into | |
480 | an \f(CW\*(C`#ifdef\*(C'\fR forest. It is not primarily a suggestion to eliminate any of | |
481 | the \f(CW\*(C`#ifdef\*(C'\fR forests. | |
482 | .PP | |
483 | \&\s-1POSIX\s0 calls are perhaps more likely to be portable to unexpected | |
484 | architectures. They are also perhaps more likely to be actively | |
485 | maintained by a current vendor. They are also perhaps more likely to be | |
486 | available in thread-safe versions, if appropriate. | |
487 | .Sh "\-i rename file when changed" | |
488 | .IX Subsection "-i rename file when changed" | |
489 | It's only necessary to rename a file when inplace editing when the file | |
490 | has changed. Detecting a change is perhaps the difficult bit. | |
491 | .Sh "All \s-1ARGV\s0 input should act like <>" | |
492 | .IX Subsection "All ARGV input should act like <>" | |
493 | eg \f(CW\*(C`read(ARGV, ...)\*(C'\fR doesn't currently read across multiple files. | |
494 | .Sh "Support for rerunning debugger" | |
495 | .IX Subsection "Support for rerunning debugger" | |
496 | There should be a way of restarting the debugger on demand. | |
497 | .Sh "Test Suite for the Debugger" | |
498 | .IX Subsection "Test Suite for the Debugger" | |
499 | The debugger is a complex piece of software and fixing something | |
500 | here may inadvertently break something else over there. To tame | |
501 | this chaotic behaviour, a test suite is necessary. | |
502 | .Sh "my sub foo { }" | |
503 | .IX Subsection "my sub foo { }" | |
504 | The basic principle is sound, but there are problems with the semantics | |
505 | of self-referential and mutually referential lexical subs: how to | |
506 | declare the subs? | |
507 | .Sh "One-pass global destruction" | |
508 | .IX Subsection "One-pass global destruction" | |
509 | Sweeping away all the allocated memory in one go is a laudable goal, but | |
510 | it's difficult and in most cases, it's easier to let the memory get | |
511 | freed by exiting. | |
512 | .Sh "Rewrite regexp parser" | |
513 | .IX Subsection "Rewrite regexp parser" | |
514 | There has been talk recently of rewriting the regular expression parser | |
515 | to produce an optree instead of a chain of opcodes; it's unclear whether | |
516 | or not this would be a win. | |
517 | .Sh "Cache recently used regexps" | |
518 | .IX Subsection "Cache recently used regexps" | |
519 | This is to speed up | |
520 | .PP | |
521 | .Vb 3 | |
522 | \& for my $re (@regexps) { | |
523 | \& $matched++ if /$re/ | |
524 | \& } | |
525 | .Ve | |
526 | .PP | |
527 | \&\f(CW\*(C`qr//\*(C'\fR already gives us a way of saving compiled regexps, but it should | |
528 | be done automatically. | |
529 | .Sh "Cross-compilation support" | |
530 | .IX Subsection "Cross-compilation support" | |
531 | Bart Schuller reports that using \f(CW\*(C`microperl\*(C'\fR and a cross\-compiler, he | |
532 | got Perl working on the Agenda \s-1PDA\s0. However, one cannot build a full | |
533 | Perl because Configure needs to get the results for the target platform, | |
534 | for the host. | |
535 | .Sh "Bit-shifting bitvectors" | |
536 | .IX Subsection "Bit-shifting bitvectors" | |
537 | Given: | |
538 | .PP | |
539 | .Vb 1 | |
540 | \& vec($v, 1000, 1) = 1; | |
541 | .Ve | |
542 | .PP | |
543 | One should be able to do | |
544 | .PP | |
545 | .Vb 1 | |
546 | \& $v <<= 1; | |
547 | .Ve | |
548 | .PP | |
549 | and have the 999'th bit set. | |
550 | .PP | |
551 | Currently if you try with shift bitvectors you shift the \s-1NV/UV\s0, instead | |
552 | of the bits in the \s-1PV\s0. Not very logical. | |
553 | .Sh "debugger pragma" | |
554 | .IX Subsection "debugger pragma" | |
555 | The debugger is implemented in Perl in \fIperl5db.pl\fR; turning it into a | |
556 | pragma should be easy, but making it work lexically might be more | |
557 | difficult. Fiddling with \f(CW$^P\fR would be necessary. | |
558 | .Sh "use less pragma" | |
559 | .IX Subsection "use less pragma" | |
560 | Identify areas where speed/memory tradeoffs can be made and have a hint | |
561 | to switch between them. | |
562 | .Sh "switch structures" | |
563 | .IX Subsection "switch structures" | |
564 | Although we have \f(CW\*(C`Switch.pm\*(C'\fR in core, Larry points to the dormant | |
565 | \&\f(CW\*(C`nswitch\*(C'\fR and \f(CW\*(C`cswitch\*(C'\fR ops in \fIpp.c\fR; using these opcodes would be | |
566 | much faster. | |
567 | .Sh "Cache eval tree" | |
568 | .IX Subsection "Cache eval tree" | |
569 | .Sh "rcatmaybe" | |
570 | .IX Subsection "rcatmaybe" | |
571 | .Sh "Shrink opcode tables" | |
572 | .IX Subsection "Shrink opcode tables" | |
573 | .ie n .Sh "Optimize away @_" | |
574 | .el .Sh "Optimize away \f(CW@_\fP" | |
575 | .IX Subsection "Optimize away @_" | |
576 | Look at the \*(L"reification\*(R" code in \f(CW\*(C`av.c\*(C'\fR | |
577 | .Sh "Prototypes versus indirect objects" | |
578 | .IX Subsection "Prototypes versus indirect objects" | |
579 | Currently, indirect object syntax bypasses prototype checks. | |
580 | .Sh "Install \s-1HTML\s0" | |
581 | .IX Subsection "Install HTML" | |
582 | \&\s-1HTML\s0 versions of the documentation need to be installed by default; a | |
583 | call to \f(CW\*(C`installhtml\*(C'\fR from \f(CW\*(C`installperl\*(C'\fR may be all that's necessary. | |
584 | .Sh "Prototype method calls" | |
585 | .IX Subsection "Prototype method calls" | |
586 | .Sh "Return context prototype declarations" | |
587 | .IX Subsection "Return context prototype declarations" | |
588 | .Sh "magic_setisa" | |
589 | .IX Subsection "magic_setisa" | |
590 | .Sh "Garbage collection" | |
591 | .IX Subsection "Garbage collection" | |
592 | There have been persistent mumblings about putting a mark-and-sweep | |
593 | garbage detector into Perl; Alan Burlison has some ideas about this. | |
594 | .Sh "\s-1IO\s0 tutorial" | |
595 | .IX Subsection "IO tutorial" | |
596 | Mark-Jason Dominus has the beginnings of one of these. | |
597 | .Sh "Rewrite perldoc" | |
598 | .IX Subsection "Rewrite perldoc" | |
599 | There are a few suggestions for what to do with \f(CW\*(C`perldoc\*(C'\fR: maybe a | |
600 | full-text search, an index function, locating pages on a particular | |
601 | high-level subject, and so on. | |
602 | .Sh "Install .3p manpages" | |
603 | .IX Subsection "Install .3p manpages" | |
604 | This is a bone of contention; we can create \f(CW\*(C`.3p\*(C'\fR manpages for each | |
605 | built-in function, but should we install them by default? Tcl does this, | |
606 | and it clutters up \f(CW\*(C`apropos\*(C'\fR. | |
607 | .Sh "Unicode tutorial" | |
608 | .IX Subsection "Unicode tutorial" | |
609 | Simon Cozens promises to do this before he gets old. | |
610 | .Sh "Update \s-1POSIX\s0.pm for 1003.1\-2" | |
611 | .IX Subsection "Update POSIX.pm for 1003.1-2" | |
612 | .Sh "Retargetable installation" | |
613 | .IX Subsection "Retargetable installation" | |
614 | Allow \f(CW@INC\fR to be changed after Perl is built. | |
615 | .Sh "\s-1POSIX\s0 emulation on non-POSIX systems" | |
616 | .IX Subsection "POSIX emulation on non-POSIX systems" | |
617 | Make \f(CW\*(C`POSIX.pm\*(C'\fR behave as POSIXly as possible everywhere, meaning we | |
618 | have to implement \s-1POSIX\s0 equivalents for some functions if necessary. | |
619 | .Sh "Rename Win32 headers" | |
620 | .IX Subsection "Rename Win32 headers" | |
621 | .Sh "Finish off lvalue functions" | |
622 | .IX Subsection "Finish off lvalue functions" | |
623 | They don't work in the debugger, and they don't work for list or hash | |
624 | slices. | |
625 | .Sh "Update sprintf documentation" | |
626 | .IX Subsection "Update sprintf documentation" | |
627 | Hugo van der Sanden plans to look at this. | |
628 | .Sh "Use fchown/fchmod internally" | |
629 | .IX Subsection "Use fchown/fchmod internally" | |
630 | This has been done in places, but needs a thorough code review. | |
631 | Also fchdir is available in some platforms. | |
632 | .Sh "Make v\-strings overloaded objects" | |
633 | .IX Subsection "Make v-strings overloaded objects" | |
634 | Instead of having to guess whether a string is a v\-string and thus | |
635 | needs to be displayed with \f(CW%vd\fR, make v\-strings (readonly) objects | |
636 | (class \*(L"vstring\*(R"?) with a stringify overload. | |
637 | .Sh "Allow restricted hash assignment" | |
638 | .IX Subsection "Allow restricted hash assignment" | |
639 | Currently you're not allowed to assign to a restricted hash at all, | |
640 | even with the same keys. | |
641 | .PP | |
642 | .Vb 1 | |
643 | \& %restricted = (foo => 42); # error | |
644 | .Ve | |
645 | .PP | |
646 | This should be allowed if the new keyset is a subset of the old | |
647 | keyset. May require more extra code than we'd like in pp_aassign. | |
648 | .Sh "Should overload be inheritable?" | |
649 | .IX Subsection "Should overload be inheritable?" | |
650 | Should overload be 'contagious' through \f(CW@ISA\fR so that derived classes | |
651 | would inherit their base classes' overload definitions? What to do | |
652 | in case of overload conflicts? | |
653 | .Sh "Taint rethink" | |
654 | .IX Subsection "Taint rethink" | |
655 | Should taint be stopped from affecting control flow, if ($tainted)? | |
656 | Should tainted symbolic method calls and subref calls be stopped? | |
657 | (Look at Ruby's \f(CW$SAFE\fR levels for inspiration?) | |
658 | .SH "Vague ideas" | |
659 | .IX Header "Vague ideas" | |
660 | Ideas which have been discussed, and which may or may not happen. | |
661 | .Sh "\fIref()\fP in list context" | |
662 | .IX Subsection "ref() in list context" | |
663 | It's unclear what this should do or how to do it without breaking old | |
664 | code. | |
665 | .Sh "Make tr/// return histogram of characters in list context" | |
666 | .IX Subsection "Make tr/// return histogram of characters in list context" | |
667 | There is a patch for this, but it may require Unicodification. | |
668 | .Sh "Compile to real threaded code" | |
669 | .IX Subsection "Compile to real threaded code" | |
670 | .Sh "Structured types" | |
671 | .IX Subsection "Structured types" | |
672 | .ie n .Sh "Modifiable $1 et al." | |
673 | .el .Sh "Modifiable \f(CW$1\fP et al." | |
674 | .IX Subsection "Modifiable $1 et al." | |
675 | .Vb 2 | |
676 | \& ($x = "elephant") =~ /e(ph)/; | |
677 | \& $1 = "g"; # $x = "elegant" | |
678 | .Ve | |
679 | .PP | |
680 | What happens if there are multiple (nested?) brackets? What if the | |
681 | string changes between the match and the assignment? | |
682 | .Sh "Procedural interfaces for IO::*, etc." | |
683 | .IX Subsection "Procedural interfaces for IO::*, etc." | |
684 | Some core modules have been accused of being overly\-OO. Adding | |
685 | procedural interfaces could demystify them. | |
686 | .Sh "\s-1RPC\s0 modules" | |
687 | .IX Subsection "RPC modules" | |
688 | .Sh "Attach/detach debugger from running program" | |
689 | .IX Subsection "Attach/detach debugger from running program" | |
690 | With \f(CW\*(C`gdb\*(C'\fR, you can attach the debugger to a running program if you | |
691 | pass the process \s-1ID\s0. It would be good to do this with the Perl debugger | |
692 | on a running Perl program, although I'm not sure how it would be done. | |
693 | .Sh "GUI::Native" | |
694 | .IX Subsection "GUI::Native" | |
695 | A non-core module that would use \*(L"native\*(R" \s-1GUI\s0 to create graphical | |
696 | applications. | |
697 | .Sh "foreach(reverse ...)" | |
698 | .IX Subsection "foreach(reverse ...)" | |
699 | Currently | |
700 | .PP | |
701 | .Vb 1 | |
702 | \& foreach (reverse @_) { ... } | |
703 | .Ve | |
704 | .PP | |
705 | puts \f(CW@_\fR on the stack, reverses it putting the reversed version on the | |
706 | stack, then iterates forwards. Instead, it could be special-cased to put | |
707 | \&\f(CW@_\fR on the stack then iterate backwards. | |
708 | .Sh "Constant function cache" | |
709 | .IX Subsection "Constant function cache" | |
710 | .Sh "Approximate regular expression matching" | |
711 | .IX Subsection "Approximate regular expression matching" | |
712 | .SH "Ongoing" | |
713 | .IX Header "Ongoing" | |
714 | These items \fBalways\fR need doing: | |
715 | .Sh "Update guts documentation" | |
716 | .IX Subsection "Update guts documentation" | |
717 | Simon Cozens tries to do this when possible, and contributions to the | |
718 | \&\f(CW\*(C`perlapi\*(C'\fR documentation is welcome. | |
719 | .Sh "Add more tests" | |
720 | .IX Subsection "Add more tests" | |
721 | Michael Schwern will donate \f(CW$500\fR to Yet Another Society when all core | |
722 | modules have tests. | |
723 | .Sh "Update auxiliary tools" | |
724 | .IX Subsection "Update auxiliary tools" | |
725 | The code we ship with Perl should look like good Perl 5. | |
726 | .Sh "Create debugging macros" | |
727 | .IX Subsection "Create debugging macros" | |
728 | Debugging macros (like printsv, dump) can make debugging perl inside a | |
729 | C debugger much easier. A good set for gdb comes with mod_perl. | |
730 | Something similar should be distributed with perl. | |
731 | .PP | |
732 | The proper way to do this is to use and extend Devel::DebugInit. | |
733 | Devel::DebugInit also needs to be extended to support threads. | |
734 | .PP | |
735 | See p5p archives for late May/early June 2001 for a recent discussion | |
736 | on this topic. | |
737 | .Sh "truncate to the people" | |
738 | .IX Subsection "truncate to the people" | |
739 | One can emulate \fIftruncate()\fR using F_FREESP and F_CHSIZ fcntls | |
740 | (see the \s-1UNIX\s0 \s-1FAQ\s0 for details). This needs to go somewhere near | |
741 | pp_sys.\fIc:pp_truncate()\fR. | |
742 | .PP | |
743 | One can emulate \fItruncate()\fR easily if one has \fIftruncate()\fR. | |
744 | This emulation should also go near pp_sys.\fIpp_truncate()\fR. | |
745 | .Sh "Unicode in Filenames" | |
746 | .IX Subsection "Unicode in Filenames" | |
747 | chdir, chmod, chown, chroot, exec, glob, link, lstat, mkdir, open, | |
748 | opendir, qx, readdir, readlink, rename, rmdir, stat, symlink, sysopen, | |
749 | system, truncate, unlink, utime. All these could potentially accept | |
750 | Unicode filenames either as input or output (and in the case of system | |
751 | and qx Unicode in general, as input or output to/from the shell). | |
752 | Whether a filesystem \- an operating system pair understands Unicode in | |
753 | filenames varies. | |
754 | .PP | |
755 | Known combinations that have some level of understanding include | |
756 | Microsoft \s-1NTFS\s0, Apple \s-1HFS+\s0 (In Mac \s-1OS\s0 9 and X) and Apple \s-1UFS\s0 (in Mac | |
757 | \&\s-1OS\s0 X), \s-1NFS\s0 v4 is rumored to be Unicode, and of course Plan 9. How to | |
758 | create Unicode filenames, what forms of Unicode are accepted and used | |
759 | (\s-1UCS\-2\s0, \s-1UTF\-16\s0, \s-1UTF\-8\s0), what (if any) is the normalization form used, | |
760 | and so on, varies. Finding the right level of interfacing to Perl | |
761 | requires some thought. Remember that an \s-1OS\s0 does not implicate a | |
762 | filesystem. | |
763 | .PP | |
764 | Note that in Windows the \-C command line flag already does quite | |
765 | a bit of the above (but even there the support is not complete: | |
766 | for example the exec/spawn are not Unicode\-aware) by turning on | |
767 | the so-called \*(L"wide \s-1API\s0 support\*(R". | |
768 | .SH "Recently done things" | |
769 | .IX Header "Recently done things" | |
770 | These are things which have been on the todo lists in previous releases | |
771 | but have recently been completed. | |
772 | .Sh "Alternative \s-1RE\s0 syntax module" | |
773 | .IX Subsection "Alternative RE syntax module" | |
774 | The \f(CW\*(C`Regexp::English\*(C'\fR module, available from the \s-1CPAN\s0, provides this: | |
775 | .PP | |
776 | .Vb 10 | |
777 | \& my $re = Regexp::English | |
778 | \& -> start_of_line | |
779 | \& -> literal('Flippers') | |
780 | \& -> literal(':') | |
781 | \& -> optional | |
782 | \& -> whitespace_char | |
783 | \& -> end | |
784 | \& -> remember | |
785 | \& -> multiple | |
786 | \& -> digit; | |
787 | .Ve | |
788 | .PP | |
789 | .Vb 1 | |
790 | \& /$re/; | |
791 | .Ve | |
792 | .Sh "Safe signal handling" | |
793 | .IX Subsection "Safe signal handling" | |
794 | A new signal model went into 5.7.1 without much fanfare. Operations and | |
795 | \&\f(CW\*(C`malloc\*(C'\fRs are no longer interrupted by signals, which are handled | |
796 | between opcodes. This means that \f(CW\*(C`PERL_ASYNC_CHECK\*(C'\fR now actually does | |
797 | something. However, there are still a few things that need to be done. | |
798 | .Sh "Tie Modules" | |
799 | .IX Subsection "Tie Modules" | |
800 | Modules which implement arrays in terms of strings, substrings or files | |
801 | can be found on the \s-1CPAN\s0. | |
802 | .Sh "gettimeofday" | |
803 | .IX Subsection "gettimeofday" | |
804 | \&\f(CW\*(C`Time::HiRes\*(C'\fR has been integrated into the core. | |
805 | .Sh "setitimer and getimiter" | |
806 | .IX Subsection "setitimer and getimiter" | |
807 | Adding \f(CW\*(C`Time::HiRes\*(C'\fR got us this too. | |
808 | .Sh "Testing _\|_DIE_\|_ hook" | |
809 | .IX Subsection "Testing __DIE__ hook" | |
810 | Tests have been added. | |
811 | .Sh "\s-1CPP\s0 equivalent in Perl" | |
812 | .IX Subsection "CPP equivalent in Perl" | |
813 | A C Yardley will probably have done this by the time you can read this. | |
814 | This allows for a generalization of the C constant detection used in | |
815 | building \f(CW\*(C`Errno.pm\*(C'\fR. | |
816 | .Sh "Explicit switch statements" | |
817 | .IX Subsection "Explicit switch statements" | |
818 | \&\f(CW\*(C`Switch.pm\*(C'\fR has been integrated into the core to give you all manner of | |
819 | \&\f(CW\*(C`switch...case\*(C'\fR semantics. | |
820 | .Sh "autocroak" | |
821 | .IX Subsection "autocroak" | |
822 | This is \f(CW\*(C`Fatal.pm\*(C'\fR. | |
823 | .Sh "\s-1UTF/EBCDIC\s0" | |
824 | .IX Subsection "UTF/EBCDIC" | |
825 | Nick Ing-Simmons has made UTF-EBCDIC (\s-1UTR13\s0) work with Perl. | |
826 | .PP | |
827 | .Vb 1 | |
828 | \& EBCDIC? http://www.unicode.org/unicode/reports/tr16/ | |
829 | .Ve | |
830 | .Sh "\s-1UTF\s0 Regexes" | |
831 | .IX Subsection "UTF Regexes" | |
832 | Although there are probably some small bugs to be rooted out, Jarkko | |
833 | Hietaniemi has made regular expressions polymorphic between bytes and | |
834 | characters. | |
835 | .Sh "perlcc to produce executable" | |
836 | .IX Subsection "perlcc to produce executable" | |
837 | \&\f(CW\*(C`perlcc\*(C'\fR was recently rewritten, and can now produce standalone | |
838 | executables. | |
839 | .Sh "\s-1END\s0 blocks saved in compiled output" | |
840 | .IX Subsection "END blocks saved in compiled output" | |
841 | .Sh "Secure temporary file module" | |
842 | .IX Subsection "Secure temporary file module" | |
843 | Tim Jenness' \f(CW\*(C`File::Temp\*(C'\fR is now in core. | |
844 | .Sh "Integrate Time::HiRes" | |
845 | .IX Subsection "Integrate Time::HiRes" | |
846 | This module is now part of core. | |
847 | .Sh "Turn Cwd into \s-1XS\s0" | |
848 | .IX Subsection "Turn Cwd into XS" | |
849 | Benjamin Sugars has done this. | |
850 | .Sh "Mmap for input" | |
851 | .IX Subsection "Mmap for input" | |
852 | Nick Ing\-Simmons' \f(CW\*(C`perlio\*(C'\fR supports an \f(CW\*(C`mmap\*(C'\fR \s-1IO\s0 method. | |
853 | .Sh "Byte to/from \s-1UTF8\s0 and \s-1UTF8\s0 to/from local conversion" | |
854 | .IX Subsection "Byte to/from UTF8 and UTF8 to/from local conversion" | |
855 | \&\f(CW\*(C`Encode\*(C'\fR provides this. | |
856 | .Sh "Add sockatmark support" | |
857 | .IX Subsection "Add sockatmark support" | |
858 | Added in 5.7.1 | |
859 | .Sh "Mailing list archives" | |
860 | .IX Subsection "Mailing list archives" | |
861 | http://lists.perl.org/ , http://archive.develooper.com/ | |
862 | .Sh "Bug tracking" | |
863 | .IX Subsection "Bug tracking" | |
864 | Richard Foley has written the bug tracking system at http://bugs.perl.org/ | |
865 | .Sh "Integrate MacPerl" | |
866 | .IX Subsection "Integrate MacPerl" | |
867 | Chris Nandor and Matthias Neeracher have integrated the MacPerl changes | |
868 | into 5.6.0. | |
869 | .ie n .Sh "Web ""nerve center"" for Perl" | |
870 | .el .Sh "Web ``nerve center'' for Perl" | |
871 | .IX Subsection "Web nerve center for Perl" | |
872 | http://use.perl.org/ is what you're looking for. | |
873 | .Sh "Regular expression tutorial" | |
874 | .IX Subsection "Regular expression tutorial" | |
875 | \&\f(CW\*(C`perlretut\*(C'\fR, provided by Mark Kvale. | |
876 | .Sh "Debugging Tutorial" | |
877 | .IX Subsection "Debugging Tutorial" | |
878 | \&\f(CW\*(C`perldebtut\*(C'\fR, written by Richard Foley. | |
879 | .Sh "Integrate new modules" | |
880 | .IX Subsection "Integrate new modules" | |
881 | Jarkko has been integrating madly into 5.7.x | |
882 | .Sh "Integrate profiler" | |
883 | .IX Subsection "Integrate profiler" | |
884 | \&\f(CW\*(C`Devel::DProf\*(C'\fR is now a core module. | |
885 | .Sh "Y2K error detection" | |
886 | .IX Subsection "Y2K error detection" | |
887 | There's a configure option to detect unsafe concatenation with \*(L"19\*(R", and | |
888 | a \s-1CPAN\s0 module. (\f(CW\*(C`D'oh::Year\*(C'\fR) | |
889 | .Sh "Regular expression debugger" | |
890 | .IX Subsection "Regular expression debugger" | |
891 | While not part of core, Mark-Jason Dominus has written \f(CW\*(C`Rx\*(C'\fR and has | |
892 | also come up with a generalised strategy for regular expression | |
893 | debugging. | |
894 | .Sh "\s-1POD\s0 checker" | |
895 | .IX Subsection "POD checker" | |
896 | That's, uh, \fIpodchecker\fR | |
897 | .ie n .Sh """Dynamic"" lexicals" | |
898 | .el .Sh "``Dynamic'' lexicals" | |
899 | .IX Subsection "Dynamic lexicals" | |
900 | .Sh "Cache precompiled modules" | |
901 | .IX Subsection "Cache precompiled modules" | |
902 | .SH "Deprecated Wishes" | |
903 | .IX Header "Deprecated Wishes" | |
904 | These are items which used to be in the todo file, but have been | |
905 | deprecated for some reason. | |
906 | .Sh "Loop control on do{}" | |
907 | .IX Subsection "Loop control on do{}" | |
908 | This would break old code; use \f(CW\*(C`do{{ }}\*(C'\fR instead. | |
909 | .Sh "Lexically scoped typeglobs" | |
910 | .IX Subsection "Lexically scoped typeglobs" | |
911 | Not needed now we have lexical \s-1IO\s0 handles. | |
912 | .Sh "format \s-1BOTTOM\s0" | |
913 | .IX Subsection "format BOTTOM" | |
914 | .Sh "report \s-1HANDLE\s0" | |
915 | .IX Subsection "report HANDLE" | |
916 | Damian Conway's text formatting modules seem to be the Way To Go. | |
917 | .Sh "Generalised \fIwant()\fP/\fIcaller()\fP)" | |
918 | .IX Subsection "Generalised want()/caller())" | |
919 | Robin Houston's \f(CW\*(C`Want\*(C'\fR module does this. | |
920 | .Sh "Named prototypes" | |
921 | .IX Subsection "Named prototypes" | |
922 | This seems to be delayed until Perl 6. | |
923 | .Sh "Built-in globbing" | |
924 | .IX Subsection "Built-in globbing" | |
925 | The \f(CW\*(C`File::Glob\*(C'\fR module has been used to replace the \f(CW\*(C`glob\*(C'\fR function. | |
926 | .Sh "Regression tests for suidperl" | |
927 | .IX Subsection "Regression tests for suidperl" | |
928 | \&\f(CW\*(C`suidperl\*(C'\fR is deprecated in favour of common sense. | |
929 | .Sh "Cached hash values" | |
930 | .IX Subsection "Cached hash values" | |
931 | We have shared hash keys, which perform the same job. | |
932 | .Sh "Add compression modules" | |
933 | .IX Subsection "Add compression modules" | |
934 | The compression modules are a little heavy; meanwhile, Nick Clark is | |
935 | working on experimental pragmata to do transparent decompression on | |
936 | input. | |
937 | .Sh "Reorganise documentation into tutorials/references" | |
938 | .IX Subsection "Reorganise documentation into tutorials/references" | |
939 | Could not get consensus on P5P about this. | |
940 | .Sh "Remove distinction between functions and operators" | |
941 | .IX Subsection "Remove distinction between functions and operators" | |
942 | Caution: highly flammable. | |
943 | .Sh "Make \s-1XS\s0 easier to use" | |
944 | .IX Subsection "Make XS easier to use" | |
945 | Use \f(CW\*(C`Inline\*(C'\fR instead, or \s-1SWIG\s0. | |
946 | .Sh "Make embedding easier to use" | |
947 | .IX Subsection "Make embedding easier to use" | |
948 | Use \f(CW\*(C`Inline::CPR\*(C'\fR. | |
949 | .Sh "man for perl" | |
950 | .IX Subsection "man for perl" | |
951 | See the Perl Power Tools. ( http://language.perl.com/ppt/ ) | |
952 | .ie n .Sh "my $Package::variable" | |
953 | .el .Sh "my \f(CW$Package::variable\fP" | |
954 | .IX Subsection "my $Package::variable" | |
955 | Use \f(CW\*(C`our\*(C'\fR instead. | |
956 | .ie n .Sh """or"" tests defined, not truth" | |
957 | .el .Sh "``or'' tests defined, not truth" | |
958 | .IX Subsection "or tests defined, not truth" | |
959 | Suggesting this on P5P \fBwill\fR cause a boring and interminable flamewar. | |
960 | .ie n .Sh """class""\-based lexicals" | |
961 | .el .Sh "``class''\-based lexicals" | |
962 | .IX Subsection "class-based lexicals" | |
963 | Use flyweight objects, secure hashes or, dare I say it, pseudo-hashes instead. | |
964 | (Or whatever will replace pseudohashes in 5.10.) | |
965 | .Sh "byteperl" | |
966 | .IX Subsection "byteperl" | |
967 | \&\f(CW\*(C`ByteLoader\*(C'\fR covers this. | |
968 | .Sh "Lazy evaluation / tail recursion removal" | |
969 | .IX Subsection "Lazy evaluation / tail recursion removal" | |
970 | \&\f(CW\*(C`List::Util\*(C'\fR gives \fIfirst()\fR (a short-circuiting grep); tail recursion | |
971 | removal is done manually, with \f(CW\*(C`goto &whoami;\*(C'\fR. (However, \s-1MJD\s0 has | |
972 | found that \f(CW\*(C`goto &whoami\*(C'\fR introduces a performance penalty, so maybe | |
973 | there should be a way to do this after all: \f(CW\*(C`sub foo {START: ... goto | |
974 | START;\*(C'\fR is better.) | |
975 | .ie n .Sh "Make ""use utf8"" the default" | |
976 | .el .Sh "Make ``use utf8'' the default" | |
977 | .IX Subsection "Make use utf8 the default" | |
978 | Because of backward compatibility this is difficult: scripts could not | |
979 | contain \fBany legacy eight-bit data\fR (like Latin\-1) anymore, even in | |
980 | string literals or pod. Also would introduce a measurable slowdown of | |
981 | at least few percentages since all regular expression operations would | |
982 | be done in full \s-1UTF\-8\s0. But if you want to try this, add | |
983 | \&\-DUSE_UTF8_SCRIPTS to your compilation flags. | |
984 | .Sh "Unicode collation and normalization" | |
985 | .IX Subsection "Unicode collation and normalization" | |
986 | The Unicode::Collate and Unicode::Normalize modules | |
987 | by \s-1SADAHIRO\s0 Tomoyuki have been included since 5.8.0. | |
988 | .PP | |
989 | .Vb 2 | |
990 | \& Collation? http://www.unicode.org/unicode/reports/tr10/ | |
991 | \& Normalization? http://www.unicode.org/unicode/reports/tr15/ | |
992 | .Ve | |
993 | .Sh "pack/unpack tutorial" | |
994 | .IX Subsection "pack/unpack tutorial" | |
995 | Wolfgang Laun finished what Simon Cozens started. |