Changes in 2.2b1 since 2.1.1
----------------------------

These release notes refer to Mac-specific changes only. See NEWS (in the Misc folder)
for machine-independent changes. Changes that were already in 2.2a3 are flagged as such.


- The main change is that all toolbox modules have moved to a package called Carbon.
  So things like "import Res" should be changed to "from Carbon import Res", and
  "from Res import *" to "from Carbon.Res import *". Please see the readme file for
  some open questions and join the discussions on pythonmac-sig if you have anything
  to contribute. Aside from reducing clutter this change will also benefit the
  port to Mach-O/OSX Python later. [2.2a3]
- On input MacPython now accepts either \n (unix style) or \r (mac style) newlines
  for text files. This behaviour can be turned off with a preference.
  This is an experimental feature; again: feedback is requested. [2.2a3]
- There is a new module macresource which makes it easier to open a resource file
  accompanying your script when the script is not (yet) converted to an applet.
  This module will later also do the right thing in Mach-O/OSX Python. [2.2a3]
- Threads had a stack that was too small for many serious Python applications (20K).
  They now get 64K. There is still no overflow check, though. [2.2a3]
- Garbage collection and the gc module have (finally) been enabled. [2.2a3]
- EasyDialogs.ProgressBar now has indeterminate progressbars if you specify maxval=0.
  This is also the new default. Patch supplied by Dean Draayer. [2.2a3]
- There are new preferences for enabling old-style division warnings and for
  accepting unix-style newlines in text input files. These can also be set during
  startup, and in addition you can select very verbose import tracing. [2.2a3]
- Various outdated scripts have been moved to :Mac:Unsupported. [2.2a3]
- Various outdated items from :Mac:Lib:test have been removed. [2.2a3]
- C Developers: you know have control over the Python console if you are embedding
  MacPython in another application, thanks to Alexandre Parenteau. :Mac:Demo:embed.html
  has very minimal documentation.
- BuildCGIApplet works again.
- The CodeWarrior OSA suite missed quit(). It is back.
- Contrib:morefindertools is gone, the functionality has been integrated into
  the standard module findertools.py.

What is not in this distribution
--------------------------------

- Stackless Python/microthreads hasn't been ported to 2.2 yet. If/when it becomes available
  Just will undoubtedly announce it on pythonmac-sig and the MacPython homepage.
- The toolbox modules have not been updated to Universal Header 3.4 or CarbonLib 1.4 yet.

Known problems
--------------

This list is probably incomplete, more problems may be listed on the MacPython homepage,
http://www.cwi.nl/~jack/macpython.html.

- MacPython 2.2a3 (and MacPython 2.1) will not run correctly on a multiprocessor MacOS X
  machine, it will quickly deadlock during I/O operations. The GUSI I/O library is suspected,
  hints/clues/workarounds are solicited.
- Tkinter does not work under Carbon.
- The IDE and Tkinter do not work together. Run tkinter programs under PythonInterpreter.
- Tkinter file events do not work, unless you have opened the file through Tcl (but then
  you cannot access it from Python).
- Aliases may not work in sys.path entries.
- Under Carbon on OS9 only you may occasionally see a spurious KeyboardInterrupt. I have absolutely
  no clue as to what is causing this.
- PythonInterpreter used interactively will eat a lot of processor cycles. You should use
  PythonIDE for interactive work and PythonInterpreter for scripts only. This is especially
  true under OSX.
- AliasMenu 2.2 conflicts with the Carbon version of Python. This is most likely a problem
  with AliasMenu (which is from 1999, and thus predates Carbon altogether).
