I'm getting a cannot assign variables in other modules error.
On Tuesday, July 21, 2015 at 6:39:44 AM UTC+8, Yichao Yu wrote: > > On Mon, Jul 20, 2015 at 6:35 PM, Brandon Taylor > <brandon....@gmail.com <javascript:>> wrote: > > Ok, a thought, Julia has an inbuilt idea of a module. Would it be > possible > > to hijack this functionality to provide pseudo-environments? That is, > never > > referring to anything that is not already in an explicit module? And > also, > > have a data-frame simply be a module? > > I think this would in principle works. A module is basically what > global scope means so all the performance concern applies. > > > > > > > On Friday, July 10, 2015 at 11:31:36 PM UTC+8, Brandon Taylor wrote: > >> > >> I don't know if you came across the vignette? > >> http://cran.r-project.org/web/packages/lazyeval/vignettes/lazyeval.html > ? > >> dplyr uses lazyeval extensively, see > >> http://cran.r-project.org/web/packages/dplyr/vignettes/nse.html . The > cool > >> thing about being able to incorporate this kind of thing in Julia would > be > >> being able to use the self-reflection capabilities. > >> > >> On Friday, July 10, 2015 at 10:57:16 AM UTC-4, Cedric St-Jean wrote: > >>> > >>> > >>> > >>> On Thursday, July 9, 2015 at 10:35:30 PM UTC-4, Brandon Taylor wrote: > >>>> > >>>> To walk back in time, you could say something like: compile this like > >>>> this was is in line 8. Or compile this like this was in line 5. It > seems > >>>> like Julia already has some of this functionality in macros. Internal > >>>> variables are compiled as if they were in local scope. But escaped > >>>> expressions are compiled as if they were in global scope. > >>> > >>> > >>> Could you provide context or a real-world use? I've looked at the > >>> lazyeval package, and I'm not entirely sure what it does. Does it > provide > >>> lazy evaluation for R? That's easy to achieve in Julia (well, sorta). > >>> Instead of > >>> > >>> d = determinant(matrix) > >>> .... > >>> u = 2 * d > >>> > >>> you can write > >>> > >>> d = ()->determinant(matrix) > >>> .... > >>> u = 2 * d() # determinant is evaluated on use, in the context where it > >>> was originally defined > >>> > >>> With macros this can turn into > >>> > >>> d = lazy(determinant(matrix)) > >>> > >>> which looks nicer (and also can avoid computing the determinant twice > if > >>> d() is called twice). > >>> > >>> Cédric > >>> > >>>> > >>>> > >>>> On Thursday, July 9, 2015 at 9:11:05 PM UTC-4, Cedric St-Jean wrote: > >>>>> > >>>>> > >>>>> > >>>>> On Thursday, July 9, 2015 at 4:14:32 PM UTC-4, Brandon Taylor wrote: > >>>>>> > >>>>>> Ok, here's where I'm getting hung up. You said that the compiler > >>>>>> figures out the creation/lifetime of all variables at compile time. > So does > >>>>>> that mean there's a list like: > >>>>>> > >>>>>> a maps to location 0 and exists from line 3 to line 9 > >>>>>> b maps to location 1 and exists from line 7 to line 9 > >>>>>> a maps to location 10 and exists from line 7 to 9? > >>>>>> > >>>>>> and that to map variables to locations on any particular line, the > >>>>>> compiler works its way up the list, > >>>>> > >>>>> > >>>>> Yes, more or less. > >>>>> > >>>>>> > >>>>>> > >>>>>> This is perhaps even more helpful than the environment. The > >>>>>> environment is immediately and completely determinable at any point > in the > >>>>>> program. This could make it possible to walk back in time even > within the > >>>>>> same scope. > >>>>> > >>>>> > >>>>> Could you expand on what you're thinking of? > >>>>> > >>>>> This kind of compile-time environment could conceivably be exposed > to > >>>>> macros. Common Lisp had proposals along that line > >>>>> (https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node102.html) but > as far as > >>>>> I can tell, it was too complicated and not useful enough, so it was > >>>>> axed/neutered at some point in the standardization process. > >>>>> > >>>>> > Hadley Wickham's lazyeval package in R is pretty cool in that you > can > >>>>> > attach an environment to an expression, pass it in and out of > functions with > >>>>> > various modifications, and then evaluate the expression within the > original > >>>>> > environment > >>>>> > >>>>> I don't know about R, but to me that sounds entirely doable with > >>>>> closures (and macros will give you a nice syntax for it) > >>>>> > >>>>>> > >>>>>> > >>>>>> On Wednesday, July 8, 2015 at 8:31:44 PM UTC-4, Yichao Yu wrote: > >>>>>>> > >>>>>>> On Wed, Jul 8, 2015 at 8:23 PM, Yichao Yu <yyc...@gmail.com> > wrote: > >>>>>>> > On Wed, Jul 8, 2015 at 7:48 PM, Brandon Taylor > >>>>>>> > <brandon....@gmail.com> wrote: > >>>>>>> >> Hmm, maybe I'm confused about compilation vs interpretation. > Let > >>>>>>> >> me > >>>>>>> >> rephrase. Regardless of a how or when statement is evaluated, > it > >>>>>>> >> must have > >>>>>>> >> access at least to its parent environments to successfully > resolve > >>>>>>> >> a symbol. > >>>>>>> > >>>>>>> AFAIK, the only scope you can dynamically add variable to is the > >>>>>>> global scope. (This can be done with the `global` keyword or > `eval` > >>>>>>> etc). The compiler figure out the creation/lifetime of all local > >>>>>>> variables (at compile time). Therefore, to access a variable in > the > >>>>>>> parent scope: > >>>>>>> > >>>>>>> 1. If it's a global, then it need a runtime lookup/binding (the > >>>>>>> reason > >>>>>>> global are slow) > >>>>>>> 2. If it's in a parent non-global scope, the compiler can figure > out > >>>>>>> how to bind/access it at compile time and no extra (lookup) code > at > >>>>>>> runtime is necessary. > >>>>>>> > >>>>>>> >> > >>>>>>> > > >>>>>>> > A julia local variable is basically a variable in C. There's a > >>>>>>> > table > >>>>>>> > at compile time to map between symbols and stack slots (or > >>>>>>> > whereever > >>>>>>> > they are stored) but such a map does not exist at runtime > anymore > >>>>>>> > (except for debugging). > >>>>>>> > > >>>>>>> >> > >>>>>>> >> On Wednesday, July 8, 2015 at 7:34:09 PM UTC-4, Brandon Taylor > >>>>>>> >> wrote: > >>>>>>> >>> > >>>>>>> >>> They must exist at runtime and at local scope. Evaluating a > >>>>>>> >>> symbol is > >>>>>>> >>> impossible without a pool of defined symbols in various scopes > to > >>>>>>> >>> match it > >>>>>>> >>> to. Unless I'm missing something? > >>>>>>> >>> > >>>>>>> >>> On Wednesday, July 8, 2015 at 7:26:27 PM UTC-4, Jameson wrote: > >>>>>>> >>>> > >>>>>>> >>>> There are global symbol tables for static analysis / > reflection, > >>>>>>> >>>> but they > >>>>>>> >>>> do not exist at runtime or for the local scope. > >>>>>>> >>>> > >>>>>>> >>>> On Wed, Jul 8, 2015 at 7:06 PM Brandon Taylor > >>>>>>> >>>> <brandon....@gmail.com> > >>>>>>> >>>> wrote: > >>>>>>> >>>>> > >>>>>>> >>>>> Surely environments already exist somewhere inside Julia? > How > >>>>>>> >>>>> else could > >>>>>>> >>>>> you keep track of scope? It would be simply a matter of > >>>>>>> >>>>> granting users > >>>>>>> >>>>> access to them. Symbol tables in a mutable language are by > >>>>>>> >>>>> default mutable. > >>>>>>> >>>>> It would certainly be possible only give users access to > >>>>>>> >>>>> immutable > >>>>>>> >>>>> reifications (which could solve a bunch of problems as is). > >>>>>>> >>>>> However, it > >>>>>>> >>>>> seems natural to match mutable symbol tables with mutable > >>>>>>> >>>>> reifications, and > >>>>>>> >>>>> immutable symbol tables with immutable reifications. > >>>>>>> >>>>> > >>>>>>> >>>>> > >>>>>>> >>>>> On Wednesday, July 8, 2015 at 6:50:03 PM UTC-4, Brandon > Taylor > >>>>>>> >>>>> wrote: > >>>>>>> >>>>>> > >>>>>>> >>>>>> I'm not sure I understand... > >>>>>>> >>>>>> > >>>>>>> >>>>>> On Wednesday, July 8, 2015 at 6:24:37 PM UTC-4, John Myles > >>>>>>> >>>>>> White wrote: > >>>>>>> >>>>>>> > >>>>>>> >>>>>>> Reified scope makes static analysis much too hard. Take > any > >>>>>>> >>>>>>> criticism > >>>>>>> >>>>>>> of mutable state: they all apply to globally mutable > symbol > >>>>>>> >>>>>>> tables. > >>>>>>> >>>>>>> > >>>>>>> >>>>>>> On Wednesday, July 8, 2015 at 10:26:23 PM UTC+2, Milan > >>>>>>> >>>>>>> Bouchet-Valat > >>>>>>> >>>>>>> wrote: > >>>>>>> >>>>>>>> > >>>>>>> >>>>>>>> Le mercredi 08 juillet 2015 à 13:20 -0700, Brandon Taylor > a > >>>>>>> >>>>>>>> écrit : > >>>>>>> >>>>>>>> > All functions. > >>>>>>> >>>>>>>> Well, I don't know of any language which doesn't have > >>>>>>> >>>>>>>> scoping > >>>>>>> >>>>>>>> rules... > >>>>>>> >>>>>>>> > >>>>>>> >>>>>>>> Anyway, I didn't say scoping rules are necessarily > >>>>>>> >>>>>>>> confusing, I was > >>>>>>> >>>>>>>> only referring to R formulas. But according to the > examples > >>>>>>> >>>>>>>> you > >>>>>>> >>>>>>>> posted, > >>>>>>> >>>>>>>> your question appears to be different. > >>>>>>> >>>>>>>> > >>>>>>> >>>>>>>> >