todo and perldelta updates
authorJarkko Hietaniemi <jhi@iki.fi>
Sat, 11 Mar 2000 21:35:29 +0000 (21:35 +0000)
committerJarkko Hietaniemi <jhi@iki.fi>
Sat, 11 Mar 2000 21:35:29 +0000 (21:35 +0000)
p4raw-id: //depot/cfgperl@5667

Todo
Todo-5.6
pod/perldelta.pod

diff --git a/Todo b/Todo
index c7ab6d0..3e7486b 100644 (file)
--- 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/ }
index 7f18377..b9f05fd 100644 (file)
--- 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
index 2c4c9a7..e8db59e 100644 (file)
@@ -649,9 +649,13 @@ of the traditional two-argument form.  See L<perlfunc/open>.
     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<use64bitint> 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 C<int>s (it might,
+but it doesn't have to): the C<use64bitint> means that you will be
+able to have 64 bits wide scalar values.
+
+The C<use64bitall> 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