Stephen Pair wrote:
ri, 31 Aug 2001 01:03:08 -0700

Dear Thomas:

I have redirected your message here because  it is not my intention
to knock  any language. I want programming languages to be as good
as the variety of languages around us! My favourite one is German for
example!!! But I would like to know Chinese!!! The pupil of my eyes
is biodiversity treaty!!!
    This sounds great! Java has sort of these facilities. But to program in
    Java is rather nasty! I do not think I am being biased because I do need
    to program with the prototypes!!!

Squeak doesn't have prototypes, but it's a nice system nonetheless.
Give it a try.

Thanks to Stephen Pair Squeak has prototypes now!!Java thanks
to Gunther Kniesel has prototypes too!!! All inspired in Self!!!
Se Kniesel's Lava (Java + prototypes):

He does a real nice job!!!

However, don't knock Java.  Yes, it is more effort to get stuff
done in it.  On the other hand, when you are dealing with other people's
code, the type checking and extra structure is really a blessing.

Yes , I understand  everybody is striving to deliver more expressive, safe
and efficient
languages and unfortunately  there is no formula to make a language
that is all that at the same time
but ecodesign models  require this at light speed,  thought travels
at a speed higher than light says Jack Sarfatti in his Postquantum
Mechanics!!! So I am sure mankind needs ecodesign modes  at
thought speed!!  This is why I seem agressive!! It is my love for



The following is copied from the web page:
(which also contains screenshot).  It thought it may be of interest
to the people on this list.

=== Overview
This change set adds delegation capabilities to the Squeak VM. It
also extends some previous work on prototypes by Hans Martin Mosner
to implement a Self-like ( system within

Delegation is the act of forwarding a message to another object, but
maintaining the original receiver such that sends to self in the new
method context will be directed back to the delegating object.

=== Screenshot
The following screenshot shows ProtoInspectors open on a family
(literally) of objects. They are arranged according to their
inheritance hierarchy. Slots with an asterisk denote parent slots
(their behavior is inherited by the child). The image doesn't show
it, but you may have any number of parent slots.

 <<see web page:>>

=== Implementation Details
Two new bytecodes are added to the VM:

(but the compiler has not yet been modified to generate these

Several new primtives are added to support delegation and reflection

primitiveDelegate - added to Object as #delegate:,
#delegate:with:, ...etc
primitiveDelegateArgs - added to Object as #delegate:withArguments:

The following primitives allow a Mirror to reflect on objects without
needing to send messages to the reflectee (this allows mirror to
manipulate objects that may have a very lightweight protocol):


The message lookup algorithm is also modified to search the parent
slots of objects whos class is an instance of ProtoBehavior. This
allows for instance based, multiple inheritance.

Bytecodes accessing the internal structure of an object
(pushReceiverVariable and kin) are modified such that the look to
the "receiverStorage" object in the active context. In normal
messages receiverStorage is identical to receiver, but in delegated
methods, they will be different.

You may create object that inherit behavior from normal Smalltalk
instances (direct instance variable manipulation will affect the
parent object, not the child's slots).

Hans Martin Mosner's HmmProtoObject class has been dropped in favor
of the Mirror class and a reflection based approach to meta-
programming in the spirit of Self. To add or remove slots or methods,
you must use a mirror (unless you add methods to your instance). The
ProtoInpector now uses a Mirror to manipulate an object. This allows
objects to be inspected and manipulated even if they have no behavior.

The VM has also been enhanced such that a recursive
#doesNotUnderstand: will not crash the image, but lookup the
#doesNotUnderstand: on Object (and you will get a #doesNotUnderstand:
on a #doesNotUnderstand: message). This was done because the
likelyhood of accidentally creating objects that don't understand
#doesNotUnderstand: has increased dramatically with the introduction
of ProtoBehavior.

There should now be enough support in the VM to implement a pretty
robust implementation of Self within Squeak. It would be really cool
to see the Self tools for manipulating objects recreated in Squeak.

=== Issues
The compiler has not been modified in any way, shape or form to
implement anything like the Self syntax. This means that doing
certain things can be awkward. Additionally, this means that you must
use #delegate: or one of it's variants in order to accomplish what
Self calls a "resend." Also, only a directed resend is possible.

There is no way to store instance based source code, therefore, all
methods appear in their de-compiled form. This is a pain.

=== Downloading
There are three things that you can download:

1. A bundle that includes a demo image, changes file, and a Win32 VM
2. Just the change set (you will need to compile your own VM and
follow the procedure below to get an existing image prepared to run
on it) 3. Just the win32 VM (note, trying to run a base Squeak image
on this VM won't get you very far very fast)

If you are going to compile you own VM, you will need to load the
change set, and then execute the following code in a workspace to
prepare the existing method contexts in your image:

MethodContext allInstances do:
  [ :ea | ea instVarNamed: #receiverMap put: ea receiver ]. Smalltalk
snapshot: true andQuit: true.

Then, you should have an image that will work on your new VM with
support for delegation.

Your use of Yahoo! Groups is subject to

| Albertina Lourenci                                       |
| PhD  in Architecture and Urbanism                        |
| post-doctorate researcher                                |
| Laboratory of Integrated Systems University of Sao Paulo |
| Avenida Professor Luciano Gualberto, 158 Travessa 3      |
| CEP: 05508-900                                           |
| Sao Paulo Sao Paulo State Brazil                         |
| Voice: +55 011 818 5254                                  |
| Fax: +55 11 211 4574                                     |