| 1 | Unicode support |
| 2 | finish byte <-> utf8 and localencoding <-> utf8 conversions |
| 3 | make substr($bytestr,0,0,$charstr) do the right conversion |
| 4 | add Unicode::Map equivivalent to core |
| 5 | add support for I/O disciplines |
| 6 | - a way to specify disciplines when opening things: |
| 7 | open(F, "<:crlf :utf16", $file) |
| 8 | - a way to specify disciplines for an already opened handle: |
| 9 | binmode(STDIN, ":slurp :raw") |
| 10 | - a way to set default disciplines for all handle constructors: |
| 11 | use open IN => ":any", OUT => ":utf8", SYS => ":utf16" |
| 12 | eliminate need for "use utf8;" |
| 13 | autoload byte.pm when byte:: is seen by the parser |
| 14 | check uv_to_utf8() calls for buffer overflow |
| 15 | make \uXXXX (and \u{XXXX}?) where XXXX are hex digits |
| 16 | to work similarly to Unicode tech reports and Java |
| 17 | notation \uXXXX (and already existing \x{XXXX))? |
| 18 | more than four hexdigits? make also \U+XXXX work? |
| 19 | overloadable regex assertions? e.g. in Thai \b cannot |
| 20 | be deduced by any simple character class boundary rules, |
| 21 | word boundaries must algorithmically computed |
| 22 | |
| 23 | see ext/Encode/Todo for notes and references about proper detection |
| 24 | of malformed UTF-8 |
| 25 | |
| 26 | SCSU? http://www.unicode.org/unicode/reports/tr6/ |
| 27 | Collation? http://www.unicode.org/unicode/reports/tr10/ |
| 28 | Normalization? http://www.unicode.org/unicode/reports/tr15/ |
| 29 | EBCDIC? http://www.unicode.org/unicode/reports/tr16/ |
| 30 | Regexes? http://www.unicode.org/unicode/reports/tr18/ |
| 31 | Case Mappings? http://www.unicode.org/unicode/reports/tr21/ |
| 32 | |
| 33 | See also "Locales", "Regexen", and "Miscellaneous". |
| 34 | |
| 35 | Multi-threading |
| 36 | support "use Thread;" under useithreads |
| 37 | add mechanism to: |
| 38 | - create new interpreter in a different thread |
| 39 | - exchange data between interpreters/threads |
| 40 | - share namespaces between interpreters/threads |
| 41 | work out consistent semantics for exit/die in threads |
| 42 | support for externally created threads? |
| 43 | Thread::Pool? |
| 44 | |
| 45 | Compiler |
| 46 | auto-produce executable |
| 47 | typed lexicals should affect B::CC::load_pad |
| 48 | workarounds to help Win32 |
| 49 | END blocks need saving in compiled output |
| 50 | _AUTOLOAD prodding |
| 51 | fix comppadlist (names in comppad_name can have fake SvCUR |
| 52 | from where newASSIGNOP steals the field) |
| 53 | |
| 54 | Namespace cleanup |
| 55 | CPP-space: restrict what we export from headers when !PERL_CORE |
| 56 | header-space: move into CORE/perl/? |
| 57 | API-space: complete the list of things that constitute public api |
| 58 | |
| 59 | Configure |
| 60 | make configuring+building away from source directory work (VPATH et al) |
| 61 | this is related to: cross-compilation configuring (see Todo) |
| 62 | _r support (see Todo for mode detailed description) |
| 63 | POSIX 1003.1 1996 Edition support--realtime stuff: |
| 64 | POSIX semaphores, message queues, shared memory, realtime clocks, |
| 65 | timers, signals (the metaconfig units mostly already exist for these) |
| 66 | PREFERABLY AS AN EXTENSION |
| 67 | UNIX98 support: reader-writer locks, realtime/asynchronous IO |
| 68 | PREFERABLY AS AN EXTENSION |
| 69 | IPv6 support: see RFC2292, RFC2553 |
| 70 | PREFERABLY AS AN EXTENSION |
| 71 | there already is Socket6 in CPAN |
| 72 | |
| 73 | Long doubles |
| 74 | figure out where the PV->NV->PV conversion gets it wrong at least |
| 75 | in AIX and Tru64 (V5.0 and onwards) when using long doubles: see the |
| 76 | regexp tricks we had to insert to t/comp/use.t and t/lib/bigfltpm.t, |
| 77 | (?:9|8999\d+) and the like. |
| 78 | |
| 79 | 64-bit support |
| 80 | Configure probe for quad_t, uquad_t, and (argh) u_quad_t, they might |
| 81 | be in some systems the only thing working as quadtype and uquadtype. |
| 82 | more pain: long_long, u_long_long. |
| 83 | |
| 84 | Locales |
| 85 | deprecate traditional/legacy locales? |
| 86 | How do locales work across packages? |
| 87 | figure out how to support Unicode locales |
| 88 | suggestion: integrate the IBM Classes for Unicode (ICU) |
| 89 | http://oss.software.ibm.com/developerworks/opensource/icu/project/ |
| 90 | ICU is "portable, open-source Unicode library with: |
| 91 | charset-independent locales (with multiple locales |
| 92 | simultaneously supported in same thread; character |
| 93 | conversions; formatting/parsing for numbers, currencies, |
| 94 | date/time and messages; message catalogs (resources); |
| 95 | transliteration, collation, normalization, and text |
| 96 | boundaries (grapheme, word, line-break))". |
| 97 | Check out also the Locale Converter: |
| 98 | http://alphaworks.ibm.com/tech/localeconverter |
| 99 | There is also the iconv interface, either from XPG4 or GNU (glibc). |
| 100 | iconv is about character set conversions. |
| 101 | Either ICU or iconv would be valuable to get integrated |
| 102 | into Perl, Configure already probes for libiconv and <iconv.h>. |
| 103 | |
| 104 | Regexen |
| 105 | make RE engine thread-safe |
| 106 | a way to do full character set arithmetics: now one can do |
| 107 | addition, negate a whole class, and negate certain subclasses |
| 108 | (e.g. \D, [:^digit:]), but a more generic way to add/subtract/ |
| 109 | intersect characters/classes, like described in the Unicode technical |
| 110 | report on Regular Expression Guidelines, |
| 111 | http://www.unicode.org/unicode/reports/tr18/ |
| 112 | (amusingly, the TR notes that difference and intersection |
| 113 | can be done using "Perl-style look-ahead") |
| 114 | difference syntax? maybe [[:alpha:][^abc]] meaning |
| 115 | "all alphabetic expect a, b, and c"? or [[:alpha:]-[abc]]? |
| 116 | (maybe bad, as we explicitly disallow such 'ranges') |
| 117 | intersection syntax? maybe [[..]&[...]]? |
| 118 | POSIX [=bar=] and [.zap.] would nice too but there's no API for them |
| 119 | =bar= could be done with Unicode, though, see the Unicode TR #15 about |
| 120 | normalization forms: |
| 121 | http://www.unicode.org/unicode/reports/tr15/ |
| 122 | this is also a part of the Unicode 3.0: |
| 123 | http://www.unicode.org/unicode/uni2book/u2.html |
| 124 | executive summary: there are several different levels of 'equivalence' |
| 125 | trie optimization: factor out common suffixes (and prefixes?) |
| 126 | from |-alternating groups (both for exact strings and character |
| 127 | classes, use lookaheads?) |
| 128 | approximate matching |
| 129 | |
| 130 | Security |
| 131 | use fchown, fchmod (and futimes?) internally when possible |
| 132 | use fchdir(how portable?) |
| 133 | create secure reliable portable temporary file modules |
| 134 | audit the standard utilities for security problems and fix them |
| 135 | |
| 136 | Reliable Signals |
| 137 | custom opcodes |
| 138 | alternate runops() for signal despatch |
| 139 | figure out how to die() in delayed sighandler |
| 140 | make Thread::Signal work under useithreads |
| 141 | |
| 142 | Win32 stuff |
| 143 | sort out the spawnvp() mess for system('a','b','c') compatibility |
| 144 | work out DLL versioning |
| 145 | |
| 146 | Miscellaneous |
| 147 | introduce @( and @) because group names can have spaces |
| 148 | add new modules (Archive::Tar, Compress::Zlib, CPAN::FTP?) |
| 149 | sub-second sleep()? alarm()? time()? (integrate Time::HiRes? |
| 150 | Configure doesn't yet probe for usleep/nanosleep/ualarm but |
| 151 | the units exist) |
| 152 | floating point handling: nans, infinities, fp exception masks, etc. |
| 153 | At least the following interfaces exist: fp_classify(), fp_class(), |
| 154 | class(), isinf(), isfinite(), finite(), isnormal(), unordered(), |
| 155 | <ieeefp.h>, <fp_class.h> (there are metaconfig units for all these), |
| 156 | fp_setmask(), fp_getmask(), fp_setround(), fp_getround() |
| 157 | (no metaconfig units yet for these). |
| 158 | Don't forget finitel(), fp_classl(), fp_class_l(), (yes, both do, |
| 159 | unfortunately, exist), and unorderedl(). |
| 160 | PREFERABLY AS AN EXTENSION. |
| 161 | As of 5.6.1 there is cpp macro Perl_isnan(). |
| 162 | fix the basic arithmetics (+ - * / %) to preserve IVness/UVness if |
| 163 | both arguments are IVs/UVs: it sucks that one cannot see |
| 164 | the 'carry flag' (or equivalent) of the CPU from C, |
| 165 | C is too high-level... |
| 166 | replace pod2html with new PodtoHtml? (requires other modules from CPAN) |
| 167 | automate testing with large parts of CPAN |
| 168 | turn Cwd into an XS module? (Configure already probes for getcwd()) |
| 169 | mmap for speeding up input? (Configure already probes for the mmap family) |
| 170 | sendmsg, recvmsg? (Configure doesn't probe for these but the units exist) |
| 171 | setitimer, getitimer? (the metaconfig units exist) |
| 172 | |
| 173 | Ongoing |
| 174 | keep filenames 8.3 friendly, where feasible |
| 175 | upgrade to newer versions of all independently maintained modules |
| 176 | comprehensive perldelta.pod |
| 177 | |
| 178 | Documentation |
| 179 | describe new age patterns |
| 180 | update perl{guts,call,embed,xs} with additions, changes to API |
| 181 | convert more examples to use autovivified filehandles |
| 182 | document Win32 choices |
| 183 | spot-check all new modules for completeness |
| 184 | better docs for pack()/unpack() |
| 185 | reorg tutorials vs. reference sections |
| 186 | make roffitall to be dynamical about its pods and libs |
| 187 | |