From: Jarkko Hietaniemi Date: Sat, 11 Mar 2000 21:35:29 +0000 (+0000) Subject: todo and perldelta updates X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=55f6b6ec880398c33eff5567924a0cfeb5458e1d;p=p5sagit%2Fp5-mst-13.2.git todo and perldelta updates p4raw-id: //depot/cfgperl@5667 --- diff --git a/Todo b/Todo index c7ab6d0..3e7486b 100644 --- a/Todo +++ b/Todo @@ -8,10 +8,11 @@ Tie Modules ShiftSplice Defines shift et al in terms of splice method Would be nice to have - pack "(stuff)*", "(stuff)4", ... + pack "(stuff)*", "(stuff)?", "(stuff)+", "(stuff)4", ... contiguous bitfields in pack/unpack lexperl - bundled perl preprocessor + bundled perl preprocessor/macro facility + this would solve many of the syntactic nice-to-haves use posix calls internally where possible gettimeofday (possibly best left for a module?) format BOTTOM @@ -21,34 +22,26 @@ Would be nice to have support in perlmain to rerun debugger regression tests using __DIE__ hook lexically scoped functions: my sub foo { ... } - lvalue functions - wantlvalue? more generalized want()/caller()? + wantlvalue? more generalized want()/caller()? named prototypes: sub foo ($foo, @bar) { ... } ? regression/sanity tests for suidperl iterators/lazy evaluation/continuations/first/ first_defined/short-circuiting grep/?? This is a very thorny and hotly debated subject, tread carefully and do your homework first - full 64 bit support (i.e. "long long"). Things to consider: - how to store/retrieve 32+ integers into/from Perl scalars? - 32+ constants in Perl code? (non-portable!) - 32+ arguments/return values to/from system calls? (seek et al) - 32+ bit ops (&|^~, currently explicitly disabled) generalise Errno way of extracting cpp symbols and use that in - Errno and Fcntl (ExtUtils::CppSymbol?) + Errno, Fcntl, POSIX (ExtUtils::CppSymbol?) the _r-problem: for all the {set,get,end}*() system database calls (and a couple more: readdir, *rand*, crypt, *time, tmpnam) there are in many systems the _r versions to be used in re-entrant (=multithreaded) code Icky things: the _r API is not standardized and the _r-forms require per-thread data to store their state - memory profiler: turn malloc.c:Perl_dump_mstats() into + memory profiler: turn malloc.c:Perl_get_mstats() into an extension (Devel::MProf?) that would return the malloc stats in a nice Perl datastructure (also a simple interface to return just the grand total would be good) - Unicode: [=bar=], combining characters equivalence - (U+4001 + U+0308 should be equal to U+00C4, in other words - A+diaereres should equal Ä), Unicode collation + a pragma to make << and >> to shit bitvectors instead of numbers Possible pragmas debugger @@ -58,12 +51,12 @@ Optimizations constant function cache switch structures foreach(reverse...) - optimize away constant split at compile time (a la qw[f o o]) cache eval tree (unless lexical outer scope used (mark in &compiling?)) rcatmaybe shrink opcode tables via multiple implementations selected in peep cache hash value? (Not a win, according to Guido) optimize away @_ where possible + tail recursion removal "one pass" global destruction rewrite regexp parser for better integrated optimization LRU cache of regexp: foreach $pat (@pats) { foo() if /$pat/ } diff --git a/Todo-5.6 b/Todo-5.6 index 7f18377..b9f05fd 100644 --- a/Todo-5.6 +++ b/Todo-5.6 @@ -54,7 +54,12 @@ Configure 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. + 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? @@ -110,8 +115,10 @@ Miscellaneous 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(), - fp_setmask(), fp_getmask(), fp_setround(), fp_getround(), - ieeefp.h, fp_class.h. There are metaconfig units for all of these. + 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) @@ -120,7 +127,7 @@ Miscellaneous 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 units exist) + setitimer, getitimer? (the metaconfig units exist) Ongoing keep filenames 8.3 friendly, where feasible diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 2c4c9a7..e8db59e 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -649,9 +649,13 @@ of the traditional two-argument form. See L. NOTE: The Configure flags -Duselonglong and -Duse64bits have been deprecated. Use -Duse64bitint instead. -Any platform that has 64-bit integers either (a) natively as longs or -ints (b) via special compiler flags, or (c) using long long are able to -use "quads" (64-bit integers) as follows: +Any platform that has 64-bit integers either + + (1) natively as longs or ints + (2) via special compiler flags + (3) using long long or int64_t + +are able to use "quads" (64-bit integers) as follows: =over 4 @@ -697,15 +701,22 @@ and compile Perl using the -Duse64bitint Configure flag. There are actually two modes of 64-bitness: the first one is achieved using Configure -Duse64bitint and the second one using Configure -Duse64bitall. The difference is that the first one is minimal and -the second one maximal. The first one does only as much as is -required to get 64-bit integers into Perl (this may mean, for example, -using "long longs") while your memory may still be limited to 2 -gigabytes (because your pointers are still allowed to be 32-bit); the -second one goes all the way by attempting to switch also longs (and -pointers) to being 64-bit. This may create an even more binary -incompatible Perl than -Duse64bitint: the resulting executable may not -run at all in a 32-bit box, or you may have to reboot/reconfigure/rebuild -your operating system to be 64-bit aware. +the second one maximal. + +The C does only as much as is required to get 64-bit +integers into Perl (this may mean, for example, using "long longs") +while your memory may still be limited to 2 gigabytes (because your +pointers could still be 32-bit). Note that the name C<64bitint> does +not imply that your C compiler will be using 64-bit Cs (it might, +but it doesn't have to): the C means that you will be +able to have 64 bits wide scalar values. + +The C goes all the way by attempting to switch also +integers (if it can), longs (and pointers) to being 64-bit. This may +create an even more binary incompatible Perl than -Duse64bitint: the +resulting executable may not run at all in a 32-bit box, or you may +have to reboot/reconfigure/rebuild your operating system to be 64-bit +aware. Natively 64-bit systems like Alpha and Cray need neither -Duse64bitint nor -Duse64bitall. @@ -721,10 +732,15 @@ start losing precision (in their lower digits). If you have filesystems that support "large files" (files larger than 2 gigabytes), you may now also be able to create and access them from -Perl. You have to use Configure -Duselargefiles. Turning on the -large file support also turns on 64-bit support on many platforms. -Beware that unless your filesystem also supports "sparse files" seeking -to umpteen petabytes may be unadvisable. +Perl. NOTE: the default action is to use the large file support, if +available on the platform. + +If the large file support is on, and you have a Fcntl constant +O_LARGEFILE, the O_LARGEFILE is automatically added to the flags +of sysopen(). + +Beware: unless your filesystem also supports "sparse files" seeking to +umpteen petabytes may be unadvisable. Note that in addition to requiring a proper file system to do large files you may also need to adjust your per-process (or your @@ -1489,15 +1505,14 @@ variables. =item Fcntl More Fcntl constants added: F_SETLK64, F_SETLKW64, O_LARGEFILE for -large file (more than 4GB) access Note that the O_LARGEFILE is -automatically/transparently added to sysopen() flags if large file -support has been configured), Free/Net/OpenBSD locking behaviour flags -F_FLOCK, F_POSIX, Linux F_SHLCK, and O_ACCMODE: the combined mask of -O_RDONLY, O_WRONLY, and O_RDWR. The seek()/sysseek() constants -SEEK_SET, SEEK_CUR, and SEEK_END are available via the C<:seek> tag. -The chmod()/stat() S_IF* constants and S_IS* functions are available -via the C<:mode> tag. - +large file (more than 4GB) access (NOTE: the O_LARGEFILE is +automatically added to sysopen() flags if large file support has been +configured, as is the default), Free/Net/OpenBSD locking behaviour +flags F_FLOCK, F_POSIX, Linux F_SHLCK, and O_ACCMODE: the combined +mask of O_RDONLY, O_WRONLY, and O_RDWR. The seek()/sysseek() +constants SEEK_SET, SEEK_CUR, and SEEK_END are available via the +C<:seek> tag. The chmod()/stat() S_IF* constants and S_IS* functions +are available via the C<:mode> tag. =item File::Compare