[Aldor-l] exports and constants
Christian Aistleitner
tmgisi at gmx.at
Mon Jul 24 03:37:52 EDT 2006
Hello,
On Sun, 23 Jul 2006 08:00:56 +0200, Bill Page
<bill.page1 at synthesis.anikast.ca> wrote:
>> ---BEGIN aaa6.as
>> #include "aldor"
>> #include "aldorio"
>> macro I == MachineInteger;
>> define CatX: Category == with {foo: () -> I}
>> A: CatX == add {foo(): I == 0;}
>> B: CatX == add {foo(): I == 1;}
>>
>> import from MachineInteger;
>> X: CatX == if odd? random(10) then A else B;
>>
>> main(): () == {
>> import from X;
>> stdout << foo() << newline;
>> }
>> main();
>> ---END aaa6.as
>>
>> woodpecker:~>aldor -fx -laldor aaa6.as
>> woodpecker:~>aaa6
>> 0
>> woodpecker:~>aaa6
>> 0
>> woodpecker:~>aaa6
>> 0
>> woodpecker:~>aaa6
>> 0
>> woodpecker:~>aaa6
>> 0
>> woodpecker:~>aaa6
>> 1
>> woodpecker:~>aaa6
>> 1
>>
>> [...]
> [...]
> main(): () == {
> import from X;
> stdout << foo() << newline;
> stdout << foo() << newline;
> stdout << foo() << newline;
> stdout << foo() << newline;
> stdout << foo() << newline;
> stdout << foo() << newline;
> }
> main();
>
> You will see that each time you run the program you will only
> get one *constant* result (all 0's or all 1's). But if you run
> the same program repeatedly (as you did above), then sometimes
> you get one result and sometimes the other! Within a given
> runtime of the program, the result is constant and not variable
> as you might be expecting.
I'd strongly expect it to be constant at runtime! "==" gives a constant.
So it should be constant.
What kind of concept is a modifyable constant?
Maybe you want to refer to a macro instead of a constant?
A assume that each time you start the program, odd? random(10) is
evaluated exactly once.
Of course, your whole main function accounts for exactly one program start.
> My conclusion is that Aldor must be sort of "faking" the
> compilation of the constants in the sense that they are not
> fully resolved at compile-time, yet they are indeed constant
> within any run of the program. There must be some kind of
> dynamic initialization phase at the start of the program.
I doubt that. The constant X is compiled to "if odd? random(10) then A
else B;" and neither A nor B. That's not faking, that's just what's in the
.as file. However, the value of a constant is (typically) determined only
once, hence for the whole program execution X acts like either A or B.
--
Kind regards,
Christian
More information about the Aldor-l
mailing list