[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Issue: DEFINE-OPTIMIZER
- To: jlm@lucid.com
- Subject: Issue: DEFINE-OPTIMIZER
- From: Kent M Pitman <KMP@STONY-BROOK.SCRC.Symbolics.COM>
- Date: Thu, 29 Sep 88 11:20 EDT
- Cc: sandra%defun@cs.utah.edu, Gray@dsg.csc.ti.com, KMP@STONY-BROOK.SCRC.Symbolics.COM, CL-Compiler@sail.stanford.edu
- In-reply-to: <8809282340.AA10285@bhopal>
Date: Wed, 28 Sep 88 16:40:39 PDT
From: Jim McDonald <jlm@lucid.com>
One of the nice things about Pitman's proposal is that it is general
enough so that you could use it to implement the kind of rule-based
approach you describe. I tend to agree with Pitman that this is an
advanced feature, and that people who use it will be willing and able
to do that kind of thing.
Does this mean it is fair to assume that if users want to use the
feature across several ports, they will be willing to modify the
(presumably incompatible) optimization routines supplied by different
vendors, and that vendors will be encouraged to release the source
code for their optimizers? (Otherwise optimizers are likely to be
quiet pessimizers, bypassing internal tricks.)
I think the way Symbolics does its optimizers (I haven't looked recently) is
to allow multiple optimizers on a function and to give each a name, so that
you can selectively redefine each. In effect, it defines
INTERNAL-DEFINE-OPTIMIZER function optimizer-name bvl &BODY forms
so that (effectively) you could define DEFINE-OPTIMIZER as
(DEFMACRO DEFINE-OPTIMIZER (NAME BVL &BODY FORMS)
`(INTERNAL-DEFINE-OPTIMIZER ,NAME ANSI-CL-INTERFACE ,BVL ,@FORMS))
If you have a pattern-driven optimization facility, you could either extend
it so each pattern gets a name and multiple optimizations on the same type
are possible to try (in case one has no effect) or else you could define
that the most specific of several optimizers hit. So DEFINE-OPTIMIZER could
define a pattern that matched anything and then you could define
implementation-specific optimizers that did better.
I guess what I'm saying is that just because this appears to Common Lisp
users as a low-level substrate doesn't mean that it has to be implemented
underneath your optimization facility. It can still sit on top. So you
don't have to publish info about how your internal facility works. The
biggest risk is that people with portable optimizers might extend the
facility unnecessarily in some cases because they don't realize you have
more stuff around they could have linked into.
I see nothing inherently wrong with that, but would like it to be clear
that the level of portability may be very low,
with parallel maintenance required for every vendor you port to,
and that effective use will require a moderate amount of documention
from the vendors.
I totally disagree. You certainly have not made any convincing case for
this at all.