PowerMops version 6.1
Author: Michael R. Hore
Download URL: http://sourceforge.net/projects/powermops/
License: Freeware
Short Description:
PowerMops is an Object Oriented Programming Programming language and
Integrated Development Environment (IDE).
Full Description:
PowerMops is a full featured, stand-alone development
environment for programming the Macintosh. Inspired by Smalltalk and
Neon, PowerMops is based on Forth with extensive object-oriented
features such as multiple inheritance, early and late binding,
persistent objects, and garbage collection. Its interactive
development environment provides for fluid and productive programming
by allowing quick testing and modification of large or small code
segments.
PowerMops comes with an extensive class library supporting many
Smalltalk-like classes such as containers and all of the normal Mac
graphical user interface elements. There is seamless integration of
Macintosh Toolbox calls. AltiVec and OpenGL are supported, as are
direct calls to Cocoa and Objective-C routines. Support for
Navigation Manager and NIB-based Carbon API constructs are supported.
A well written manual and Wiki-based information are available
online. The Mach-O executable format is supported as is 64-bit
arithmetic
for the G5 processor.
PowerMops is Carbon-compliant and runs in PPC native mode under
OS 9.x and all OS X versions released to date, including Tiger. It is
a subroutine threaded, optimizing Forth compiler resulting in programs
that run very fast. There is also a 680X0 compatible version
available, called Mops, that runs on any 680X0 Macintosh.
New for This Version:
*** New demo code, doing fractals.
*** An enhanced ordered collection class, Ordered-Col+.
*** The ANSI file for ANSI Forth compatibility has been considerably
improved and enhanced, especially to include the FLOATING and FLOATING-
EXT
word sets.
*** The low-level character-oriented operations MOVE, ALIGNED_MOVE,
ERASE and FILL are now better optimized for faster performance.
*** As EXECUTE is necessarily rather slow (there are a lot of
different
possibilities to check for), we now have a much faster version
FAST-EXEC which can be used for simple ANSI-type words with no
locals, and not involving any methods or module calls.
*** Increasingly Mac text files are using newline (aka linefeed, hex
A)
as a line delimiter rather than the older Mac standard of using
carriage
return (hex D), since hex A is the Unix standard. With this version,
PowerMops source files can use either of these line delimiters, and
even mix them in the one file. The File methods readLine: and accept:
now recognize either as a line delimiter.
*** We now have a shortcut syntax for repeated messages -- where the
same message is being sent to multiple objects. This is easily
demonstrated with an example. Instead of
aMessage: obj1
aMessage: obj2
aMessage: obj3
you can now write
aMessage: { obj1 obj2 obj3 }
*** Some objects have xt's of other words stored in them, so some
object-specific
behavior can be coded. With this version, we have a way of allowing
the
ivars of the object to be easily accessible from such words, without
having
to use ^BASE and add particular offsets, which is a good way to
introduce
bugs.
The usage is :
:modifs_in AClass
: def1 .... ;
: def2 .... ;
....
;end_modifs
def1, def2 ... can contain messages to ivars of AClass.
Such words must be called from within a method of AClass (otherwise
the
base address of the object won't be in the register where it's
expected,
and you'll crash).
*** A small optimization - if >R ... >R occur sufficiently near each
other,
the value is kept in a register and not pushed to memory.
*** Quick Edit, the integrated multi-window source code editor has had
some
useful improvements and new features. There is now a Jef Raskin style
incremental search, improved handling of different files with the same
name,
and a "write-protect" scheme. As always, QuickEdit is written in
Forth with
the full source code freely available to registered owners of Carbon
MacForth.
BUGS FIXED:
*** ?DO ... +LOOP could produce an infinite loop in certain very
specific
situations.
*** IF over r> * >r THEN triggered a subtle code generation bug.
*** A very minor glitch in the disassembly of definition headers in 64-
bit mode.
*** CFM Install dialog had an unneeded item (only needed for Mach-O)
*** An obscure bug that caused a compilation failure in sequences such
as
= dup >r
= dup dup dup dup if then
*** Class MLTEView had a bug in the method setStringFromRange: -- if
the text is empty, a legal PowerMops null hndle NilH should be
returned.
** constants with more than 16 significant bits could be wrongly
compiled
in some specific circumstances.
*** In class String, method bring: should at the beginning send a
reset:
message to the passed-in object.
*** Using a static ivar name in isolation (equivalent to sending the
addr: message )wasn't being handled, since this case simply hadn't
been coded.
*** Compiling @[EMAIL PROTECTED]
follwing a method call could sometimes fail due to a
code
generator bug that was triggered in this specific situation.
*** Using the "cascaded messages" feature could fail if the method was
defined inline.
*** There was a subtle bug involving sending a messages to a reference
which is an ivar, when the reference is declared with no_subclasses.
*** Another subtle bug involving references could show in code like:
-> myRef
method: someObject
Here you could get a spurious compilation error or maybe a runtime
crash,
since the compilation of the store to the reference was leaving an
internal flag set wrongly.
*** In 64-bit mode, code such as
$ -4000000 or
wasn't correctly compiled.
*** LEADING_ZEROS had a bug in which it gave a compilation failure
when
it followed a constant.
*** If the 64-bit words z@[EMAIL PROTECTED]
and related words were used in 32-bit mode,
there was no compilation error, but there was a runtime crash. They
now give an "undefined word" error in 32-bit mode.
*** ABORT would give a spurious error instead of just aborting. This
was due to a couple of lines at the end of (THROW) being wrongly
commented out, for reasons which are now lost in the mists of time.


|