Commit | Line | Data |
7711098a |
1 | =head1 NAME |
2 | |
3 | perltodo - Perl TO-DO List |
4 | |
5 | =head1 DESCRIPTION |
e50bb9a1 |
6 | |
7 | This is a list of wishes for Perl. It is maintained by Nathan |
8 | Torkington for the Perl porters. Send updates to |
9 | I<perl5-porters@perl.org>. If you want to work on any of these |
10 | projects, be sure to check the perl5-porters archives for past ideas, |
11 | flames, and propaganda. This will save you time and also prevent you |
12 | from implementing something that Larry has already vetoed. One set |
13 | of archives may be found at: |
14 | |
15 | http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/ |
16 | |
17 | |
18 | =head1 Infrastructure |
19 | |
20 | =head2 Mailing list archives |
21 | |
22 | Chaim suggests contacting egroup and asking them to archive the other |
23 | perl.org mailing lists. Probably not advocacy, but definitely |
24 | perl6-porters, etc. |
25 | |
26 | =head2 Bug tracking system |
27 | |
28 | Richard Foley I<richard@perl.org> is writing one. We looked at |
29 | several, like gnats and the Debian system, but at the time we |
30 | investigated them, none met our needs. Since then, Jitterbug has |
31 | matured, and may be worth reinvestigation. |
32 | |
e28598cb |
33 | The system we've developed is the recipient of perlbug mail, and any |
34 | followups it generates from perl5-porters. New bugs are entered |
35 | into a mysql database, and sent on to |
e50bb9a1 |
36 | perl5-porters with the subject line rewritten to include a "ticket |
37 | number" (unique ID for the new bug). If the incoming message already |
38 | had a ticket number in the subject line, then the message is logged |
39 | against that bug. There is a separate email interface (not forwarding |
40 | to p5p) that permits porters to claim, categorize, and close tickets. |
41 | |
e28598cb |
42 | There is also a web interface to the system at http://bugs.perl.org. |
e50bb9a1 |
43 | |
44 | The current delay in implementation is caused by perl.org lockups. |
45 | One suspect is the mail handling system, possibly going into loops. |
46 | |
e28598cb |
47 | We still desperately need a bugmaster, someone who will look at |
e50bb9a1 |
48 | every new "bug" and kill those that we already know about, those |
49 | that are not bugs at all, etc. |
50 | |
51 | =head2 Regression Tests |
52 | |
53 | The test suite for Perl serves two needs: ensuring features work, and |
54 | ensuring old bugs have not been reintroduced. Both need work. |
55 | |
56 | Brent LaVelle (lavelle@metronet.com) has stepped forward to work on |
57 | performance tests and improving the size of the test suite. |
58 | |
59 | =over 4 |
60 | |
61 | =item Coverage |
62 | |
63 | Do the tests that come with Perl exercise every line (or every block, |
64 | or ...) of the Perl interpreter, and if not then how can we make them |
65 | do so? |
66 | |
67 | =item Regression |
68 | |
69 | No bug fixes should be made without a corresponding testsuite addition. |
70 | This needs a dedicated enforcer, as the current pumpking is either too |
71 | lazy or too stupid or both and lets enforcement wander all over the |
72 | map. :-) |
73 | |
74 | =item __DIE__ |
75 | |
76 | Tests that fail need to be of a form that can be readily mailed |
77 | to perlbug and diagnosed with minimal back-and-forth's to determine |
78 | which test failed, due to what cause, etc. |
79 | |
80 | =item suidperl |
81 | |
82 | We need regression/sanity tests for suidperl |
83 | |
84 | =item The 25% slowdown from perl4 to perl5 |
85 | |
86 | This value may or may not be accurate, but it certainly is |
87 | eye-catching. For some things perl5 is faster than perl4, but often |
88 | the reliability and extensability have come at a cost of speed. The |
89 | benchmark suite that Gisle released earlier has been hailed as both a |
90 | fantastic solution and as a source of entirely meaningless figures. |
91 | Do we need to test "real applications"? Can you do so? Anyone have |
92 | machines to dedicate to the task? Identify the things that have grown |
93 | slower, and see if there's a way to make them faster. |
94 | |
95 | =back |
96 | |
e50bb9a1 |
97 | =head1 Configure |
98 | |
99 | Andy Dougherty maintain(ed|s) a list of "todo" items for the configure |
100 | that comes with Perl. See Porting/pumpkin.pod in the latest |
101 | source release. |
102 | |
103 | =head2 Install HTML |
104 | |
105 | Have "make install" give you the option to install HTML as well. This |
106 | would be part of Configure. Andy Wardley (certified Perl studmuffin) |
107 | will look into the current problems of HTML installation--is |
108 | 'installhtml' preventing this from happening cleanly, or is pod2html |
109 | the problem? If the latter, Brad Appleton's pod work may fix the |
110 | problem for free. |
111 | |
112 | =head1 Perl Language |
113 | |
114 | =head2 our ($var) |
115 | |
116 | Declare global variables (lexically or otherwise). |
117 | |
118 | =head2 64-bit Perl |
119 | |
120 | Verify complete 64 bit support so that the value of sysseek, or C<-s>, or |
121 | stat(), or tell can fit into a perl number without losing precision. |
122 | Work with the perl-64bit mailing list on perl.org. |
123 | |
e50bb9a1 |
124 | =head2 Prototypes |
125 | |
126 | =over 4 |
127 | |
128 | =item Named prototypes |
129 | |
130 | Add proper named prototypes that actually work usefully. |
131 | |
132 | =item Indirect objects |
133 | |
134 | Fix prototype bug that forgets indirect objects. |
135 | |
136 | =item Method calls |
137 | |
138 | Prototypes for method calls. |
139 | |
140 | =item Context |
141 | |
142 | Return context prototype declarations. |
143 | |
144 | =item Scoped subs |
145 | |
146 | lexically-scoped subs, e.g. my sub |
147 | |
148 | =back |
149 | |
150 | =head2 Built-in globbing |
151 | |
152 | Currently the C<E<lt>*.cE<gt>> syntax calls the c shell. This causes |
153 | problems on sites without csh, systems where fork() is expensive, and |
154 | setuid environments. Decide between Glob::BSD and File::KGlob, move |
155 | it into the core, and make Perl use it for globbing. Ben Holzman and |
156 | Tye McQueen have claimed the pumpkin for this. |
157 | |
e50bb9a1 |
158 | =head1 Perl Internals |
159 | |
160 | =head2 magic_setisa |
161 | |
162 | C<magic_setisa> should be made to update %FIELDS [???] |
163 | |
e50bb9a1 |
164 | =head2 Garbage Collection |
165 | |
166 | There was talk of a mark-and-sweep garbage collector at TPC2, but the |
167 | (to users) unpredictable nature of its behaviour put some off. |
168 | Sarathy, I believe, did the work. Here's what he has to say: |
169 | |
170 | Yeah, I hope to implement it someday too. The points that were |
171 | raised in TPC2 were all to do with calling DESTROY() methods, but |
172 | I think we can accomodate that by extending bless() to stash |
173 | extra information for objects so we track their lifetime accurately |
174 | for those that want their DESTROY() to be predictable (this will be |
175 | a speed hit, naturally, and will therefore be optional, naturally. :) |
176 | |
177 | [N.B. Don't even ask me about this now! When I have the time to |
178 | write a cogent summary, I'll post it.] |
179 | |
180 | =head2 Reliable signals |
181 | |
182 | Sarathy and Dan Sugalski are working on this. Chip posted a patch |
183 | earlier, but it was not accepted into 5.005. The issue is tricky, |
184 | because it has the potential to greatly slow down the core. |
185 | |
186 | There are at least three things to consider: |
187 | |
188 | =over 4 |
189 | |
190 | =item Alternate runops() for signal despatch |
191 | |
192 | Sarathy and Dan are discussed this on perl5-porters. |
193 | |
194 | =item Figure out how to die() in delayed sighandler |
195 | |
196 | =item Add tests for Thread::Signal |
197 | |
198 | =item Automatic tests against CPAN |
199 | |
200 | Is there some way to automatically build all/most of CPAN with |
201 | the new Perl and check that the modules there pass all the tests? |
202 | |
203 | =back |
204 | |
205 | =head2 Interpolated regex performance bugs |
206 | |
207 | while (<>) { |
208 | $found = 0; |
209 | foreach $pat (@patterns) { |
210 | $found++ if /$pat/o; |
211 | } |
212 | print if $found; |
213 | } |
214 | |
215 | The qr// syntax added in 5.005 has solved this problem, but |
216 | it needs more thorough documentation. |
217 | |
218 | =head2 Memory leaks from failed eval/regcomp |
219 | |
220 | The only known memory leaks in Perl are in failed code or regexp |
221 | compilation. Fix this. Hugo Van Der Sanden will attempt this but |
222 | won't have tuits until January 1999. |
223 | |
224 | =head2 Make XS easier to use |
225 | |
226 | There was interest in SWIG from porters, but nothing has happened |
227 | lately. |
228 | |
229 | =head2 Make embedded Perl easier to use |
230 | |
231 | This is probably difficult for the same reasons that "XS For Dummies" |
232 | will be difficult. |
233 | |
234 | =head2 Namespace cleanup |
235 | |
04c70446 |
236 | CPP-space: restrict CPP symbols exported from headers |
e50bb9a1 |
237 | header-space: move into CORE/perl/ |
238 | API-space: begin list of things that constitute public api |
766b5730 |
239 | env-space: Configure should use PERL_CONFIG instead of CONFIG etc. |
e50bb9a1 |
240 | |
241 | =head2 MULTIPLICITY |
242 | |
243 | Complete work on safe recursive interpreters C<Perl-E<gt>new()>. |
244 | Sarathy says that a reference implementation exists. |
245 | |
246 | =head2 MacPerl |
247 | |
248 | Chris Nandor and Matthias Neeracher are working on better integrating |
249 | MacPerl into the Perl distribution. |
250 | |
251 | =head1 Documentation |
252 | |
253 | There's a lot of documentation that comes with Perl. The quantity of |
254 | documentation makes it difficult for users to know which section of |
255 | which manpage to read in order to solve their problem. Tom |
256 | Christiansen has done much of the documentation work in the past. |
257 | |
258 | =head2 A clear division into tutorial and reference |
259 | |
260 | Some manpages (e.g., perltoot and perlreftut) clearly set out to |
261 | educate the reader about a subject. Other manpages (e.g., perlsub) |
262 | are references for which there is no tutorial, or are references with |
263 | a slight tutorial bent. If things are either tutorial or reference, |
264 | then the reader knows which manpage to read to learn about a subject, |
265 | and which manpage to read to learn all about an aspect of that |
266 | subject. Part of the solution to this is: |
267 | |
268 | =head2 Remove the artificial distinction between operators and functions |
269 | |
270 | History shows us that users, and often porters, aren't clear on the |
271 | operator-function distinction. The present split in reference |
272 | material between perlfunc and perlop hinders user navigation. Given |
273 | that perlfunc is by far the larger of the two, move operator reference |
274 | into perlfunc. |
275 | |
276 | =head2 More tutorials |
277 | |
278 | More documents of a tutorial nature could help. Here are some |
279 | candidates: |
280 | |
281 | =over 4 |
282 | |
283 | =item Regular expressions |
284 | |
285 | Robin Berjon (r.berjon@ltconsulting.net) has volunteered. |
286 | |
287 | =item I/O |
288 | |
289 | Mark-Jason Dominus (mjd@plover.com) has an outline for perliotut. |
290 | |
291 | =item pack/unpack |
292 | |
293 | This is badly needed. There has been some discussion on the |
294 | subject on perl5-porters. |
295 | |
296 | =item Debugging |
297 | |
298 | Ronald Kimball (rjk@linguist.dartmouth.edu) has volunteered. |
299 | |
a45bd81d |
300 | =back |
301 | |
e50bb9a1 |
302 | =head2 Include a search tool |
303 | |
304 | perldoc should be able to 'grep' fulltext indices of installed POD |
305 | files. This would let people say: |
306 | |
307 | perldoc -find printing numbers with commas |
308 | |
309 | and get back the perlfaq entry on 'commify'. |
310 | |
311 | This solution, however, requires documentation to contain the keywords |
312 | the user is searching for. Even when the users know what they're |
313 | looking for, often they can't spell it. |
314 | |
315 | =head2 Include a locate tool |
316 | |
317 | perldoc should be able to help people find the manpages on a |
318 | particular high-level subject: |
319 | |
320 | perldoc -find web |
321 | |
322 | would tell them manpages, web pages, and books with material on web |
323 | programming. Similarly C<perldoc -find databases>, C<perldoc -find |
324 | references> and so on. |
325 | |
326 | We need something in the vicinity of: |
327 | |
328 | % perl -help random stuff |
329 | No documentation for perl function `random stuff' found |
330 | The following entry in perlfunc.pod matches /random/a: |
331 | =item rand EXPR |
332 | |
333 | =item rand |
334 | |
335 | Returns a random fractional number greater than or equal to C<0> and less |
336 | than the value of EXPR. (EXPR should be positive.) If EXPR is |
337 | omitted, the value C<1> is used. Automatically calls C<srand()> unless |
338 | C<srand()> has already been called. See also C<srand()>. |
339 | |
340 | (Note: If your rand function consistently returns numbers that are too |
341 | large or too small, then your version of Perl was probably compiled |
342 | with the wrong number of RANDBITS.) |
343 | The following pod pages seem to have /stuff/a: |
344 | perlfunc.pod (7 hits) |
345 | perlfaq7.pod (6 hits) |
346 | perlmod.pod (4 hits) |
347 | perlsyn.pod (3 hits) |
348 | perlfaq8.pod (2 hits) |
349 | perlipc.pod (2 hits) |
350 | perl5004delta.pod (1 hit) |
351 | perl5005delta.pod (1 hit) |
352 | perlcall.pod (1 hit) |
353 | perldelta.pod (1 hit) |
354 | perlfaq3.pod (1 hit) |
355 | perlfaq5.pod (1 hit) |
356 | perlhist.pod (1 hit) |
357 | perlref.pod (1 hit) |
358 | perltoc.pod (1 hit) |
359 | perltrap.pod (1 hit) |
360 | Proceed to open perlfunc.pod? [y] n |
361 | Do you want to speak perl interactively? [y] n |
362 | Should I dial 911? [y] n |
363 | Do you need psychiatric help? [y] y |
364 | <PELIZA> Hi, what bothers you today? |
365 | A Python programmer in the next cubby is driving me nuts! |
366 | <PELIZA> Hmm, thats fixable. Just [rest censored] |
367 | |
368 | =head2 Separate function manpages by default |
369 | |
370 | Perl should install 'manpages' for every function/operator into the |
371 | 3pl or 3p manual section. By default. The splitman program in the |
372 | Perl source distribution does the work of turning big perlfunc into |
373 | little 3p pages. |
374 | |
375 | =head2 Users can't find the manpages |
376 | |
377 | Make C<perldoc> tell users what they need to add to their .login or |
378 | .cshrc to set their MANPATH correctly. |
379 | |
380 | =head2 Install ALL Documentation |
381 | |
382 | Make the standard documentation kit include the VMS, OS/2, Win32, |
3724d6f4 |
383 | Threads, etc information. installperl and pod/Makefile should know |
384 | enough to copy README.foo to perlfoo.pod before building everything, |
385 | when appropriate. |
e50bb9a1 |
386 | |
387 | =head2 Outstanding issues to be documented |
388 | |
389 | Tom has a list of 5.005_5* features or changes that require |
390 | documentation. |
391 | |
392 | Create one document that coherently explains the delta between the |
393 | last camel release and the current release. perldelta was supposed |
394 | to be that, but no longer. The things in perldelta never seemed to |
395 | get placed in the right places in the real manpages, either. This |
396 | needs work. |
397 | |
04c70446 |
398 | =head2 Adapt www.linuxhq.com for Perl |
399 | |
400 | This should help glorify documentation and get more people involved in |
401 | perl development. |
402 | |
e50bb9a1 |
403 | =head2 Replace man with a perl program |
404 | |
405 | Can we reimplement man in Perl? Tom has a start. I believe some of |
406 | the Linux systems distribute a manalike. Alternatively, build on |
407 | perldoc to remove the unfeatures like "is slow" and "has no apropos". |
408 | |
409 | =head2 Unicode tutorial |
410 | |
411 | We could use more work on helping people understand Perl's new |
412 | Unicode support that Larry has created. |
413 | |
e50bb9a1 |
414 | =head1 Modules |
415 | |
416 | =head2 Update the POSIX extension to conform with the POSIX 1003.1 Edition 2 |
417 | |
418 | The current state of the POSIX extension is as of Edition 1, 1991, |
419 | whereas the Edition 2 came out in 1996. ISO/IEC 9945:1-1996(E), |
420 | ANSI/IEEE Std 1003.1, 1996 Edition. ISBN 1-55937-573-6. The updates |
421 | were legion: threads, IPC, and real time extensions. |
422 | |
423 | =head2 Module versions |
424 | |
425 | Automate the checking of versions in the standard distribution so |
426 | it's easy for a pumpking to check whether CPAN has a newer version |
427 | that we should be including? |
428 | |
429 | =head2 New modules |
430 | |
431 | Which modules should be added to the standard distribution? This ties |
432 | in with the SDK discussed on the perl-sdk list at perl.org. |
433 | |
e50bb9a1 |
434 | =head2 Profiler |
435 | |
436 | Make the profiler (Devel::DProf) part of the standard release, and |
437 | document it well. |
438 | |
439 | =head2 Tie Modules |
440 | |
441 | =over 4 |
442 | |
443 | =item VecArray |
444 | |
445 | Implement array using vec(). Nathan Torkington has working code to |
446 | do this. |
447 | |
448 | =item SubstrArray |
449 | |
450 | Implement array using substr() |
451 | |
452 | =item VirtualArray |
453 | |
454 | Implement array using a file |
455 | |
456 | =item ShiftSplice |
457 | |
458 | Defines shift et al in terms of splice method |
459 | |
460 | =back |
461 | |
e50bb9a1 |
462 | =head2 Procedural options |
463 | |
464 | Support procedural interfaces for the common cases of Perl's |
465 | gratuitously OOO modules. Tom objects to "use IO::File" reading many |
466 | thousands of lines of code. |
467 | |
468 | =head2 RPC |
469 | |
470 | Write a module for transparent, portable remote procedure calls. (Not |
471 | core). This touches on the CORBA and ILU work. |
472 | |
473 | =head2 y2k localtime/gmtime |
474 | |
475 | Write a module, Y2k::Catch, which overloads localtime and gmtime's |
476 | returned year value and catches "bad" attempts to use it. |
477 | |
478 | =head2 Export File::Find variables |
479 | |
480 | Make File::Find export C<$name> etc manually, at least if asked to. |
481 | |
482 | =head2 Ioctl |
483 | |
484 | Finish a proper Ioctl module. |
485 | |
486 | =head2 Debugger attach/detach |
487 | |
488 | Permit a user to debug an already-running program. |
489 | |
490 | =head2 Regular Expression debugger |
491 | |
492 | Create a visual profiler/debugger tool that stepped you through the |
493 | execution of a regular expression point by point. Ilya has a module |
494 | to color-code and display regular expression parses and executions. |
495 | There's something at http://tkworld.org/ that might be a good start, |
496 | it's a Tk/Tcl RE wizard, that builds regexen of many flavours. |
497 | |
498 | =head2 Alternative RE Syntax |
499 | |
500 | Make an alternative regular expression syntax that is accessed through |
501 | a module. For instance, |
502 | |
503 | use RE; |
504 | $re = start_of_line() |
505 | ->literal("1998/10/08") |
506 | ->optional( whitespace() ) |
507 | ->literal("[") |
508 | ->remember( many( or( "-", digit() ) ) ); |
509 | |
510 | if (/$re/) { |
511 | print "time is $1\n"; |
512 | } |
513 | |
514 | Newbies to regular expressions typically only use a subset of the full |
515 | language. Perhaps you wouldn't have to implement the full feature set. |
516 | |
517 | =head2 Bundled modules |
518 | |
519 | Nicholas Clark (nick@flirble.org) had a patch for storing modules in |
520 | zipped format. This needs exploring and concluding. |
521 | |
522 | =head2 Expect |
523 | |
524 | Adopt IO::Tty, make it as portable as Don Libes' "expect" (can we link |
525 | against expect code?), and perfect a Perl version of expect. IO::Tty |
526 | and expect could then be distributed as part of the core distribution, |
527 | replacing Comm.pl and other hacks. |
528 | |
529 | =head2 GUI::Native |
530 | |
531 | A simple-to-use interface to native graphical abilities would |
532 | be welcomed. Oh, Perl's access Tk is nice enough, and reasonably |
533 | portable, but it's not particularly as fast as one would like. |
534 | Simple access to the mouse's cut buffer or mouse-presses shouldn't |
535 | required loading a few terabytes of Tk code. |
536 | |
537 | =head2 Update semibroken auxiliary tools; h2ph, a2p, etc. |
538 | |
539 | Kurt Starsinic is working on h2ph. mjd has fixed bugs in a2p in the |
540 | past. a2p apparently doesn't work on nawk and gawk extensions. |
541 | Graham Barr has an Include module that does h2ph work at runtime. |
542 | |
543 | =head2 POD Converters |
544 | |
545 | Brad's PodParser code needs to become part of the core, and the Pod::* |
546 | and pod2* programs rewritten to use this standard parser. Currently |
547 | the converters take different options, some behave in different |
548 | fashions, and some are more picky than others in terms of the POD |
549 | files they accept. |
550 | |
551 | =head2 pod2html |
552 | |
553 | A short-term fix: pod2html generates absolute HTML links. Make it |
554 | generate relative links. |
555 | |
556 | =head2 Podchecker |
557 | |
558 | Something like lint for Pod would be good. Something that catches |
559 | common errors as well as gross ones. Brad Appleton is putting |
560 | together something as part of his PodParser work. |
561 | |
562 | =head1 Tom's Wishes |
563 | |
564 | =head2 Webperl |
565 | |
566 | Design a webperl environment that's as tightly integrated and as |
567 | easy-to-use as Perl's current command-line environment. |
568 | |
569 | =head2 Mobile agents |
570 | |
571 | More work on a safe and secure execution environment for mobile |
572 | agents would be neat; the Safe.pm module is a start, but there's a |
573 | still a lot to be done in that area. Adopt Penguin? |
574 | |
575 | =head2 POSIX on non-POSIX |
576 | |
577 | Standard programming constructs for non-POSIX systems would help a |
578 | lot of programmers stuck on primitive, legacy systems. For example, |
579 | Microsoft still hasn't made a usable POSIX interface on their clunky |
580 | systems, which means that standard operations such as alarm() and |
581 | fork(), both critical for sophisticated client-server programming, |
582 | must both be kludged around. |
583 | |
584 | I'm unsure whether Tom means to emulate alarm( )and fork(), or merely |
585 | to provide a document like perlport.pod to say which features are |
586 | portable and which are not. |
587 | |
588 | =head2 Portable installations |
589 | |
590 | Figure out a portable semi-gelled installation, that is, one without |
591 | full paths. Larry has said that he's thinking about this. Ilya |
592 | pointed out that perllib_mangle() is good for this. |
593 | |
594 | =head1 Win32 Stuff |
595 | |
e50bb9a1 |
596 | =head2 Get PERL_OBJECT building under gcc |
597 | |
598 | B<Part done>, according to Sarathy. It builds under egcs on win32, |
599 | but doesn't run for occult reasons. If anyone knows the right |
600 | breed of chicken to sacrifice, please speak up. |
601 | |
602 | =head2 Rename new headers to be consistent with the rest |
603 | |
604 | =head2 Sort out the spawnvp() mess |
605 | |
606 | =head2 Work out DLL versioning |
607 | |
608 | =head2 Get PERL_OBJECT building on non-win32 |
609 | |
610 | =head2 Style-check |
611 | |
612 | =head1 Would be nice to have |
613 | |
614 | =over 4 |
615 | |
616 | =item C<pack "(stuff)*"> |
617 | |
618 | =item Contiguous bitfields in pack/unpack |
619 | |
620 | =item lexperl |
621 | |
622 | =item Bundled perl preprocessor |
623 | |
624 | =item Use posix calls internally where possible |
625 | |
e50bb9a1 |
626 | =item format BOTTOM |
627 | |
e50bb9a1 |
628 | =item -i rename file only when successfully changed |
629 | |
630 | =item All ARGV input should act like <> |
631 | |
632 | =item report HANDLE [formats]. |
633 | |
634 | =item support in perlmain to rerun debugger |
635 | |
e50bb9a1 |
636 | =item lvalue functions |
637 | |
638 | Tuomas Lukka, on behalf of the PDL project, greatly desires this and |
639 | Ilya has a patch for it (probably against an older version of Perl). |
640 | Tuomas points out that what PDL really wants is lvalue I<methods>, |
641 | not just subs. |
642 | |
643 | =back |
644 | |
645 | =head1 Possible pragmas |
646 | |
647 | =head2 'less' |
648 | |
649 | (use less memory, CPU) |
650 | |
651 | =head1 Optimizations |
652 | |
653 | =head2 constant function cache |
654 | |
e50bb9a1 |
655 | =head2 foreach(reverse...) |
656 | |
657 | =head2 Cache eval tree |
658 | |
659 | Unless lexical outer scope used (mark in &compiling?). |
660 | |
661 | =head2 rcatmaybe |
662 | |
663 | =head2 Shrink opcode tables |
664 | |
665 | Via multiple implementations selected in peep. |
666 | |
667 | =head2 Cache hash value |
668 | |
669 | Not a win, according to Guido. |
670 | |
671 | =head2 Optimize away @_ where possible |
672 | |
673 | =head2 Optimize sort by { $a <=> $b } |
674 | |
675 | Greg Bacon added several more sort optimizations. These have |
676 | made it into 5.005_55, thanks to Hans Mulder. |
677 | |
678 | =head2 Rewrite regexp parser for better integrated optimization |
679 | |
680 | The regexp parser was rewritten for 5.005. Ilya's the regexp guru. |
681 | |
682 | =head1 Vague possibilities |
683 | |
684 | =over 4 |
685 | |
686 | =item ref function in list context |
687 | |
688 | This seems impossible to do without substantially breaking code. |
689 | |
690 | =item make tr/// return histogram in list context? |
691 | |
692 | =item Loop control on do{} et al |
693 | |
694 | =item Explicit switch statements |
695 | |
696 | Nobody has yet managed to come up with a switch syntax that would |
697 | allow for mixed hash, constant, regexp checks. Submit implementation |
698 | with syntax, please. |
699 | |
700 | =item compile to real threaded code |
701 | |
702 | =item structured types |
703 | |
e50bb9a1 |
704 | =item Modifiable $1 et al |
705 | |
706 | The intent is for this to be a means of editing the matched portions of |
707 | the target string. |
708 | |
709 | =back |
710 | |
711 | =head1 To Do Or Not To Do |
712 | |
713 | These are things that have been discussed in the past and roundly |
714 | criticized for being of questionable value. |
715 | |
716 | =head2 Making my() work on "package" variables |
717 | |
718 | Being able to say my($Foo::Bar), something that sounds ludicrous and |
87275199 |
719 | the 5.6 pumpking has mocked. |
e50bb9a1 |
720 | |
721 | =head2 "or" testing defined not truth |
722 | |
723 | We tell people that C<||> can be used to give a default value to a |
724 | variable: |
725 | |
726 | $children = shift || 5; # default is 5 children |
727 | |
728 | which is almost (but not): |
729 | |
730 | $children = shift; |
731 | $children = 5 unless $children; |
732 | |
733 | but if the first argument was given and is "0", then it will be |
734 | considered false by C<||> and C<5> used instead. Really we want |
04c70446 |
735 | an C<||>-like operator that behaves like: |
e50bb9a1 |
736 | |
737 | $children = shift; |
738 | $children = 5 unless defined $children; |
739 | |
04c70446 |
740 | Namely, a C<||> that tests defined-ness rather than truth. One was |
741 | discussed, and a patch submitted, but the objections were many. While |
742 | there were objections, many still feel the need. At least it was |
743 | decided that C<??> is the best name for the operator. |
e50bb9a1 |
744 | |
745 | =head2 "dynamic" lexicals |
746 | |
747 | my $x; |
748 | sub foo { |
749 | local $x; |
750 | } |
751 | |
752 | Localizing, as Tim Bunce points out, is a separate concept from |
753 | whether the variable is global or lexical. Chip Salzenberg had |
754 | an implementation once, but Larry thought it had potential to |
755 | confuse. |
756 | |
757 | =head2 "class"-based, rather than package-based "lexicals" |
758 | |
759 | This is like what the Alias module provides, but the variables would |
760 | be lexicals reserved by perl at compile-time, which really are indices |
761 | pointing into the pseudo-hash object visible inside every method so |
762 | declared. |
763 | |
764 | =head1 Threading |
765 | |
766 | =head2 Modules |
767 | |
768 | Which of the standard modules are thread-safe? Which CPAN modules? |
769 | How easy is it to fix those non-safe modules? |
770 | |
771 | =head2 Testing |
772 | |
773 | Threading is still experimental. Every reproducible bug identifies |
774 | something else for us to fix. Find and submit more of these problems. |
775 | |
776 | =head2 $AUTOLOAD |
777 | |
778 | =head2 exit/die |
779 | |
780 | Consistent semantics for exit/die in threads. |
781 | |
782 | =head2 External threads |
783 | |
784 | Better support for externally created threads. |
785 | |
786 | =head2 Thread::Pool |
787 | |
788 | =head2 thread-safety |
789 | |
790 | Spot-check globals like statcache and global GVs for thread-safety. |
791 | "B<Part done>", says Sarathy. |
792 | |
793 | =head2 Per-thread GVs |
794 | |
795 | According to Sarathy, this would make @_ be the same in threaded |
796 | and non-threaded, as well as helping solve problems like filehandles |
797 | (the same filehandle currently cannot be used in two threads). |
798 | |
799 | =head1 Compiler |
800 | |
801 | =head2 Optimization |
802 | |
803 | The compiler's back-end code-generators for creating bytecode or |
804 | compilable C code could use optimization work. |
805 | |
806 | =head2 Byteperl |
807 | |
808 | Figure out how and where byteperl will be built for the various |
809 | platforms. |
810 | |
811 | =head2 Precompiled modules |
812 | |
813 | Save byte-compiled modules on disk. |
814 | |
815 | =head2 Executables |
816 | |
817 | Auto-produce executable. |
818 | |
819 | =head2 Typed lexicals |
820 | |
821 | Typed lexicals should affect B::CC::load_pad. |
822 | |
823 | =head2 Win32 |
824 | |
825 | Workarounds to help Win32 dynamic loading. |
826 | |
e50bb9a1 |
827 | =head2 END blocks |
828 | |
7d30b5c4 |
829 | END blocks need saving in compiled output, now that CHECK blocks |
4f25aa18 |
830 | are available. |
e50bb9a1 |
831 | |
832 | =head2 _AUTOLOAD |
833 | |
834 | _AUTOLOAD prodding. |
835 | |
836 | =head2 comppadlist |
837 | |
838 | Fix comppadlist (names in comppad_name can have fake SvCUR |
839 | from where newASSIGNOP steals the field). |
840 | |
841 | =head2 Cached compilation |
842 | |
843 | Can we install modules as bytecode? |
844 | |
04c70446 |
845 | =head1 Recently Finished Tasks |
846 | |
2b92dfce |
847 | =head2 Figure a way out of $^(capital letter) |
848 | |
849 | Figure out a clean way to extend $^(capital letter) beyond |
850 | the 26 alphabets. (${^WORD} maybe?) |
851 | |
852 | Mark-Jason Dominus sent a patch which went into 5.005_56. |
853 | |
04c70446 |
854 | =head2 Filenames |
855 | |
856 | Make filenames in the distribution and in the standard module set |
857 | be 8.3 friendly where feasible. Good luck changing the standard |
858 | modules, though. B<Done>. |
859 | |
860 | =head2 Proper tied array support |
861 | |
862 | This was B<done> in 5.005 by Nick Ing-Simmons. |
863 | |
864 | =head2 Foreign lines |
865 | |
866 | Perl should be more generous in accepting foreign line terminations. |
867 | Mostly B<done> in 5.005. |
868 | |
869 | =head2 Namespace cleanup |
870 | |
871 | symbol-space: "pl_" prefix for all global vars |
872 | "Perl_" prefix for all functions |
873 | |
874 | CPP-space: stop malloc()/free() pollution unless asked |
875 | |
876 | =head2 Explain tool |
877 | |
878 | Given a piece of Perl code, say what it does. B::Deparse is doing |
879 | this. B<Done>. |
880 | |
881 | =head2 ISA.pm |
882 | |
883 | Rename and alter ISA.pm. B<Done>. It is now base.pm. |
884 | |
885 | =head2 Automate maintenance of most PERL_OBJECT code |
886 | |
887 | B<Done>, says Sarathy. |
888 | |
889 | =head2 -iprefix. |
890 | |
891 | Added in 5.004_70. B<Done> |
892 | |
893 | =head2 gettimeofday |
894 | |
895 | See Time::HiRes. |
896 | |
897 | =head2 reference to compiled regexp |
898 | |
899 | B<done> This is the qr// support in 5.005. |
900 | |
901 | =head2 eval qw() at compile time |
902 | |
903 | qw() is presently compiled as a call to split. This means the split |
904 | happens at runtime. Change this so qw() is compiled as a real list |
905 | assignment. This also avoids surprises like: |
906 | |
907 | $a = () = qw(What will $a hold?); |
908 | |
909 | B<Done>. Tom Hughes submitted a patch that went into 5.005_55. |
910 | |
911 | =head2 autocroak? |
912 | |
913 | B<Done>. This is the Fatal.pm module, so any builtin that that does |
914 | not return success automatically die()s. If you're feeling brave, tie |
915 | this in with the unified exceptions scheme. |
916 | |
917 | =head2 Status variable |
918 | |
919 | $^C to track compiler/checker status. B<Done> in 5.005_54. |
920 | |
e50bb9a1 |
921 | =cut |