Hi all - continuing the metacircular interpreter topic, at this point I am looking at the hygiene issue. Without trying to implement a full solution that include syntax and identifier objects, it seems that hygiene can be addressed via just substituting lexical identifiers introduced during the expansion process.
It seems doable to me because: - the non lexical identifiers all have to resolve to an existing binding in the transform environment or throws compilation error - so they don't need special handling - since the interpreter will expand all parsed code, the substitution process can be ensured to be unique so there are no name conflicts (capturing or being captured) - basically lambda is the only place that I am introducing lexical binding (maybe case-lambda as well once I get to it), so substitution is localized - what I need is to ensure that it's not too aggressive and ending up substituting variables introduced by nested expressions The above basically automates CL's gensym approach to hygiene AFAICT. I am sure this has been tried before - does anyone see/know of issues with the substitution approach above? Any ideas are appreciated, thanks, yc On Wed, Dec 8, 2010 at 12:19 PM, YC <yinso.c...@gmail.com> wrote: > Thanks Robby! > > > On Wed, Dec 8, 2010 at 4:13 AM, Robby Findler <ro...@eecs.northwestern.edu > > wrote: > >> PS: check out this paper for an algorithm: >> >> http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.54.8909 >> >> Robby >> >> On Wed, Dec 8, 2010 at 6:11 AM, Robby Findler >> <ro...@eecs.northwestern.edu> wrote: >> > Yes, outside in. Inside out doesn't work because the expander only >> > knows where the inside is when it sees a core (fully expanded) form. >> > >> > Robby >> > >> >
_________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users