axiom-developer
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Axiom-developer] Re: newrule from metalex.lisp


From: Gabriel Dos Reis
Subject: [Axiom-developer] Re: newrule from metalex.lisp
Date: Thu, 9 Aug 2007 13:34:23 -0500 (CDT)

On Thu, 9 Aug 2007, address@hidden wrote:

| Gaby,
| 
| > The routine NEWRULE from metalex.lisp contains the following:
| >
| > (test Rule1)
| >
| > That line should read
| >
| > (test "RULE1")
| 
| I don't know where metalex is used anymore. 

If metalex is no longer used, then we should just remove it :-)
I'm all for unused Lisp codes that go away.


| The meta language was removed years ago and rewritten into lisp.
| The zips/meta.tar file is the last remaining evidence.
| 
| I'm not sure I can make a reasonable comment on a change like this.

Well, obviously I did not invent the fix from thin air :-)  
Here is what is happening.

I've modifications in a local tree that has all of depsys, interpsys, codes 
completely compiled!  Yes, I remember you said a long time ago that 
depsys needs to run interpreted because of some macros.  I was not convinced
for various reasons.  The current practice of depsys is only because of poor
structure.

The first thing to do to get rid of the 'some macros' stonewall is to
sequester those macros is a separate file, compile them and load them while
compiling functions/files that make use of them.

The second thing I did was to wrap COMPILE-FILE to report back to me whether
there was FAILURE-P or WARNING-P (Common Lisp semantics).  
I made bootsys (and other basis Lisps src/lisp) return non-zero exit when
FAILURE-P is set, so that Make can stop the build.  FAILURE-P means
there might be other diagnostic ecept STYLE-WARNING conditions.
Then I systematically examine the condition that led to the failure.

In this specific case, I was compiling metalex.lisp and bootsys reported back
that the variable Rule1 was undefined.  Then I looked at the file, what it was
trying to do, then eventually trace back to the macro TEST from
bootlex.lisp:

   (defmacro test (x &rest y)
     `(progn
        (setq spaderrorstream t)
        (in-boot)
        (initialize-preparse *terminal-io*)
        (,(intern (strconc "PARSE-" x)) . ,y)))

which is supposed to call the function PARSE-RULE1 from metameta.lisp.
Using type inference, it is "clear" that (strconc "PARSE-" x) works
only if x is of type string, thus the fix.

Now, if you think the whole metameta stuff can go away, I'm all for it --
though I'm not sure it would work (I haven't tried).


| I have no idea what you're thinking about. 
| I have no idea what bug this causes.
| I see no broken-before, fixed-after test cases.

It is not true that there is nothing broken.  The code is obviously wrong as
written since it references a variable that is never defined either statically
nor dynamically.  Beause hat is simply a typo.

| I see no documentation.

Tell that to the those who wrote the uncommented stuff. :-)

| I see no patch/build/test cycles or evidence of testing.
| I see no diff-Naur patch against silver.

I leave this up to you and for another time.

[...]

| You remember the struggles we had trying to decode Martin's code
| without documentation? This change is exactly like that.

I disagree.  I struggled to understand why the compiler is emitting a 
warning.  The struggle is because the *existing code is highly undocumented.*
The history of the typo fix is uninteresting tomorrow, or even 30 years from
now.  Once the typo is fix.  The documentation should explain the purpose of
the codes and how it does the code, not explain how every single typo was
fixed.


Can you explain why the existing code is correct as written?

-- Gaby




reply via email to

[Prev in Thread] Current Thread [Next in Thread]