Right, that’s a succinct way to put it. I would just add that I hope we can 
do this in a way that allows the beginner to reason about things like 
getindex, vec, reshape, transpose, vcat, etc without requiring the him/her 
to understand pointers and the subtleties of memory layout. In a way, I’m 
being selfish: I want to be able to teach my intro stats students Julia.

For example, how does one tell that vec(a) does something different than 
getindex(a,1:length(a)) without testing it? I guess testing it isn’t that 
big of a deal, but if your a beginner you’ll end up testing everything. In 
particular, if x = {"jill", 4} and y = {"bob", 2} it doesn’t seem a-priori 
clear why z = vcat(x,y) doesn’t share memory with x and y. Once you open up 
these possibilities, even things like x = sin(y), to a beginner, could have 
some weird lazy evaluation interpretation.

Another example, why does x=a do something different than x = a[:,:] 
(currently the latter returns a copy, but I guess it might return an 
ArrayView in the future)? Is x=a just one of those special cases where I 
tell my students x=a doesn’t mean what you think…it means that x and a are 
now names for the same thing. 

Anyhoo, my hope is to be able to explain how to identify the different 
behavior to a beginner.

-Ethan

On Sunday, August 31, 2014 12:58:43 PM UTC-7, John Myles White wrote:

I think there’s a broad issue that need resolution: how do you know when a 
> function’s output takes control of the memory used by its arguments? 
>
>  — John 
>
> ​

Reply via email to