157 lines
6.8 KiB
Groff
157 lines
6.8 KiB
Groff
|
Unicode support
|
||
|
finish byte <-> utf8 and localencoding <-> utf8 conversions
|
||
|
make substr($bytestr,0,0,$charstr) do the right conversion
|
||
|
add Unicode::Map equivivalent to core
|
||
|
add support for I/O disciplines
|
||
|
- a way to specify disciplines when opening things:
|
||
|
open(F, "<:crlf :utf16", $file)
|
||
|
- a way to specify disciplines for an already opened handle:
|
||
|
binmode(STDIN, ":slurp :raw")
|
||
|
- a way to set default disciplines for all handle constructors:
|
||
|
use open IN => ":any", OUT => ":utf8", SYS => ":utf16"
|
||
|
eliminate need for "use utf8;"
|
||
|
autoload byte.pm when byte:: is seen by the parser
|
||
|
check uv_to_utf8() calls for buffer overflow
|
||
|
(see also "Locales", "Regexen", and "Miscellaneous")
|
||
|
|
||
|
Multi-threading
|
||
|
support "use Thread;" under useithreads
|
||
|
add mechanism to:
|
||
|
- create new interpreter in a different thread
|
||
|
- exchange data between interpreters/threads
|
||
|
- share namespaces between interpreters/threads
|
||
|
work out consistent semantics for exit/die in threads
|
||
|
support for externally created threads?
|
||
|
Thread::Pool?
|
||
|
|
||
|
Compiler
|
||
|
auto-produce executable
|
||
|
typed lexicals should affect B::CC::load_pad
|
||
|
workarounds to help Win32
|
||
|
END blocks need saving in compiled output
|
||
|
_AUTOLOAD prodding
|
||
|
fix comppadlist (names in comppad_name can have fake SvCUR
|
||
|
from where newASSIGNOP steals the field)
|
||
|
|
||
|
Namespace cleanup
|
||
|
CPP-space: restrict what we export from headers when !PERL_CORE
|
||
|
header-space: move into CORE/perl/?
|
||
|
API-space: complete the list of things that constitute public api
|
||
|
|
||
|
Configure
|
||
|
fix the vicious cyclic multidependency of cc <-> libpth <-> loclibpth
|
||
|
libswanted <-> usethreads <-> use64bitint <-> use64bitall <->
|
||
|
uselargefiles <-> ...
|
||
|
make configuring+building away from source directory work (VPATH et al)
|
||
|
this is related to: cross-compilation configuring (see Todo)
|
||
|
_r support (see Todo for mode detailed description)
|
||
|
POSIX 1003.1 1996 Edition support--realtime stuff:
|
||
|
POSIX semaphores, message queues, shared memory, realtime clocks,
|
||
|
timers, signals (the metaconfig units mostly already exist for these)
|
||
|
UNIX98 support: reader-writer locks, realtime/asynchronous IO
|
||
|
IPv6 support: see RFC2292, RFC2553
|
||
|
|
||
|
Long doubles
|
||
|
figure out where the PV->NV->PV conversion gets it wrong at least
|
||
|
in AIX and Tru64 (V5.0 and onwards) when using long doubles: see the
|
||
|
regexp tricks we had to insert to t/comp/use.t and t/lib/bigfltpm.t,
|
||
|
(?:9|8999\d+) and the like.
|
||
|
|
||
|
64-bit support
|
||
|
Configure probe for quad_t, uquad_t, and (argh) u_quad_t, they might
|
||
|
be in some systems the only thing working as quadtype and uquadtype.
|
||
|
|
||
|
Locales
|
||
|
deprecate traditional/legacy locales?
|
||
|
How do locales work across packages?
|
||
|
figure out how to support Unicode locales
|
||
|
suggestion: integrate the IBM Classes for Unicode (ICU)
|
||
|
http://oss.software.ibm.com/developerworks/opensource/icu/project/
|
||
|
and check out also the Locale Converter:
|
||
|
http://alphaworks.ibm.com/tech/localeconverter
|
||
|
ICU is "portable, open-source Unicode library with:
|
||
|
charset-independent locales (with multiple locales simultaneously
|
||
|
supported in same thread; character conversions; formatting/parsing
|
||
|
for numbers, currencies, date/time and messages; message catalogs
|
||
|
(resources) ; transliteration, collation, normalization, and text
|
||
|
boundaries (grapheme, word, line-break))".
|
||
|
There is also 'iconv', either from XPG4 or GNU (glibc).
|
||
|
iconv is about character set conversions.
|
||
|
Either ICU or iconv would be valuable to get integrated
|
||
|
into Perl, Configure already probes for libiconv and <iconv.h>.
|
||
|
|
||
|
Regexen
|
||
|
make RE engine thread-safe
|
||
|
a way to do full character set arithmetics: now one can do
|
||
|
addition, negate a whole class, and negate certain subclasses
|
||
|
(e.g. \D, [:^digit:]), but a more generic way to add/subtract/
|
||
|
intersect characters/classes, like described in the Unicode technical
|
||
|
report on Regular Expression Guidelines,
|
||
|
http://www.unicode.org/unicode/reports/tr18/
|
||
|
(amusingly, the TR notes that difference and intersection
|
||
|
can be done using "Perl-style look-ahead")
|
||
|
difference syntax? maybe [[:alpha:][^abc]] meaning
|
||
|
"all alphabetic expect a, b, and c"? or [[:alpha:]-[abc]]?
|
||
|
(maybe bad, as we explicitly disallow such 'ranges')
|
||
|
intersection syntax? maybe [[..]&[...]]?
|
||
|
POSIX [=bar=] and [.zap.] would nice too but there's no API for them
|
||
|
=bar= could be done with Unicode, though, see the Unicode TR #15 about
|
||
|
normalization forms:
|
||
|
http://www.unicode.org/unicode/reports/tr15/
|
||
|
this is also a part of the Unicode 3.0:
|
||
|
http://www.unicode.org/unicode/uni2book/u2.html
|
||
|
executive summary: there are several different levels of 'equivalence'
|
||
|
approximate matching
|
||
|
|
||
|
Security
|
||
|
use fchown, fchmod (and futimes?) internally when possible
|
||
|
use fchdir(how portable?)
|
||
|
create secure reliable portable temporary file modules
|
||
|
audit the standard utilities for security problems and fix them
|
||
|
|
||
|
Reliable Signals
|
||
|
custom opcodes
|
||
|
alternate runops() for signal despatch
|
||
|
figure out how to die() in delayed sighandler
|
||
|
make Thread::Signal work under useithreads
|
||
|
|
||
|
Win32 stuff
|
||
|
sort out the spawnvp() mess for system('a','b','c') compatibility
|
||
|
work out DLL versioning
|
||
|
|
||
|
Miscellaneous
|
||
|
add new modules (Archive::Tar, Compress::Zlib, CPAN::FTP?)
|
||
|
sub-second sleep()? alarm()? time()? (integrate Time::HiRes?
|
||
|
Configure doesn't yet probe for usleep/nanosleep/ualarm but
|
||
|
the units exist)
|
||
|
floating point handling: nans, infinities, fp exception masks, etc.
|
||
|
at least the following interfaces exist: fp_classify(), fp_class(),
|
||
|
class(), isnan(), isinf(), isfinite(), finite(), isnormal(),
|
||
|
ordered(), fp_setmask(), fp_getmask(), fp_setround(), fp_getround(),
|
||
|
ieeefp.h, fp_class.h. There are metaconfig units for most of these.
|
||
|
Search for ifdef __osf__ in pp.c to find a temporary fix that
|
||
|
needs to be done right.
|
||
|
fix the basic arithmetics (+ - * / %) to preserve IVness/UVness if
|
||
|
both arguments are IVs/UVs
|
||
|
replace pod2html with new PodtoHtml? (requires other modules from CPAN)
|
||
|
automate testing with large parts of CPAN
|
||
|
Unicode collation? http://www.unicode.org/unicode/reports/tr10/
|
||
|
turn Cwd into an XS module? (Configure already probes for getcwd())
|
||
|
mmap for speeding up input? (Configure already probes for the mmap family)
|
||
|
sendmsg, recvmsg? (Configure doesn't probe for these but the units exist)
|
||
|
setitimer, getitimer? (the metaconfig units exist)
|
||
|
|
||
|
Ongoing
|
||
|
keep filenames 8.3 friendly, where feasible
|
||
|
upgrade to newer versions of all independently maintained modules
|
||
|
comprehensive perldelta.pod
|
||
|
|
||
|
Documentation
|
||
|
describe new age patterns
|
||
|
update perl{guts,call,embed,xs} with additions, changes to API
|
||
|
convert more examples to use autovivified filehandles
|
||
|
document Win32 choices
|
||
|
spot-check all new modules for completeness
|
||
|
better docs for pack()/unpack()
|
||
|
reorg tutorials vs. reference sections
|