Edit: Hmm, so that means that any implementation of environments would have 
to be handled in two separate ways: one by the compiler for non-global 
scope, and one in run time for the special global system?]


On Wednesday, July 8, 2015 at 9:49:50 PM UTC-4, Brandon Taylor wrote:
>
> Hmm, so that means that any implementation of environments would have to 
> be handled in to separate ways: one by the compiler for non-global scope, 
> and one in run time using a second for the special global system?]
>
>
> 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. 
>> >>>>>>>> 
>> >>>>>>>> 
>> >>>>>>>> Regards 
>> >>>>>>>> 
>> >>>>>>>> > On Wednesday, July 8, 2015 at 4:18:09 PM UTC-4, Milan 
>> Bouchet-Valat 
>> >>>>>>>> > wrote: 
>> >>>>>>>> > > Le mercredi 08 juillet 2015 à 12:57 -0700, Brandon Taylor a 
>> écrit 
>> >>>>>>>> > > : 
>> >>>>>>>> > > 
>> >>>>>>>> > > > If scoping rules are too complicated and cause confusion, 
>> why 
>> >>>>>>>> > > > are 
>> >>>>>>>> > > 
>> >>>>>>>> > > > they built into the base implementation of function? 
>> >>>>>>>> > > What do you mean? Which function? 
>> >>>>>>>> > > 
>> >>>>>>>> > > > On Wednesday, July 8, 2015 at 3:48:52 PM UTC-4, Milan 
>> Bouchet 
>> >>>>>>>> > > -Valat 
>> >>>>>>>> > > > wrote: 
>> >>>>>>>> > > > > Le mercredi 08 juillet 2015 à 12:34 -0700, Brandon 
>> Taylor a 
>> >>>>>>>> > > écrit : 
>> >>>>>>>> > > > > 
>> >>>>>>>> > > > > > I was aware of those packages (though I hadn't read 
>> the 
>> >>>>>>>> > > > > discussions 
>> >>>>>>>> > > > > > referenced). Macros are great but they are incredibly 
>> >>>>>>>> > > difficult 
>> >>>>>>>> > > > > to 
>> >>>>>>>> > > > > > reason with concerning issues of scope (at least for 
>> me). 
>> >>>>>>>> > > > > Deifying 
>> >>>>>>>> > > > > > environments could solve all of these issues (and so 
>> much 
>> >>>>>>>> > > more) 
>> >>>>>>>> > > > > in 
>> >>>>>>>> > > > > > one fell swoop. 
>> >>>>>>>> > > > > On the contrary, I think well-designed macros can be 
>> much 
>> >>>>>>>> > > easier to 
>> >>>>>>>> > > > > 
>> >>>>>>>> > > > > think about than environments in R. If the macro takes a 
>> >>>>>>>> > > DataFrame 
>> >>>>>>>> > > > > object and an expression, there's no ambiguity about 
>> what the 
>> >>>>>>>> > > scope 
>> >>>>>>>> > > > > is. 
>> >>>>>>>> > > > > This is even better if variables that should be found in 
>> the 
>> >>>>>>>> > > data 
>> >>>>>>>> > > > > frame 
>> >>>>>>>> > > > > are passed as symbols, like :var, while standard 
>> variables 
>> >>>>>>>> > > > > are 
>> >>>>>>>> > > > > specified as usual. 
>> >>>>>>>> > > > > 
>> >>>>>>>> > > > > On the other hand, I find R formulas too flexible and 
>> complex 
>> >>>>>>>> > > to 
>> >>>>>>>> > > > > reason 
>> >>>>>>>> > > > > about. You never know whether an object will be found in 
>> the 
>> >>>>>>>> > > > > formula's 
>> >>>>>>>> > > > > environment, in one of the parent environments of the 
>> >>>>>>>> > > > > function/package 
>> >>>>>>>> > > > > you called, in your function, or in the global 
>> environment. 
>> >>>>>>>> > > > > 
>> >>>>>>>> > > > > 
>> >>>>>>>> > > > > Regards 
>> >>>>>>>> > > > > 
>> >>>>>>>> > > > > > On Wednesday, July 8, 2015 at 3:20:00 PM UTC-4, David 
>> Gold 
>> >>>>>>>> > > wrote: 
>> >>>>>>>> > > > > 
>> >>>>>>>> > > > > > > Some of these issues have been thought about fairly 
>> >>>>>>>> > > extensively 
>> >>>>>>>> > > > > by 
>> >>>>>>>> > > > > > > the stats community in particular, precisely on 
>> account 
>> >>>>>>>> > > > > > > of 
>> >>>>>>>> > > the 
>> >>>>>>>> > > > > use 
>> >>>>>>>> > > > > > > cases you cite: 
>> >>>>>>>> > > > > > > 
>> >>>>>>>> > > > > > > https://github.com/JuliaStats/DataFrames.jl/pull/472 
>> >>>>>>>> > > > > > > 
>> https://github.com/JuliaStats/DataFrames.jl/issues/504 
>> >>>>>>>> > > > > > > 
>> >>>>>>>> > > > > > > I think that the matter is still very much an open 
>> >>>>>>>> > > question. I 
>> >>>>>>>> > > > > have 
>> >>>>>>>> > > > > > > no sense that anything is going to be added to Base 
>> Julia 
>> >>>>>>>> > > > > itself. 
>> >>>>>>>> > > > > > > Currently, the best way (that I know of, anyway) to 
>> >>>>>>>> > > > > > > achieve 
>> >>>>>>>> > > the 
>> >>>>>>>> > > > > 
>> >>>>>>>> > > > > > > delayed evaluation effect is via the use of macros. 
>> See 
>> >>>>>>>> > > > > > > for 
>> >>>>>>>> > > 
>> >>>>>>>> > > > > > > instance: 
>> >>>>>>>> > > > > > > 
>> >>>>>>>> > > > > > > https://github.com/JuliaStats/DataFramesMeta.jl 
>> >>>>>>>> > > > > > > https://github.com/one-more-minute/Lazy.jl 
>> >>>>>>>> > > > > > > 
>> >>>>>>>> > > > > > > I'm hope somebody else will be able to pop in an 
>> give a 
>> >>>>>>>> > > more 
>> >>>>>>>> > > > > > > thorough answer, but the above may at least be a 
>> place to 
>> >>>>>>>> > > > > start. 
>> >>>>>>>> > > > > > > 
>> >>>>>>>> > > > > > > On Wednesday, July 8, 2015 at 2:03:45 PM UTC-4, 
>> Brandon 
>> >>>>>>>> > > Taylor 
>> >>>>>>>> > > > > > > wrote: 
>> >>>>>>>> > > > > > > > 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 (or any 
>> >>>>>>>> > > > > > > > other 
>> >>>>>>>> > > > > > > > environment that you choose). R in general has the 
>> >>>>>>>> > > functions 
>> >>>>>>>> > > > > like 
>> >>>>>>>> > > > > > > > list2env and list(environment()) that allow one to 
>> >>>>>>>> > > convert an 
>> >>>>>>>> > > > > 
>> >>>>>>>> > > > > > > > environment into a list and back again (list being 
>> the 
>> >>>>>>>> > > > > > > > R 
>> >>>>>>>> > > > > > > > equivalent of a Dict). Are there any plans to add 
>> these 
>> >>>>>>>> > > kind 
>> >>>>>>>> > > > > of 
>> >>>>>>>> > > > > > > > features to Julia? 
>> >>>>>>>> > > > > > > > 
>>
>

Reply via email to