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