Mail Archives: opendos/1997/04/23/05:04:08
>> >It'd be interesting to see if one can make Scheme-like hygenic macros
>> >for assembly language, rather than just simple substitution devices!
>>
>> Sounds great! Now, can you explain what it is? ;)
>
>Oh, all right...
>
>Hygeinic macros are macros guaranteed not to cause name space collisions.
>
>Eg, if we have a C macro like so:
>
>#define PRINT_SUM(x,y) {int temp; temp = x + y; cout << temp << endl;}
>
>It works by simply substituting the text of the macro in where it is
>invoked.
>
>However, this soon brings up problems. The x and y parameters may not
>be references to variables called temp, cout, or endl, since that will
>collide with the definitions in the macro.
>
>The definition of a hygenic macro is that any global identifiers accessed in
>the macro have the meaning they did at the point the macro was defined, eg
>if we use PRINT_SUM inside a block with a local variable called "cout",
>PRINT_SUM will still use the cout that was declared when /it/ was declared.
>
>Saves on bugs and confusion...
ah... so "true local variables"
- Raw text -