[Aldor-l] [Axiom-developer] Spad and its object model

Ralf Hemmecke ralf at hemmecke.de
Mon Jun 11 11:14:54 EDT 2007


On 06/11/2007 02:55 PM, Stephen Wilson wrote:
> Hi Ralf,
> 
> Ralf Hemmecke <ralf at hemmecke.de> writes:
>> If you extend Integer then it will not be visible globally. Clearly,
>> it is visible only for those things that "see" the extension.
> 
> Of course you are completely correct.  The specific issue I was trying
> to point out is illustrated by the following (note that I have not
> been able to get Aldor working locally for a long time.   Binaries
> from aldor.org do not work for some reason.

Send complaints to Stephen Watt and Lauretiu Dragan. But if you have a 
64bit machine that could be some problem. There should be a hint by 
Christian Aistleitner concerning the 64bit problem in the aldor-l archive.

See also

http://www.aldor.org/pipermail/aldor-l/2005-September/000100.html

and maybe that is also relevant.

http://www.aldor.org/pipermail/aldor-l/2005-June/000074.html

> This is from, possibly
> bad, memory):
> 
> 
>     Foo(T: Type): with {
>         foo: () -> Boolean;
>     } == add {
>         if T has with {bar:() -> T} then
>             foo(): Boolean == true;
>         else
>             foo(): Boolean == false;
>     }
> 
> 
> In such a situation, I belive the `has' predicate will see exports
> defined via an `extend' occurring in a seperate compilation unit.
> Perhaps you could verify?

OK.

---BEGIN aaa.as
#include "aldor"
Foo(T: Type): with {
     foo: () -> Boolean;
} == add {
     if T has with {binomial: (%, %) -> %} then
         foo(): Boolean == true;
     else
         foo(): Boolean == false;
}
---END aaa.as


---BEGIN bbb.as
#include "algebra"
#include "aldorio"
#library AAA "aaa.ao"
import from AAA;

main(): () == {
     stdout << "foo i == " << foo()$Foo(Integer) << newline;
     stdout << "foo s == " << foo()$Foo(String) << newline;
}

main();
---END bbb.as


aldor -laldor -fo -fao aaa.as
aldor -lalgebra -laldor -fx bbb.as aaa.o
bbb
foo i == T
foo s == F

But I could have told you the result without actually compiling. The 
reason is that Foo is a function and only at the time you call 
Foo(Integer) the "has" predicate gets evaluated.

It is more interesting to ask what happens in an interactive 
environment. So let's try.

woodpecker:~/scratch>aldor -gloop
      AA  L      DDDD      OOO    RRRR
     A A  L      D   D    O   O   R   R
    A  A  L      D    D  O     O  R   R
   AAAAA  L      D    D  O     O  RRRR
  A    A  L      D   D    O   O   R  R
A     A  LLLLL  DDDD      OOO    R   R

(c) Numerical Algorithms Group Ltd 1995-2001
Release: Aldor(C) version 1.0.3 for LINUX(glibc2.3) (debug version)
Type "#int help" for more details.
%1 >> #include "aldor"
%2 >> #include "aldorinterp"
%3 >> #library AAA "aaa.ao"
%4 >> import from AAA;
%5 >> foo()$Foo(Integer)
F @ Boolean
%6 >> #include "algebra"
%7 >> foo()$Foo(Integer)
T @ Boolean

You cannot even say that this is wrong or right. Foo(Integer) appears in 
a "type context" and according to the Aldor specification, it might or 
might not be evaluated.

> I always thought Aldor's `extend' was designed to allow for the
> enrichment of domains defined within a closed-source library, not as a
> general mechanism for solving the kind of mutually recursive
> definitions found in Axioms algebra.

I must say, even in an open-source environment, "extend" allows you to 
introduce layers of your library and thus allows to put more structure 
in the design.

One doesn't have to recompile the whole Axiom library if one thinks that 
Integer misses some function. That new function is completely irrelevant 
to existing parts of the library and only plays a role in newer parts. 
"extend" in my eyes helps to keep libraries maintainable.

Ralf





More information about the Aldor-l mailing list