(-) always use my getopt.c

(-) get Extensions/X11/Doc checked in and out

(-) investigate PPRC <URL:ftp://ftp.parc.xerox.com/pub/ppcr/>

(*) add buffering parameter to fdopen() and popen()

(-) "f()=0" generates syntax error msg without line number

(-) interface to getdtablesize() in posix

(-) reentrancy with global variables vs. decref in
./Modules/cdmodule.c ./Modules/flmodule.c ./Objects/accessobject.c
./Objects/frameobject.c ./Python/traceback.c

(-) check reentrancy in list updates?

(-) speed up regsub.gsub

(*) change md5.md5() to md5.new()

(-) try posixenviron.c and merge back into posixmodule.c?

(*) document chown()

(-) add and document chroot() ?

(*) use add gethostname_r and release thread lock when it exists

(-) Add `@CFLAGS@', `@CPPFLAGS@', and `@LDFLAGS@' to `Makefile.in'

(-) modules should be able to define a module destructor hook

(-) destroy modules in reverse order of importation?

(-) make array a standard built-in object

(-) makesetup should accept .o files without corresponding .c file

(*) use autoconf 2.0

======================================================================
Release 1.1.1 (10 Nov 1994)
======================================================================

(-) try Boehm/Dehmers/Weiser conservative garbage collector

(*) implement new 'flatten' module

(-) document new Python/C API

(*) __import__, module imp

(-) add various things to module dictionary, e.g. pathname, dictionary
where found, __version__ string?

(-) pass dict of builtins to exec / execfile / eval ???

(?) stack frame correspondence problem (Jim Roskind)
(probably solved by err_fetch / err_restore)

(-) make lots of places use newgetargs

(*) no tp_str member in typeobject

(-) readline 2.0 on sequent has ^C problem (works only first time)

(*) add explanatory comments to Setup (especially about SGI modules
like 'cd')

(-) need to add truncate() and ftruncate() to posixmodule.c (Windows:
chsize(fd, size) (solution: added to file objects instead)

======================================================================
Release 1.1 (11 Oct 1994)
======================================================================

(-) improve performance of list.append/insert etc. by keeping high/low
watermark instead of realloc'ing each time?

(-) findmethod should cache (also findmember?)

(-) sysget("check_interval") is called before each method call which
breaks dictlookup caching

(*) core dump on import of ridiculously long module name

(-) core dump on repr / print of deeply nested or recursive object

(*) parsing from string should calculate line numbers

(-) whrandom doc needs update

(*) mpz power is still binary insterad of ternary

(*) design interface to call arbitrary asynchronous routines

(*) whrandom.set...(0,0,0) doesn't generate random numbers

(*) Lance's latest curses additions

(*) Jack's new code:
	(*) new xxmodule.c
	(*) mac has type for .pyc files
	(*) should run .pyc files when passed as command line argument

(*) all new all singing all dancing freeze script

(*) make clean should remove *.so and not Makefile.pre

(-) fix signalmodule.c to re-establish SIGC[H]LD handler

(*) try out Kees Blom's railroad diagram generator

(-) redesign error handling (cf. Donald's mail)

(*) do MPW and THINK still not support sys_errlist?  Indeed not (neither).

(-) does MPW 3.2 need the MPW_881_BUG defined in Parser/acceler.c

(-) rename MPW_3_1 define (which really means 3.x)

(*) incorporate urlparse.py, uu.py

(*) rewrite instance __getattr__ etc. to store ptr in class instead of
instance -- also have separate __delattr__

(-) add warning to docs about sys.exc_traceback and sys.last_traceback.

(-) Some stdwin wishes:

    (-) stdwinmodule should keep track of textedit rec's per window
	(in a chain) so it can unlink them when the window is closed
	before the te rec

    (-) textedit flashes at return or backspace

    (-) there's no way to show the text caret after a multi-line paste?

(*) termios module

(*) put signal patches out separately

(-) latex docs for signal module

(*) More MPW and Mac changes

(*) Sjoerd's compileall script

(-) systematically create /usr/local/lib/python/<machine>-<os>/
    subdirectories, with a lib/ subdirectory containing the lib*.a
    files etc.

(-) need newer DOS binary (16 bit version doesn't do default args)

(*) support for dynamically loadable libraries in makesetup and Extensions.
    e.g. add a make rule to build .so files (unfortunately need to figure
    out what ld option is needed) (more appropriate for makesetup
    script?)

(*) Move tkinter into the standard Modules directory; Tkinter c.s. to
    Lib/tkinter etc. (???)

(-) document Tk

(-) class browser

(-) interactive Python GUI (a la NT thingie)

(*) speedup finddfa (and classify?)

(-) more stuff under CVS (demo, extensions)

(*) Mac port of 1.1

(*) Mac port of STDWIN 0.9.9 to THINK C 6.0

(-) use const for char * parameters (and many more) where possible

(-) The Great Renaming!

(*) redo __xxx__ operators for class instances

(-) document __getattr__, __setattr__

(*) add __delattr__ to class instances

(-) many things that take strings should also take arrays of chars

(-) add list of existing extensions to FAQ

(-) update "recent additions" chapter in tutorial

(-) rewrite "output formatting" chapter in tutorial

(*) pass OPT from environment via configure to Makefile

(*) version.c should be recompiled for each link

(*) stropmodule should export find/rfind instead of index/rindex

(*) add __getattr__, __setattr__ to class instances

(*) fix pow(x, y, z) for integers

(*) add tuple(seq) to turn any sequence into a tuple

(*) Win32s for PC

(*) integrate NT changes

(*) write a script and add a "Make" rule (perhaps) that changes
    #!/usr/local/bin/python to something else in all scripts around.

(*) int*int overflow check shouldn't doubles on alpha (cf. John Tromp's mail)

(*) add signal.alarm()

(*) when abort()ing because of unexpected exception, print a message
    first (Jack)

----------------------------------------------------------------------
(from BUGS1.0.1)
----------------------------------------------------------------------
(-) document addpack, urllib, ...

(*) import.c from JaapV

(*) document os.exec*

(*) name sunaudiodevmodule.c is too long

(*) play with / include SUIT interface

(-) make regsub.[g]sub() optionally case insensitive

======================================================================

(*) ought to use features from autoconf 1.8

(*) errors in __repr__() are handled wrong when called from format

(*) long(0x80000000) has wrong value!

(-) hex(0x80000000) shouldn't have sign (?)

(*) need way to set buffering at file open time

(*) need way to force stdout unbuffered

(*) restart CVS tree

(?) build shared libs for SunOS 4.1.3

(-) dynamic linking on the Mac (is this a dream?)

(*) X patches from Adrian Phillips

(*) Jaap's freeze script

(-) Incorporate with contrib status:
    - additions to glmodule by rg3h
    (*) Jaap's posixfile module (with locking)
    (*) pthreads interface

(-) Later:
    - put the offending object in IOError and posix.error
    - make module marshal work with user-defined file-like objects
    - built-in help?
    - hierarchical module names?

Big plans:

- allow separate interpreters (a la Xt's Applocation Contexts, and Tcl)
- great renaming
- complete reflexive nature of the language, e.g. have interfaces et
create any kind of object
(*) GUI interface a la Tk


======================================================================
For FAQ:

(*) why don't strings (numbers, tuples, ...) have methods / attributes

(*) why are strings / numbers / tuples immutable

why don't list methods return self

======================================================================
PM/TODO list after Egypt (from mailing list):

make .pyc files executable (how?)

thread status and improvements (lock stmt; signal/wait)

optional optimizations

pthread migration

(*) test/incorporate new SUIT

shorten excessively long filenames (sunaudiodevmodule.c)

(*) default parameter values

multiple interpreter objects

(*) import shlib bug (irix5.2) (reload, dlclose)

(*) addpack.py

(*) newmodule.c (or other hacks to create new modules, classes, functions
    etc. from their components)

persistency

new Dbhash.py, dbhash library

(-) reraise; or raise 3rd param for traceback?
    -or- except type, value, tbackobjec

(-) redesign exceptions from scratch?

(-) dbm objects miss items(), values() methods

(*) jar's new profile

(-) answer q about coerce()

(*) reconsider pass [expression] ??? -or- don't print non-interactive
    exprs -or- option to suppress printing non-None expressions

(*) should be able to hash code objs (add fns to convert between lists/tuples)

(-) describe() ?

(-) distribute demo2 with Holmes

(*) re-reply on try-continue

(-) classes are too slow

(-) add += etc. ?

optimize tuple = tuple

allow (a, b) = [1, 2] and [1, 2] = (1, 2) ???

wustl is not un the northwest of the US?

(*) MPW doesn't like \000 in string literals?

MPW patches, unixemu patches

prepare tar files with
	- mac think projects (*)
	- mpw makefiles
	- dos makefiles
	- mac unixemu lib

explain rules about == vs. 'is' for strings (* by others on the list)

(*) bug in ceval.c DELETE_FAST

(*) possible optimize LOAD_NAME -> LOAD_GLOBAL

get dos python with suit (inesc)

(*) docs for try/continue are wrong and unclear

better hashing fn?

(*) add improved nested indent to python-mode.el

(*) add a section to tutorial on "new" features

rewrite section on formatting in tutorial

======================================================================
TODO-TOO list:

test for overflow when converting python long to float

lift restrictions on tuple or list in many cases

(*) allow long ints with sensible values for getargs "i"

(*) multiline string literals

what to do about 64-bit int literals (on 64-bit machines) in .pyc
files?  (Currently truncated w/o warning!)

DOCUMENTATION UPDATE!  E.g. ref.tex doesn't describe:
(*)	- line joins w/o backslash
(*)	- double-quoted strings; \" in strings
	- more?
Should double-check all changes with docs!

(?) Interrupting output still sometimes doesn't call clearerr() properly

sometimes ghost errors when interrupting during debugging in
'continue' mode?

typing a comment to a primary prompt shouldn't issue a secondary prompt

readline: add hooks to recognize Python syntax and to expand Python
commands and names

should have absolute pathnames in function objects

in general check that all the exceptions are modernized and that the
messages aren't giving the same error twice (e.g., stdwinmodule.c!)

- check read/write allowed for file objects

- introduce macros to set/inspect errno for syscalls, to support things
  like getoserr()

======================================================================
DOS/Windows Python

(???) command line options?

(*) os.system()

(???) interrupts

(???) wrap

(*) pc module

(*) dospath.py

DOS/Windows Python -- TO DO

(*) memtest from config.h

(*) copy sources back

(*) build DOS version

(*) distribute 386 version

(*) Mac 1.0.1 release?
======================================================================
