Eric Niebler wrote: > On 12/7/2010 12:57 PM, Thomas Heller wrote: >> >> *Dough* misunderstanding here. I didn't mean to clean up the phoenix >> scope expressions with the help of proto::let. I was thinking, maybe >> proto::let can borrow something from phoenix scopes on a conceptual >> level. > > Oh, sure. How does Phoenix handle let scopes? Are local variables > statically or dynamically scoped? How is it accomplished?
Phoenix in general has an abstract concept of an environment. This environment is used to store the arguments of a lambda expression in a tuple. This leads to the only requirement this environment must have: access the arguments with a compile-time index in that tuple, using fusion::at_c<Index>(env). When having a let statement, A new environment is created which acts as a map like data structure, indexed by the local names. Additionally the above requirements are fulfilled. Local variables are dynamically scoped. Additionally you can access locals defined in some outer let scope. This is basically how it is working. I was thinking, maybe, proto can adapt this concept of an environment. This would allow pretty nifty things, like not being tied to only state and data, which really can be a limitation, sometimes. Backwards compatibility can be provided by transparently change proto::_state and proto::_data to do the right thing. _______________________________________________ proto mailing list proto@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/proto