~ubuntu-branches/ubuntu/quantal/gclcvs/quantal

« back to all changes in this revision

Viewing changes to pcl/notes/3-17-88-notes.text

  • Committer: Bazaar Package Importer
  • Author(s): Camm Maguire
  • Date: 2004-06-24 15:13:46 UTC
  • Revision ID: james.westby@ubuntu.com-20040624151346-xh0xaaktyyp7aorc
Tags: 2.7.0-26
C_GC_OFFSET is 2 on m68k-linux

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
Copyright (c) Xerox Corporation 1988. All rights reserved.
 
2
 
 
3
These notes correspond to the beta test release of March 17th 1988.
 
4
Later versions of this release will run in the usual lisps, but for the
 
5
time being this has only been tested in Symbolics, Lucid, Coral,
 
6
Xerox, Ibuki (01/01), TI and VAXLisp Common Lisps.
 
7
 
 
8
Note may not run in all Franz Lisps, I believe it runs on the SUN3
 
9
though.  I will get back to this in a few days when I get the needed
 
10
code from Franz.
 
11
 
 
12
***
 
13
This release will run in Lucid 3.0 beta 2, with the boolean.lbin patch.
 
14
 
 
15
***
 
16
This release contains a prototype implementation of the make-instance
 
17
behavior documented in the CLOS specification (X3J13 document # 88-002).
 
18
This prototype implementation does not provide high performance, but it
 
19
should conform to the specification with one exception, it does not
 
20
check the validity of the initargs.
 
21
 
 
22
All the generic functions in the instance creation protocol are as
 
23
specified in the CLOS specification except that make-instance is called
 
24
mki instead.  This name is a temporary name, it is so that people can
 
25
try out the new make-instance protocol without having to convert all
 
26
their code at once.  In a future release, the name make-instance will be
 
27
switched to the new behavior.
 
28
 
 
29
***
 
30
Standard method combination is supported.  General declarative
 
31
method combination is not yet supported, so define-method-combination does
 
32
not yet work, but standard method combination is what generic functions
 
33
do by default now.  :after :before :around and unqualified methods are
 
34
supported.  Error checking is minimal.
 
35
 
 
36
***
 
37
call-next-method works with standard-method-combination.
 
38
call-next-method is much faster than it was before, and call-next-method
 
39
behaves as a lexically defined function.  This means it is possible to
 
40
pass around funargs which include call-next-method.
 
41
 
 
42
***
 
43
All uses of slot-value within a method body should be optimized.  It
 
44
should no longer be necessary to use with-slots just to get the
 
45
optimization.
 
46
 
 
47
***
 
48
There are new macros with-slots* and with-accessors*.  These correspond
 
49
to the macros which will appear in the final specification, with-slots
 
50
and with-accessors.  They work as follows:
 
51
 
 
52
(with-slots* ((x x-slot)             
 
53
              (y y-slot))         ===\ (let ((#:g1 (foo)))
 
54
             (foo)                ===/   (swapf (slot-value #:g1 'x-slot)
 
55
  (swapf x y))                                  (slot-value #:g1 'y-slot))) 
 
56
 
 
57
(with-accessors* ((x position-x)          
 
58
                  (y position-y)) ===\ (let ((#:g1 (foo)))
 
59
                 (foo)            ===/   (incf (position-x #:g1))
 
60
  (incf x)                               (incf (position-y #:g1)))
 
61
  (incf y))
 
62
 
 
63
As an abbreviation, the (<variable-name> <slot-name>) pairs in with-slots*
 
64
can be abbreviated to just <variable-and-slot-name> when the variable
 
65
and slot name are the same.  This means that:
 
66
 
 
67
(with-slots* (x y z) <instance-form> &body <body>)
 
68
 
 
69
is equivalent to:
 
70
 
 
71
(with-slots* ((x x) (y y) (z z)) <instance-form> &body <body>)
 
72
 
 
73
You should begin to convert your code to use these macros as soon as
 
74
possible since the old macro with-slots will swap names with with-slots*
 
75
sometime soon.
 
76
 
 
77
A trick you may want to use for remembering the order of the first two
 
78
arguments to with-slots* and with-accessors* is that it is "like
 
79
multiple-value-bind".
 
80
 
 
81
***
 
82
In addition this release includes the beginnings of support for doing
 
83
some of the compiling which PCL does a load time at compile time
 
84
instead.  To use this support, put the form:
 
85
 
 
86
  (pcl::precompile-random-code-segments)
 
87
 
 
88
in a file which is compiled after all your other pcl using files are
 
89
loaded.  Then arrange for that file to be loaded before all your
 
90
other pcl using files are loaded.
 
91
 
 
92
For example, if your system has two files called "classes" and "methods",
 
93
create a new file called "precom" that contains:
 
94
 
 
95
  (in-package 'pcl)
 
96
 
 
97
  (pcl::precompile-random-code-segments)
 
98
 
 
99
 
 
100
Then you can use the defsystem stuff defined in the file defsys to
 
101
maintain your system as follows:
 
102
 
 
103
(defsystem my-very-own-system
 
104
           "/usr/myname/lisp/"
 
105
  ((classes   (precom)           ()                ())
 
106
   (methods   (precom classes)   (classes)         ())
 
107
   (precom    ()                 (classes methods) (classes methods))))
 
108
 
 
109
This defsystem should be read as follows:
 
110
 
 
111
* Define a system named MY-VERY-OWN-SYSTEM, the sources and binaries
 
112
  should be in the directory "/usr/me/lisp/".  There are three files
 
113
  in the system, there are named classes, methods and precom.  (The
 
114
  extension the filenames have depends on the lisp you are running in.)
 
115
  
 
116
* For the first file, classes, the (precom) in the line means that
 
117
  the file precom should be loaded before this file is loaded.  The
 
118
  first () means that no other files need to be loaded before this
 
119
  file is compiled.  The second () means that changes in other files
 
120
  don't force this file to be recompiled.
 
121
 
 
122
* For the second file, methods, the (precom classes) means that both
 
123
  of the files precom and classes must be loaded before this file
 
124
  can be loaded.  The (classes) means that the file classes must be
 
125
  loaded before this file can be compiled.  The () means that changes
 
126
  in other files don't force this file to be recompiled.
 
127
 
 
128
* For the third file, precom, the first () means that no other files
 
129
  need to be loaded before this file is loaded.  The first use of
 
130
  (classes methods)  means that both classes and methods must be
 
131
  loaded before this file can be compiled.  The second use of (classes
 
132
  methods) mean that whenever either classes or methods changes precom
 
133
  must be recompiled.
 
134
 
 
135
Then you can compile your system with:
 
136
 
 
137
 (operate-on-system 'my-very-own-system :compile)
 
138
 
 
139
and load your system with:
 
140
 
 
141
 (operate-on-system 'my-very-own-system :load)
 
142
 
 
143
***
 
144
The code walker has gone through some signigificant revision.  The
 
145
principle change is that the function walk-form now takes three required
 
146
arguments, and the walk-function itself now must accept an environment
 
147
argument.  There are other changes having to do with the implementation
 
148
specific representation of macroexpansion environments.  For details see
 
149
the file walk.lisp.
 
150
 
 
151
***
 
152
The following functions and macros which used to be supported for
 
153
backward compatibility only are now not supported at all:
 
154
 
 
155
WITH* and WITH
 
156
 
 
157
DEFMETH
 
158
 
 
159
GET-SLOT
 
160
 
 
161
MAKE
 
162
 
 
163
 
 
164
***
 
165
There are other small changes in this release.  If you notice one that
 
166
causes you problems please send me a message about it.
 
167