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