home *** CD-ROM | disk | FTP | other *** search
- Path: sparky!uunet!zaphod.mps.ohio-state.edu!sdd.hp.com!think.com!yale.edu!spool.mu.edu!agate!agate!usenet
- From: gregor@parc.xerox.com (Gregor Kiczales)
- Newsgroups: comp.archives
- Subject: [comp.lang.scheme] A Tiny MOP, in Scheme
- Followup-To: comp.lang.scheme,comp.object,comp.lang.lisp,comp.lang.clos
- Date: 14 Dec 1992 10:19:03 GMT
- Organization: Xerox Palo Alto Research Center
- Lines: 111
- Sender: adam@soda
- Approved: adam@soda
- Distribution: world
- Message-ID: <1ghn2nINNml8@agate.berkeley.edu>
- References: <GREGOR.92Dec1112140@tracer-bullet.parc.xerox.com>
- NNTP-Posting-Host: soda.berkeley.edu
- X-Original-Newsgroups: comp.lang.scheme,comp.object,comp.lang.lisp,comp.lang.clos
- X-Original-Date: 1 Dec 92 19:21:40 GMT
-
- Archive-name: auto/comp.lang.scheme/A-Tiny-MOP-in-Scheme
-
-
- This message will be of interest to: (i) People who are interested in
- metaobject protocols, particularly metaobject protocols for Lisp-based
- object-oriented languages; and (ii) people who are interested in Lisp-
- based object-oriented languages like CLOS and Dylan. In this message,
- we announce the public availability of the Scheme implementation of a
- `kernelized' CLOS, with a metaobject protocol. (If you are interested
- only in OO languages, and not metaobject protocols, you can skip the
- third, fourth and fifth paragraphs of this message.)
-
- One stumbling block for people interested in playing with the metaobject
- protocol (MOP) ideas has been the relative complexity of working in
- Common Lisp. This has been a particular obstacle for undergraduates and
- others who normally work in Scheme (or a very reduced Common Lisp). To
- try and address this, we have designed and implemented a Scheme
- embedding of a core subset of CLOS, with a corresponding core MOP.
-
- Since our primary goal is pedagogical in nature, we have been able to
- produce an extremely lean language, MOP and implementation. The
- implementation is even simpler than the simple CLOS found in `The Art of
- the Metaobject Protocol,' weighing in at around 850 lines of code,
- including (some) comments and documentation.
-
- By making the new language and MOP be the core of CLOS and the CLOS MOP,
- rather than some completely new language, our goal was to make possible
- for people to work with existing written materials -- primarily `The Art
- of the Metaobject Protocol' (AMOP) -- when playing with this system.
- (It should also be possible for people working with Tiny CLOS to get
- value from reading papers about others MOPs, such as ABLC/R, 3KRS and
- others.) A side benefit of this approach is that Tiny CLOS is close to
- a core of Dylan, so people interested in that language may find value in
- playing with Tiny CLOS as well.)
-
- The MOP in Tiny CLOS is very simple -- 8 introspective procedures and 9
- intercessory generics -- but it retains much of the power of both of the
- MOPs found in AMOP. Even though the Tiny CLOS implementation itself
- isn't optimized, this MOP is amenable to optimization, using techniques
- like those mentioned in AMOP. In fact, the slot access protocol used in
- this MOP is such that it should be possible to get better performance
- than is possible with the CLOS MOP.
-
- While it isn't our primary goal, Tiny CLOS can also be used by those who
- are simply intereted in CLOS/Dylan style OO languages. That is, you can
- play with the base language without even thinking about the MOP. A
- great deal has already been said and written about how to learn, think
- about and teach OOP and CLOS-like languages, so we won't say any more
- about that. But, it is important to point out a significant difference
- between Tiny CLOS and CLOS/Dylan. In Tiny CLOS, slot names are not
- required to be symbols, they can be any Scheme datum (object). (They
- are compared using eq?.) This means that one can use the lexical
- scoping mechanisms of Scheme to achieve a greater degree of
- encapsulation than is possible in CLOS. For more on this, see the
- second and third examples in the examples file.
-
- Accompanying Tiny CLOS is a file of examples, that show how the base
- language works, and how to use the MOP to do several common extensions.
- Other things people might want to write are: before and after methods,
- slot filling initargs, beta-like languages, singleton methods etc.
-
- To make distribution simple, Tiny CLOS is available by anonymous ftp
- from parcftp.xerox.com:/pub/mops. There are five files of interest:
-
-
- tiny-annouce.text This message.
-
- support.scm Just a bunch of useful stuff.
- (All implementation specific mods (are supposed
- to) go in here.)
- tiny-clos.scm The main program.
- tiny-examples.scm A few little examples of using this language
- and this MOP.
- tiny-rpp.text The reflective processor program for this
- MOP. This file was generated, by hand, from
- tiny-clos.scm by removing all the code that
- deals with bootstrapping or grounding out
- the tower. That is, this is the code/protocol
- that you should `think of' as running at the
- next level, when ignoring issues of circularity.
-
-
- MIT Scheme 11.74 is the only Scheme we have access to, so that is the
- only Scheme in which we have run this stuff. But, it should run with
- only minor mods in other Schemes as well. (Please send us those mods
- so they can be included in the sources!)
-
-
- This language, this MOP, and this implementation should not be treated
- as any sort of finished product. This whole thing was cranked out
- relatively quickly, in response to an immediate need for simplified
- Scheme embeddings of this stuff. We are very interested in any
- suggestions or improvements you might have or make. So, please send
- them in!
-
- (It is also worth knowing that this is the first Scheme program I have
- written in 10 years, so I'm willing to believe I have a lot to learn
- about good Scheme style. Rather than just snickering, please let me
- know about stupid things this code does in that regard.)
-
- One other note. You will notice that these files have a copyright
- notice on them, as is the fashion these days. It isn't copyleft, it is
- somewhat more liberal than that. If you have any questions about it,
- send us mail.
-
- Finally, please let us know if you decide to play with this stuff, and
- if you want to be on the mops@parc.xerox.com mailing list. (Note,
- please don't use this mailing list for adminstrative stuff. It is for
- technical questions and discussions. For administrative stuff, send
- mail to Gregor@parc.xerox.com.)
-
-